歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> sudo 命令情景分析

sudo 命令情景分析

日期:2017/2/28 14:25:13   编辑:Linux教程

Linux 下使用 sudo 命令,可以讓普通用戶也能執行一些或者全部的 root 命令。本文就對我們常用到 sudo 操作情景進行簡單分析,通過一些例子來了解 sudo 命令相關的技巧。

情景一:用戶無權限執行 root 命令
普通用戶登錄 shell 之後,如果自身沒有權限訪問某個文件或執行某個命令時,若該用戶獲得root授權,那麼就可以在需要執行的命令之前加上 sudo,臨時切換到root用戶的權限,完成相關的操作。在sudo於1980年前後被寫出之前,一般用戶管理系統的方式是利用su切換為超級用戶。但是使用su的缺點之一在於必須要先告知超級用戶的密碼,而sudo使一般用戶不需要知道超級用戶的密碼即可獲得權限。

Linux教程分享:如何為sudo命令定義PATH環境變量 http://www.linuxidc.com/Linux/2014-09/106076.htm

Ubuntu的sudo與su命令使用與開啟root帳戶 http://www.linuxidc.com/Linux/2008-01/10685.htm

sudo: sorry, you must have a tty to run sudo http://www.linuxidc.com/Linux/2012-11/75153.htm

Linux配置sudo權限 http://www.linuxidc.com/Linux/2012-10/71795.htm

sudo配置臨時取得root權限 http://www.linuxidc.com/Linux/2012-09/69525.htm

Linux下解決用戶不能執行sudo的方法 http://www.linuxidc.com/Linux/2012-07/64694.htm

Linux系統管理員不可不知的命令:sudo http://www.linuxidc.com/Linux/2013-07/87855.htm

sudo使用之實現權限分配 http://www.linuxidc.com/Linux/2014-02/96996.htm

那麼哪些用戶可以臨時獲得 root 權限呢?這就需要在 /etc/sudoers 文件中進行配置:

授權給單個用戶:

# User privilege specification
guohl ALL=(ALL) ALL
上面這個例子中:

guohl:允許使用 sudo 的用戶名
ALL:允許從任何終端(任何機器)使用 sudo
(ALL):允許以任何用戶執行 sudo 命令
ALL:允許 sudo 權限執行任何命令
如果我們想讓用戶 test 只能在本主機(主機名為guohl-pc)以 root 賬戶執行/bin/chown、/bin/chmod 兩條命令,那麼就應該這樣配置:

# User privilege specification
test guohl-pc=(root) /bin/chown,/bin/chmod
如果test 登錄之後運行 sudo 命令,不滿足上面三個條件命令均失敗。

授權給用戶組:

# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move it further down)
%sudo ALL=(ALL) ALL
和授權給單個用戶類似,只不過將用戶名在這裡換成%組名,所有在該組中的用戶都按照此規則進行授權。對於該例,所有在 sudo 組內的用戶都有在任何終端(第一個ALL)、以任何用戶(第二個ALL)、執行任何命令(第三個ALL)的權限,查看 /etc/group 文件可以知道哪些用戶屬於 sudo 組。

舉例:

如果當前帳號在 /etc/sudoers 文件中被授予 sudo 的權限,那麼你就可以將任何 root 命令作為 sudo 命令的參數,使用 root 權限來執行該命令。舉例來說,掛載一個文件系統只能由 root 來執行,但是一個普通用戶也可以使用 sudo 來掛載:

$sudo mount /dev/sda7 /mnt
[sudo] password for guohailin:
首次使用會要求你輸入當前用戶的密碼,系統確實輸入正確即以 root 權限來執行 mount 命令,接下來一段時間(默認為5分鐘)再次使用 sudo 命令就不需要輸密碼了。

情景二:vim 編輯後發現忘記使用 sudo
我們經常會遇到這樣的一個囧境:使用 vim 對某個文件進行編輯,編輯完之後,按 ESC 之後回到普通模式,再按 :wq 准備保存退出時,發現沒有權限對該文件進行修改,我們在使用 vim 命令時忘記在前面加 sudo 了。我就經常出現這種問題,之前的做法是只能不保存強退,再加上 sudo 重新編輯。

但是今後我們再也不需要用這麼愚蠢的做法了,我們可以在 vim 的普通模式下,按 :w !sudo tee % ,這樣就可以 root 權限來保存文件了,你也無需因為自己一時忘記加個 sudo 而沮喪懊惱了!

情景三:執行 root 命令忘記加 sudo
我們還會遇到這樣稍微好一點的情形:輸入一個長長的命令,按 Enter 之後出現無權限操作,因為我們忘記加 sudo 了。大多人的做法是按 ↑ 回到上一條命令,在該命令之前加上 sudo,再執行該命令。

以後,我們無需這樣了,只要輸入 sudo !! 即可,這裡的 !! 代表上一條命令。如:

$ head -n 4 /etc/sudoers
head: cannot open `/etc/sudoers' for reading: Permission denied

$ sudo !!
sudo head -n 4 /etc/sudoers
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-12/110239p2.htm

Copyright © Linux教程網 All Rights Reserved