sudo,指令别名
sudo
sudo的使用
- sudo指令可以用來使用其他的使用者身份執行指定的指令。如果未授權使用者嘗試使用 sudo,會提示聯系管理者。
- sudo還有日志功能,無論誰使用sudo指令操作什麼指令,都會被記錄在日志當中
。/var/log/secure
- sudo為系統管理者提供配置檔案,允許系統管理者集中地管理使用者的使用權限和使用的主機
- sudo使用時間戳檔案來完成類似“檢票”的系統,預設存活期為
的“入場券”,關于時間戳檔案在5分鐘
/var/db/sudo
- 通過visudo指令編輯配置檔案,具有文法檢查功能
檢查文法visudo –c
指令:sudo [-u user] COMMAND
參數:
- -V 顯示版本資訊等配置資訊
- -u user 預設為root
- -l,ll 列出使用者在主機上可用的和被禁止的指令
- -v 再延長密碼有效期限5分鐘,更新時間戳
- -k 清除時間戳(1970-01-01),下次需要重新輸密碼
- -K 與-k類似,還要删除時間戳檔案
- -b 在背景執行指令
-
-p 改變詢問密碼的提示符号
示例: -p ”password on %h for user %p:"
上面就是指令的使用介紹和一些參數,并沒有具體的示例,那是因為,我們真正的要使用這個指令,需要配合針對于該指令的配置,配置檔案在
/etc/sudoers
,
/etc/sudoers.d/
中,其中第一個數主配置檔案,第二個是次配置檔案,但在實際上,我們最好是将我們的規則寫在此配置檔案目錄中,這樣便于管理還以免損壞主配置檔案,接下來,我們先對主配置檔案進行了解:
我們在上面顯示的東西,第一個
root ALL=(ALL) ALL
, 其實是
user host=(runas) command
,其中user代表是運作指令者的身份,host是指通過哪些主機運作,runas是以哪個使用者的身份運作,command運作哪些指令。
第二個配置
%wheel ALL=(ALL) ALL
則是讓哪些組中的成員以某些身份在哪些機器上運作哪些指令。
然後我們做一些示例,當然,我們需要寫配置檔案的,我們把配置寫到/etc/sudoers.d/下面去,保證主配置檔案不變。我們使用建立檔案
test
(檔案名可自己取,沒問題)
tom ALL=(root)/usr/bin/cat /etc/shadow

我們使用tom使用者去使用root的身份在所有機器上檢視shasow檔案,在一般情況下,作為普通使用者tom是沒有權限檢視該檔案的,但是,我們給他一個臨時執行的權限,他就能使用sudo指令檢視到該檔案。
我們可以看到,他可以檢視該檔案,但是需要輸入自己的密碼,并且在5分鐘之内使用該指令,不需要再次輸入密碼,關于此的時間戳檔案在
/var/db/sudo
,一點五分鐘的時間過了,我們需要重新輸入密碼。并且時間戳檔案會自動更新。
剛剛我們是使用vim寫的那個配置檔案,但是檔案有沒有什麼問題呢?我們使用指令
visudo –c
來檢查一下該檔案是否有問題。
[root@CT73 sudoers.d]$ visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/test: bad permissions, should be mode 0440
我們看到test文法是沒有問題的,但是權限有點問題,它說權限應該是440,我們需要把它改改,我們可以使用手動修改,或者在寫這個檔案的時候使用visudo -f test來寫就沒問題了。
我們的配置檔案還是支援通配符的,例如:
- ? :任意單一字元
- * :比對任意長度字元
- [wxc]:比對其中一個字元
- [!wxc]:除了這三個字元的其它字元
- \x : 轉義
- [[alpha]] :字母 示例: /bin/ls [[alpha]]*
以上這些都可以使用在通配符裡面,如:
tom ALL=(root)/usr/bin/cat /etc/*
此時tom就可以使用cat指令檢視/etc/下面的所有檔案内容。或者我們還可以這樣寫:
tom ALL=(root)/usr/sbin/useradd
這個配置使得tom使用者具有建立使用者的權限。
在配置檔案中,我們可以使用以下的命名方式:
Users和runas:
- username
- #uid
- %group_name
- %#gid
- user_alias | runas_alias
host:
- ip或hostname
- network(/netmask)
- host_alias
command:
- command name
- directory
- sudoedit
- Cmnd_Alias
示例如下:
讓tom可以在192.168.111.120主機下删除使用者
tom 192.168.111.120=(#0)/usr/sbin/userdel
讓tom可以修改sudoers檔案,這是一個可怕的指令,tom可以修改任何他想得到的權限。
tom 192.168.111.120=(#0) sudoedit
指令别名
很多的時候,需要使用sudo的使用者很多,我們要對他們處理,如果将一個配置寫的很長,會看起來很多,這時候,我們就可以使用指令别名:
别名有四種類型: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias
示例1:
讓student使用者可以使用pidof和ifconfig指令,讓在wheel組裡面的使用者可以無密碼執行任何操作
student ALL=(root)/sbin/pidof,/sbin/ifconfig
%wheel ALL=(ALL) NOPASSWD: ALL
執行個體2:
定義使用者别名,包含兩個使用者,定義指令别名,讓這兩個使用者可以執行該操作。
User_Alias NETADMIN= netuser1,netuser2
Cmnd_Alias NETCMD =/usr/sbin/ip
NETADMIN ALL=(root) NETCMD
示例3:
SYSADER SERS= SYDCMD,DSKCMD沒有帶
()
,它就代表
ALL
任何人
User_Alias SYSADER=wang,mage,%admins
User_Alias DISKADER=tom
Host_Alias SERS=www.fire.com,172.16.0.0/24
Runas_Alias OP=root
Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
SYSADER SERS= SYDCMD,DSKCMD
DISKADER ALL=(OP) DSKCMD
示例4:
定義兩個使用者,在使用useradd,usermod,和passwd使用的時候不需要輸入密碼(設定無法改變root的密碼),在userdel的時候需要輸入密碼(防止誤操作,删除使用者)
User_Alias ADMINUSER = adminuser1,adminuser2
Cmnd_Alias ADMINCMD =/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel
示例5:
預設設定,在授權普通使用者使用sudo指令時,如果沒有
-u username
的話,預設使用wang使用者,在
()
不寫tom,或者沒有
()
,預設就是以tom的執行指令
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
示例6:
wang 192.168.175.136,192.168.175.138=(root)/usr/sbin/,!/usr/sbin/useradd
示例7:
讓tom可以檢視message*的日志檔案,但是這裡有一個安全問題
tom ALL=(ALL) NOPASSWD:/bin/cat /var/log/messages*
我們在使用tom使用者cat/var/log/messages時候,還可以:
sudo cat /var/log/messages /etc/shadow
并且在man幫助文檔中有說明:
Note that mail will not be sent if an unauthorized user tries to run sudo with
...skipping...
%operator ALL =/bin/cat /var/log/messages*
will allow command like:
$ sudo cat /var/log/messages.1
It will also allow:
$ sudo cat /var/log/messages /etc/shadow
which is probably not what was intended.
轉載請标明出處:http://www.cnblogs.com/duzhaoqi/