擊上方“一口Linux”,選擇“星標公眾號”


su用于用戶之間的切換
sudo用于普通用戶可以使用root權限來執行命令
su命令是當前用戶用來切換到另外一個用戶的命令,參數為用戶名。執行時會要求輸入密碼,這個密碼是你要切換到的用戶的密碼。
sudo 表示 “superuser do”。它允許已驗證的用戶以其他用戶的身份來運行命令。其他用戶可以是普通用戶或者超級用戶。然而,絕大部分時候我們用它來以提升的權限來運行命令。
sudo會讀取和解析/etc/sudoers文件,查找調用的用戶及權限
提示調用該命令用戶的密碼,如果有NOPASSWD標志則跳過密碼驗證.
sudo會創建一個子進程,調用setuid來切換到目標用戶
最后會在子進程中執行給定的shell命令
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 -- bash -c 'pwd; hostname; whoami'
雙連字符 (–) 停止命令行切換
bash 表示要用于執行命令的shell名稱
-c選項后面跟著要執行的命令
為了提供受控訪問,我們可以限制 sudo 用戶只執行某些命令。例如,下面的行只允許執行 echo 和 ls 命令 。
rumenz ALL=(ALL) NOPASSWD: /bin/echo /bin/ls
我們編輯系統的配置文件時,在保存時才意識到我們需要 root 訪問權限來執行此操作。因為這個可能讓我們丟失我們對文件的改動。沒有必要驚慌,我們可以在 Vim 中使用下面的命令來解決這種情況
:w !sudo tee %
冒號 (? 表明我們處于 Vim 的退出模式
感嘆號 (!) 表明我們正在運行 shell 命令
sudo 和 tee 都是 shell 命令
百分號 (%) 表明從當前行開始的所有行
> 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:可以切換到root狀態下. 為了頻繁的執行某些只有超級用戶才能執行的權限,而不用每次輸入密碼,可以使用該命令。提示輸入密碼時該密碼為當前賬戶的密碼。沒有時間限制。執行該命令后提示符變為“#”而不是“$”。想退回普通賬戶時可以執行exit或logout。
Linux命令行記錄以前執行的命令??梢酝ㄟ^按向上箭頭訪問這些記錄。要以提升的特權重復執行最后一個命令,請使用
> sudo !!
想要作為root授權來運行一個命令,但是忘記使用“sudo”了?不要擔心。我們可以使用”sudo !!”結合命令歷史來執行你想要執行的命令。參數”!!“和”!-1“作用一樣,都是允許用戶作為root來執行我們剛才輸入的命令。當然,以此類推,我們可以使用下面命令來執行倒數第二個命令:
> sudo !-2一口Linux?
關注,回復【1024】海量Linux資料贈送
精彩文章合集
文章推薦
點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看