在linux系統中, 普通用戶的許可權很低, 比如shutdown關機, 或者yum install安裝軟體等很多命令都需要root用戶許可權來運行. 普通用戶想要執行這些命令, 要麼使用su命令切換為root用戶, 而使用su命令需要輸入root密碼, 當伺服器很多人共同管理, 所有管理員都需要知道r ...
在linux系統中, 普通用戶的許可權很低, 比如shutdown關機, 或者yum install安裝軟體等很多命令都需要root用戶許可權來運行. 普通用戶想要執行這些命令, 要麼使用su命令切換為root用戶, 而使用su命令需要輸入root密碼, 當伺服器很多人共同管理, 所有管理員都需要知道root密碼, 是很不安全的; 要麼使用sudo命令臨時獲取root許可權, 而執行sudo命令只需要用戶自己的密碼, 甚至可以免密碼, 而且只有通過配置的特殊用戶才具有sudo特權, 只要許可權分配合理, 安全性會更有保障.
普通用戶是否具有sudo特權, 由sudoers配置文件來指定, 可通過"man sudo"來確認配置文件位於"/etc/sudoers". 先用su命令切換到root用戶, 再用vim打開文件, 用普通用戶打開的話看不到文件內容:
[xy@localhost ~]$ su
Password:
[root@localhost xy]# vim /etc/sudoers
閱讀文件內容,在第8行有說請用visudo命令編輯文件:
## This file must be edited with the 'visudo' command.
用"ll /etc/sudoers"查看文件屬性也可發現該文件為只讀文件,退出vim重新用visudo打開文件
[root@localhost xy]# visudo
1,最基礎無腦的配置:
root ALL=(ALL) ALL
大概位於98行上下,其所代表的含義分別是:
用戶帳號,也就是我們想要配置的讓哪個系統帳號可以使用sudo命令
允許用戶從哪些地方連接到這台主機,linux作為伺服器,管理員是有可能從別的主機遠程連接過來的
允許切換的身份,
允許執行的命令
照葫蘆畫瓢,在下麵增加一行
root ALL=(ALL) ALL
xy ALL=(ALL) ALL
當xy用戶使用sudo執行的時候,就可以像root那樣為所欲為了。
2,根據用戶組及無密碼的配置:
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
跟第一種配置方式相比,也就在前面多了一個“%”,用來表示用戶組。最前面的“#”表示註釋, 把"#"去掉即可生效; 而後面的"NOPASSWD:"即表示不需要輸入密碼就可以執行命令
設置了某個用戶組具有sudo許可權之後,只需要使用usermod命令把相應的用戶添加到該用戶組就可以了:
usermod -a -G wheel xyuser
3,有限制的命令操作:
%users ALL=(root) /usr/bin/passwd
允許users用戶組的用戶以root許可權修改其他用戶的密碼。
當用戶以"sudo passwd"或者"sudo passwd root"方式運行命令的時候,可以直接把root用戶的密碼改掉,這真是太危險了,必須要把這兩條命令禁止調,在命令前面加上"!"來表示不可執行的命令,如下所是:%users ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
4,通過別名問題來設置,有命令別名,賬戶別名,主機別名等,具體參考sudoers文件提供的例子:
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
## Command Aliases
## These are groups of related commands...
## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
5,在sudoers文件的最後面有如下幾行,利用include引入/etc/sudoers.d目錄下的配置文件,
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
sudo與su的聯合使用
當使用第1種方式賦予普通用戶sudo許可權之後,用戶是可以通過“sudo su-”或者“sudo su root”命令輸入自己的密碼而切換為root用戶的,這在一定程度上來說也是很危險的,最好是禁止sudo與su聯用的;而對於一些系統管理員賬號來說,會需要用到root許可權執行大量命令,老是用sudo也是挺麻煩,至少沒有直接切換回root用戶來的方便,又是需要保留sudo與su聯用的
最好的解決方式自然是在給普通用戶分配sudo特權的時候,利用別名,有限制的命令操作等,儘量合理的給賬戶分配許可權,比如如下模式:
root ALL=(ALL) ALL
# 利用賬戶別名功能創建一個別名NORMAL, 之後把只需要賦予部分root特權的賬戶都往裡添加
User_Alias NORMAL = xy, user1, user2, user3
# 分配許可權
NORMAL ALL=(ALL) ALL, !/bin/su, !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root