linux之sudo使用技巧匯總

2022-01-28 入門小站
sudo和su之間的區別sudo用於普通用戶可以使用root權限來執行命令

su命令是當前用戶用來切換到另外一個用戶的命令,參數為用戶名。執行時會要求輸入密碼,這個密碼是你要切換到的用戶的密碼。

sudo 表示 「superuser do」。它允許已驗證的用戶以其他用戶的身份來運行命令。其他用戶可以是普通用戶或者超級用戶。然而,絕大部分時候我們用它來以提升的權限來運行命令。

sudo命令工作流程sudo會讀取和解析/etc/sudoers文件,查找調用的用戶及權限提示調用該命令用戶的密碼,如果有NOPASSWD標誌則跳過密碼驗證.sudo會創建一個子進程,調用setuid來切換到目標用戶sudo的配置
USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS

USER/GROUP: 表示要被授權的用戶或組,如果是組要以%開頭HOST: 表示允許從哪些主機登錄的用戶運行sudo,ALL表示允許任何終端,機器訪問.(USER[:GROUP]): 表示使用 sudo 可切換的用戶或者組,組可以不指定;ALL 表示可以切換到系統的所有用戶.NOPASSWD:如果指定,則該用戶或者組使用sudo時就不用輸入密碼COMMANDS:表示運行指定的命令,ALL表示允許指定任何命令
# 允許 sudo 組執行所有命令
%sudo ALL=(ALL:ALL) ALL

# 允許用戶執行所有命令,且無需輸入密碼
escape ALL =(ALL) NOPASSWD: ALL

# 僅允許用戶執行 echo, ls 命令
escape ALL =(ALL) NOPASSWD: /bin/echo /bin/ls

# 運行本機的用戶執行關機命令
escape localhost=/sbin/shutdown -h now

# 允許 users 用戶組中的用戶像 root 用戶一樣使用 mount、unmount、chrom 命令
%users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

以提升的權限執行命令
> sudo cat /etc/passwd

當你執行這個命令時,它會詢問 rumenz 的密碼,而不是root用戶的密碼。

以其他用戶執行命令
> sudo -u deploy whoami
deploy

內置命令行為

sudo 的一個限制是 —— 它無法使用 Shell 的內置命令。history記錄是內置命令,如果你試圖用sudo執行這個命令,那麼會提示如下的未找到命令的錯誤:

> sudo history 
[sudo] password for rumenz: 
sudo: history: command not found

我們可以訪問 root shell,並在那裡執行任何命令,包括 Shell 的內置命令。
要訪問 root shell, 執行下面的命令:

> [rumenz@localhost]$ sudo bash
> [root@localhost rumenz]# history

sudo執行多條命令
sudo -- bash -c 'pwd; hostname; whoami'

限制用戶執行某些命令

為了提供受控訪問,我們可以限制 sudo 用戶只執行某些命令。例如,下面的行只允許執行 echo 和 ls 命令 。

rumenz ALL=(ALL) NOPASSWD: /bin/echo /bin/ls

在 vim 裡面使用 sudo 命令

我們編輯系統的配置文件時,在保存時才意識到我們需要 root 訪問權限來執行此操作。因為這個可能讓我們丟失我們對文件的改動。沒有必要驚慌,我們可以在 Vim 中使用下面的命令來解決這種情況

:w !sudo tee %

感嘆號 (!) 表明我們正在運行 shell 命令sudo的原理
> ls -l /usr/bin/sudo
---s--x--x. 1 root root 143248 Jun 28  2018 /usr/bin/sudo

如果仔細觀察文件權限,則發現 sudo 上啟用了setuid位。當任何用戶運行這個二進位文件時,它將以擁有該文件的用戶權限運行。在所示情形下,它是root用戶。

當我們不使用sudo執行 id 命令時,將顯示用戶 rumenz 的 id。

> id
uid=1001(rumenz) gid=1001(rumenz) groups=1001(rumenz)

當使用sudo id時

uid=0(root) gid=0(root) groups=0(root)

sudo -i

