【转】sudo命令情景分析
文章轉(zhuǎn)自:http://www.cnblogs.com/hazir/p/sudo_command.html
Linux 下使用?sudo?命令,可以讓普通用戶也能執(zhí)行一些或者全部的 root 命令。本文就對(duì)我們常用到 sudo 操作情景進(jìn)行簡單分析,通過一些例子來了解 sudo 命令相關(guān)的技巧。
情景一:用戶無權(quán)限執(zhí)行 root 命令
普通用戶登錄 shell 之后,如果自身沒有權(quán)限訪問某個(gè)文件或執(zhí)行某個(gè)命令時(shí),若該用戶獲得root授權(quán),那么就可以在需要執(zhí)行的命令之前加上 sudo,臨時(shí)切換到root用戶的權(quán)限,完成相關(guān)的操作。在sudo于1980年前后被寫出之前,一般用戶管理系統(tǒng)的方式是利用su切換為超級(jí)用戶。但是使用su的缺點(diǎn)之一在于必須要先告知超級(jí)用戶的密碼,而sudo使一般用戶不需要知道超級(jí)用戶的密碼即可獲得權(quán)限。
那么哪些用戶可以臨時(shí)獲得 root 權(quán)限呢?這就需要在 /etc/sudoers 文件中進(jìn)行配置:
授權(quán)給單個(gè)用戶:
# User privilege specification guohl ALL=(ALL) ALL上面這個(gè)例子中:
- guohl:允許使用 sudo 的用戶名
- ALL:允許從任何終端(任何機(jī)器)使用 sudo
- (ALL):允許以任何用戶執(zhí)行 sudo 命令
- ALL:允許 sudo 權(quán)限執(zhí)行任何命令
如果我們想讓用戶 test 只能在本主機(jī)(主機(jī)名為guohl-pc)以 root 賬戶執(zhí)行/bin/chown、/bin/chmod 兩條命令,那么就應(yīng)該這樣配置:
# User privilege specification test guohl-pc=(root) /bin/chown,/bin/chmod如果test 登錄之后運(yùn)行 sudo 命令,不滿足上面三個(gè)條件命令均失敗。
授權(quán)給用戶組:
# 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和授權(quán)給單個(gè)用戶類似,只不過將用戶名在這里換成%組名,所有在該組中的用戶都按照此規(guī)則進(jìn)行授權(quán)。對(duì)于該例,所有在 sudo 組內(nèi)的用戶都有在任何終端(第一個(gè)ALL)、以任何用戶(第二個(gè)ALL)、執(zhí)行任何命令(第三個(gè)ALL)的權(quán)限,查看 /etc/group 文件可以知道哪些用戶屬于 sudo 組。
舉例:
如果當(dāng)前帳號(hào)在 /etc/sudoers 文件中被授予 sudo 的權(quán)限,那么你就可以將任何 root 命令作為 sudo 命令的參數(shù),使用 root 權(quán)限來執(zhí)行該命令。舉例來說,掛載一個(gè)文件系統(tǒng)只能由 root 來執(zhí)行,但是一個(gè)普通用戶也可以使用 sudo 來掛載:
$sudo mount /dev/sda7 /mnt [sudo] password for guohailin:首次使用會(huì)要求你輸入當(dāng)前用戶的密碼,系統(tǒng)確實(shí)輸入正確即以 root 權(quán)限來執(zhí)行 mount 命令,接下來一段時(shí)間(默認(rèn)為5分鐘)再次使用 sudo 命令就不需要輸密碼了。
情景二:vim 編輯后發(fā)現(xiàn)忘記使用 sudo
我們經(jīng)常會(huì)遇到這樣的一個(gè)囧境:使用 vim 對(duì)某個(gè)文件進(jìn)行編輯,編輯完之后,按?ESC?之后回到普通模式,再按?:wq?準(zhǔn)備保存退出時(shí),發(fā)現(xiàn)沒有權(quán)限對(duì)該文件進(jìn)行修改,我們?cè)谑褂?vim 命令時(shí)忘記在前面加 sudo 了。我就經(jīng)常出現(xiàn)這種問題,之前的做法是只能不保存強(qiáng)退,再加上 sudo 重新編輯。
但是今后我們?cè)僖膊恍枰眠@么愚蠢的做法了,我們可以在 vim 的普通模式下,按?:w !sudo tee %?,這樣就可以 root 權(quán)限來保存文件了,你也無需因?yàn)樽约阂粫r(shí)忘記加個(gè) sudo 而沮喪懊惱了!
情景三:執(zhí)行 root 命令忘記加 sudo
我們還會(huì)遇到這樣稍微好一點(diǎn)的情形:輸入一個(gè)長長的命令,按?Enter?之后出現(xiàn)無權(quán)限操作,因?yàn)槲覀兺浖?sudo 了。大多人的做法是按?↑?回到上一條命令,在該命令之前加上 sudo,再執(zhí)行該命令。
以后,我們無需這樣了,只要輸入?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. # 情景四:shell 內(nèi)置命令如何使用 sudoshell 是一個(gè)交互式的應(yīng)用程序,在執(zhí)行外部命令時(shí)通過 fork 來創(chuàng)建一個(gè)子進(jìn)程,再通過 exec 來加載外部命令的程序來執(zhí)行,但是如果一個(gè)命令是 shell 內(nèi)置命令,那么只能直接由 shell 來運(yùn)行。sudo 的意思是,以別的用戶(如root)的權(quán)限來 fork 一個(gè)進(jìn)程,加載程序并運(yùn)行,因此 sudo 后面不能跟 shell 的內(nèi)置命令,如:
$ sudo cd /sys/kernel/debugfs sudo: cd: command not found在這種情況,我們又沒有 root 賬戶的密碼,我們?cè)鯓訄?zhí)行該命令呢?有種辦法就是使用 sudo 獲得root shell 的權(quán)限,然后在root shell 中執(zhí)行該命令。進(jìn)入root shell 很簡單,輸入sudo bash?確認(rèn)本用戶的密碼即可,此時(shí)你會(huì)發(fā)現(xiàn)命令提示符顯示當(dāng)前是 root。一旦獲得root shell,你可以執(zhí)行任何命令而不需要在每條命令前輸入sudo了。
另外,常用的shell 內(nèi)置命令在這里?有簡單介紹,我們可以使用 type 命令來查看命令的類型,如:
$ type ls ls is /bin/ls $ type umask umask is a shell builtin情景五:sudo 操作記錄日志
作為一個(gè) Linux 系統(tǒng)的管理員,不僅可以讓指定的用戶或用戶組作為root用戶或其它用戶來運(yùn)行某些命令,還能將指定的用戶所輸入的命令和參數(shù)作詳細(xì)的記錄。而sudo的日志功能就可以用戶跟蹤用戶輸入的命令,這不僅能增進(jìn)系統(tǒng)的安全性,還能用來進(jìn)行故障檢修。但是要記錄sudo的日志還要一些簡單的配置:
-
創(chuàng)建sudo日志文件
$ sudo touch /var/log/sudo.log
我們將sudo日志文件放置在?/var/log/sudo.log?文件中: -
修改?/etc/rsyslog.conf?配置文件
local2.debug /var/log/sudo.log #空白不能用空格,必須用tab
我使用系統(tǒng)為Ubuntu13.04 為改名字,但有些系統(tǒng)名為/etc/syslog.conf,注意不同發(fā)行版之間的差別,在該文件加入下面一行: - 修改?/etc/sudoers?配置文件
注意網(wǎng)上很多關(guān)于sudo日志文件配置都缺少這一步!在該文件中加入下面一行: Defaults logfile=/var/log/sudo.log - 重啟 syslog 服務(wù): $ sudo service rsyslog restart
-
查看 sudo 日志記錄:
$ cat sudo.log Sep 20 22:10:51 : guohailin : TTY=pts/1 ; PWD=/var/log ; USER=root ;COMMAND=/bin/cat /etc/sudoersSep 20 22:11:36 : guohailin : TTY=pts/1 ; PWD=/var/log ; USER=root ;COMMAND=/usr/sbin/service rsyslog restartSep 20 22:11:45 : guohailin : TTY=pts/1 ; PWD=/var/log ; USER=root ;COMMAND=/bin/lsSep 20 22:12:08 : guohailin : TTY=pts/1 ; PWD=/var/log ; USER=root ;COMMAND=/bin/ls /root/
經(jīng)過上面的配置,sudo 的所有成功和不成功的sudo
命令都記錄到文件/var/log/sudo.log 中,例如我運(yùn)行幾條sudo 命令之后,查看該文件的記錄如下:
參考資料:
- sudo mannual
- 7 Linux sudo Command Tips and Tricks
- sudo 日志配置
轉(zhuǎn)載于:https://www.cnblogs.com/ShaunChen/p/6060950.html
總結(jié)
以上是生活随笔為你收集整理的【转】sudo命令情景分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim 多行注释消除注释,多行删除
- 下一篇: ERROR 2002 (HY000):