在linux系統中,有些普通用戶須要藉助root賬號來執行一些操做,但咱們並不能把root密碼給普通用戶,就有了sudolinux
sudo能夠臨時切換到指定賬號進行操做web
使用方法:vim
sudo [ -u 用戶賬號] 須要執行的命令;切換到root時,能夠直接執行sudo 執行命令 便可;網絡
sudo -l :列出全部能夠執行的命令
運維
使用條件:ide
必須以root身份執行visudo,添加須要執行sudo命令的用戶;
測試
執行visudo,實際上修改的是/etc/sudoers文件;ui
爲何要使用visudo,而不直接使用vim /etc/sudoers呢?這是因數visudo在修改完成後能夠對語法進行檢查
spa
使用visudo -c進行語法檢查,當sudoers文件有語法錯誤時,全部的sudo命令都沒法使用
orm
修改配置:
[root@web1 ~]# visudo
root ALL=(ALL) ALL <==找到這一行
liu ALL=(ALL) ALL <==新增的行,保存退出
用戶賬號:表示系統中哪一個賬號可使用sudo命令
第一個ALL:登陸者來源的主機名,表示這個賬號能夠從哪一臺主機鏈接過來,ALL表示任意主機
第二個ALL:可切換的身份,表示此賬號能夠切換哪一個賬號進行操做,ALL表示能夠切換成任何用戶
第三個ALL:可執行的命令,表示此賬號能夠執行哪些命令,ALL表示能夠執行任何命令;
注意:在大多數狀況下,不能爲普通用戶設置所有命令的權限,要讓用戶擁有一個或者幾個權時,ALL能夠換成此命令的絕對路徑,有多個命令時,中間以逗號分開,但必須是全路徑
好比只有修改密碼的權限時,但絕對不能修改root用戶的密碼:
liu ALL=(ALL) !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
用!(感嘆號)表示排除此命令
進行測試:
結果:
從上圖中能夠看到以普通用戶liu登陸時,執行sudo命令建立test2目錄,其屬主和屬組均爲root
sudo免密碼執行命令:
每次執行sodu命令都須要輸入用戶密碼才能執行,那怎麼能夠作到執行sudo不輸入密碼呢?
liuwei ALL=(ALL) NOPASSWD:/usr/sbin/useradd
在給定可執行的命令時,在前邊添加NOPASSWD
有時咱們須要爲不少用戶添加sudo權限,此時能夠經過組來實現
前提:
把須要執行一樣的權限的普通用戶,添到同一個組中
把用戶wei,cui同時加入到組liu中,此組liu中就有liu,wei,cui3個普通用戶
修改配置文件:
#visudo 把以前添加的用戶liu獨有權限刪除,添加組liu
找到圈中的這一行,把「wheel」改成你本身設定的組,我這邊改成組liu,保存退出進行測試
檢查語法:
#visudo -c
測試:
分別切換到用戶liu,wei,cui進行測試 注意:用戶第一次用sudo命令時會收到一些提示
查看上面3文件的屬主屬組,能夠看到都爲root,說明測試成功
之後若是想要增長或者刪除某個用戶sudo權限時,只須要將此用戶添加到或者移除此組就能夠了
思考:
使用sudo命令切換用戶,老是提示輸入本身的密碼才能夠成功,那有沒有辦法不輸入密碼呢?
找到此行,把前邊的#號去掉,百分號後邊添加你須要設定的組便可
測試:能夠看到用戶組liu中的全部用戶,再執行sudo操做時,能夠不用輸入密碼了
總結:
要給定sudo權限的用戶,必須是你信任的用戶;
別名設置:
用戶或者組的別名 --> User_Alias ADMINS = jsmith,mkike,%groupname (注:組前邊須要添加%)
主機別名 --> Host_Alias FILESERVERS = fs1,fs2
能夠切換的用戶角色別名 --> Runas_Alias OP = root
命令別名 --> Cmnd_Alias SERVICES = /sbin/service,/sbin/chkconfig
什麼狀況才使用別名?
答:在工做中通常有多個系統用戶,須要分類,分層次管理用戶的時候
別名實際實例:
工做需求:
開發人員:User_Alias KAIFA_ADMINS = kaifa01,kaifa02
命令權限:KAFACMD
身份權限:KAIFA_ADMINS
運維人員:User_Alias OLD_ADMINS = oldboy,oldgirl,%sa
命令權限:USERCMD,NETMAGCMD,CTRLCMD,DISKCMD
身份權限:OP1
網絡工程師:User_Alias OLD_NETADMINS = leo,maya
命令權限:NETMAGCMD
身份權限:OP2
#用戶分組 --> 相同崗位的人放在一個組
User_Alias OLD_ADMINS = oldboy,oldgirl,%sa
User_Alias OLD_NETADMINS = leo,maya
User_Alias KAIFA_ADMINS = kaifa01,kaifa02
#相似命令分組
Cmnd_Alias USERCMD = /usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,/bin/chown,/bin/chmod
Cmnd_Alias DISKCMD = /sbin/fdisk,/sbin/parted
Cmnd_Alias NETMAGCMD = /sbin/ifconfig,/etc/init.d/network
Cmnd_Alias CTRLCMD = /usr/sbin/reboot,/usr/sbin/halt
Cmnd_Alias KAFACMD = /bin/grep,/usr/bin/tail,/bin/cat
#角色
Runas_Alias OP1 = root,oldboy
Runas_Alias OP2 = root,oldgirl
#受權
KAIFA_ADMINS ALL=(OP1) KAFACMD
OLD_ADMINS ALL=(OP1) USERCMD,DISKCMD,NETMAGCMD,CTRLCMD
OLD_NETADMINS ALL=(OP2) NETMAGCMD
sudo審計:
只記錄用戶使用sudo時執行的命令;
只須要向/etc/sudoers文件中添加以下內容,便可實現sudo審計
echo "Defaults logfile=/var/log/sudo.log" >> /etc/sudoers