sudo -i:可以切換到root狀態下. 為了頻繁的執行某些只有超級用戶才能執行的權限,而不用每次輸入密碼,可以使用該命令。提示輸入密碼時該密碼為當前帳戶的密碼。沒有時間限制。執行該命令後提示符變為「#」而不是「$」。想退回普通帳戶時可以執行exit或logout。

sudo !!

Linux命令行記錄以前執行的命令。可以通過按向上箭頭訪問這些記錄。要以提升的特權重複執行最後一個命令,請使用

> sudo !!

sudo !n

想要作為root授權來運行一個命令,但是忘記使用「sudo」了?不要擔心。我們可以使用」sudo !!」結合命令歷史來執行你想要執行的命令。參數」!!「和」!-1「作用一樣,都是允許用戶作為root來執行我們剛才輸入的命令。當然,以此類推,我們可以使用下面命令來執行倒數第二個命令:

> sudo !-2

相關焦點

  • Linux中設置'sudo'的10個小技巧
    以下是十個/etc/sudoers文件配置,以使用Defaults條目修改sudo命令的行為。00/00/01,如下例所示:[root@linuxprobe ~]# cd /var/log/sudo-io/[root@linuxprobe sudo-io]# lltotal 8drwx- 3 root root 4096 Jan 12 18:58 00-rw-- 1 root root 7 Jan 12 19:08 seq[root
  • linux系統管理指令Sudo出現重大漏洞!影響絕大多數Linux系統
    sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su
  • 面試:說說Linux 命令 su 和 sudo 的區別?
    這個小技巧,表示重複上面輸入的命令,只不過在命令最前面加上 sudo 。因為我已經設置了 sudo 命令不需要輸入密碼,所以這裡 sudo !! 就能直接輸出內容。如果沒有設置的話,需要輸入當前這個用戶的密碼,例如本例中,我就應該輸入 ubuntu 用戶的登錄密碼。
  • Linux 之 sudo 命令
    Linux sudo命令Linux sudo命令以系統管理者的身份執行指令,也就是說,經由 sudo 所執行的指令就好像是 root 親自執行。
  • 關於 sudo 你可能不知道的 | Linux 中國
    你可以定義一次別名,然後可以多次使用。因此,當你對一位管理員不再信任時,將其從別名中刪除就行了。使用多個列表而不是別名,很容易忘記從具有較高特權的列表之一中刪除用戶。為特定組的用戶啟用功能sudo 命令帶有大量默認設置。不過,在某些情況下,你想覆蓋其中的一些情況,這時你可以在配置中使用 Defaults 語句。
  • Linux系統運維之,history使用技巧,你知多少?
    這時就需要使用【history】命令來查詢之前執行過的指令,當然也可以使用上下的鍵來翻閱之前的命令,這樣難免效率有點低。history【history】命令可以快速的列印之前使用的指令,它的使用技巧你知道嗎?接下來給大家介紹介紹幾種使用技巧。
  • 在 Linux 中運行特定命令而無需 sudo 密碼 | Linux 中國
    使用下面的命令來編輯 sudoers 文件:將下面的命令添加到這個文件的最後。sk ALL=NOPASSWD:/bin/mkdir看到了嗎?即便我以 sudo 特權運行 mkdir 命令,也不會彈出提示讓我輸入密碼。
  • 如何在 Linux 中配置 sudo 訪問權限
    (給Linux愛好者加星標,提升Linux技能)英文:Magesh Maruthamuthu,翻譯:Linux中國/liujing97lin
  • linux常用命令用法匯總
    2 grep命令主要作用:linux系統中一個文本搜索工具,能使用正則表達式搜索文本,並把搜索結果列印出來。比如,a.txt文件中如下內容:susu@ubuntu:~/grep_test$ cat a.txttihis test1 werwr.
  • Linux 命令 su 和 sudo 的區別?
    這個小技巧,表示重複上面輸入的命令,只不過在命令最前面加上 sudo 。因為我已經設置了 sudo 命令不需要輸入密碼,所以這裡 sudo !! 就能直接輸出內容。如果沒有設置的話,需要輸入當前這個用戶的密碼,例如本例中,我就應該輸入 ubuntu 用戶的登錄密碼。
  • 使用 pam 幫我們記錄su | sudo密碼
    >type=USER_TTY msg=audit(1560480901.176:1894): pid=16680 uid=0 auid=0 ses=673 data="ls"type=TTY msg=audit(1560480903.048:1896): tty pid=16680 uid=0 auid=0 ses=673 major=136 minor=14 comm="bash
  • wsl2安裝Linux原生Docker
    其實wsl安裝Docker相關內容我已經在wsl整合k8s的相關內容中分享過了,但是為了方便各位小夥伴和自己查閱,我今天又做一個一次整理匯總,形成一個專門的文檔,算是對之前內容回顧和總結吧。安裝命令也很簡單(我一直覺得linux安裝軟體比windows方便,一行命令就完成安裝,它不香嗎):sudo apt install daemonize #第二種方式執行sudo apt install -yqq fontconfig daemonize # 第一種方式需要執行
  • 漏洞分析|linux sudo root 權限繞過漏洞(CVE-2019-14287)
    具有足夠sudo權限的用戶可以使用它來運行Runas規範明確禁止使用的root命令,以這種方式運行的命令的日誌條目將列出目標用戶為4294967295而不是root。該漏洞由Apple Information Security的Joe Vennix發現,漏洞編號為CVE-2019-14287,該漏洞引起大量關注,因為sudo程序是為了讓用戶使用自己的登錄密碼來以其他用戶身份執行命令,無需輸入密碼。更有趣的是,攻擊者可以利用此漏洞,只需指定用戶ID「 -1」或「 4294967295」即可以root身份運行命令。
  • 使用sudo讓普通用戶獲取root用戶的權限
    sudo不是對 shell 的一個代替,它是面向每個命令的。配置文件(/etc/sudoers)提供集中的用戶管理、權限與主機等參數驗證密碼的後5分鐘內(默認值)無須再讓用戶再次驗證密碼環境:Red Hat Enterprise Linux Server release 7.31.
  • linux基礎命令和使用(基礎入門篇,看完就課上手linux作業系統)
    linux基礎命令和使用(基礎入門篇,看完就課上手linux作業系統)通常用全部大寫的變量名表示常量動態變量的申明不用指定變量類型
  • 教你如何在 Linux 中使用 apt 命令
    apt 專為交互式使用而設計。在您的 shell 腳本中優先使用 apt-get 和 apt-cache ,因為它們在不同版本之間向後兼容,並具有更多選項和功能。sudo apt full-upgrade使用此命令時要格外小心。
  • 面試被問 Linux 命令 su 和 sudo 的區別?
    這個小技巧,表示重複上面輸入的命令,只不過在命令最前面加上 sudo 。因為我已經設置了 sudo 命令不需要輸入密碼,所以這裡 sudo !! 就能直接輸出內容。如果沒有設置的話,需要輸入當前這個用戶的密碼,例如本例中,我就應該輸入 ubuntu 用戶的登錄密碼。
  • Manjaro Linux 入門使用教程
    總體來說 Manjaro 安裝還是比較輕鬆的,相比其他的 Linux 發行版,安裝體驗更好。特別是對顯卡驅動方面的支持,一鍵安裝,特別省心。更換軟體源更換軟體源為國內清華大學源,安裝軟體更迅速。/master/tools/install.sh)"chsh -s /bin/zsha安裝常用軟體99% 的軟體只需要幾條命令就可以安裝,像下面這樣。
  • Linux su命令的使用案例
    前言本文主要是講解與演示Linux系統中的su命令的使用與常見用法。Linux su命令的使用案例su命令也稱為switch user,翻譯為切換用戶。該命令用於在登錄會話期間把用戶身份切換到其他用戶。當沒有指定切換目標用戶名時,su默認切換到root用戶。正常來說,su命令用於在不退出系統的情況下將當前登錄的用戶切換到另一個用戶。
  • 如何在 Linux 中使用 history 命令 | Linux 中國
    歷史 101要查看命令歷史,請在 Linux 中打開終端程序,然後輸入:$ history這是我得到的響應:1  clear2  ls -al3  sudo dnf update -y4  historyhistory 命令顯示自開始會話後輸入的命令列表