1 基礎部分
1.1 常用的命令行
man
sudoers
#參閱幫助
visudo
#編輯sudoers的命令
sudo
-l
#查看可執行或禁止執行的命令
sudo
-uuser1
/bin/ls
#指定user1用戶的身份執行命令
sudo
-ggp1
/bin/ls
#指以gp1組的身份執行
sudo
-uuser1-ggp1
/bin/ls
#指定用戶和組的身份執行
1.2 配置文件路徑
/etc/sudoers
1.3 sudoers的規則分類
sudoers的規則分為以下兩類:
1)別名定義(可選)
2)授權規則(必選)
1.4 特殊符號的用法
"#"
用於注釋
"\x"
轉義字符
"\"使用到物理行行尾則把下行的物理行連接成一個邏輯行
"*"
匹配零個或多個字符
"?"
匹配單個字符
"[...]"
匹配指定范圍的字符
"[!...]"
匹配非指定范圍的字符
2 Alias(別名)
2.1 別名的類型
包含以下四種別名:User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias
注:以上別名類型的書寫大小寫敏感
Alias::=
'User_Alias'
User_Alias(
':'
User_Alias)*|
'Runas_Alias'
Runas_Alias(
':'
Runas_Alias)*|
'Host_Alias'
Host_Alias(
':'
Host_Alias)*|
'Cmnd_Alias'
Cmnd_Alias(
':'
Cmnd_Alias)*
2.2 別名的定義格式
2.2.1 單個別名的書寫方式
Alias_TypeNAME=item1,item2,...
注:別名成員以“,”號分隔
2.2.2 多個別名的書寫方式
Alias_TypeNAME=item1,item2,item3:NAME=item4,item5
注:以“:”號分隔
2.2.3 四種書寫簡式
User_Alias::=NAME
'='
User_List
Runas_Alias::=NAME
'='
Runas_List
Host_Alias::=NAME
'='
Host_List
Cmnd_Alias::=NAME
'='
Cmnd_List
2.3 別名定義NAME的有效字符
NAME::=[A-Z]([A-Z][0-9]_)*
2.4 常見的定義范例
2.4.1 命令行別名的定義范例
作用:定義用戶別名和別名中包含能否運行的命令
范例:
##Networking
Cmnd_AliasNETWORKING=
/sbin/route
,
/sbin/ifconfig
,
/bin/ping
,
/sbin/dhclient
,
/usr/bin/net
,
/sbin/iptables
,
/usr/bin/rfcomm
,
/usr/bin/wvdial
,
/sbin/iwconfig
,
/sbin/mii-tool
2.4.2 用戶別名的定義范例
作用:定義用戶別名和別名中包含的用戶
##UserAliases
User_AliasNETWORKINGADMINS=user1,user2,%gp1
注:
1)組前面加“%”號
2)用戶名必須是系統有效的用戶
2.4.3 主機別名的定義范例
作用:定義主機別名和別名中包含的主機
范例:
##HostAliases
Host_AliasFILESERVERS=fs1,fs2
注:
1)服務器fs1和fs2屬於FILESERVERS組
2)主機可以是主機名稱、IP(192.168.0.8)、或網段(192.168.0.0/24)、子網掩碼(255.255.255.0)
3 授權規則
3.1 授權規則的格式
##Nextcomesthemainpart:whichuserscanrunwhatsoftwareon
##whichmachines(thesudoersfilecanbesharedbetweenmultiple
##systems).
##Syntax:
##
##userMACHINE=COMMANDS
##
##TheCOMMANDSsectionmayhaveotheroptionsaddedtoit.
##
##Allowroottorunanycommandsanywhere
其實就這個意思:
用戶名或%組名主機名稱=能否運行的命令
注:以上都可以使用別名代替
3.2 授權規則的范例
3.2.1 不使用別名的定義方式
基於系統用戶名的定義
user1fs1=
/sbin/mount
/mnt/cdrom
,
/sbin/umount
/mnt/cdrom
基於系統組的定義
%gp1fs1=
/sbin/mount
/mnt/cdrom
,
/sbin/umount
/mnt/cdrom
使用ALL關鍵字的定義
rootALL=(ALL)ALL
3.2.2 使用別名的定義方式
NETWORKINGADMINSFILESERVERS=(NETWORKADMINS)
注:
1)NETWORKINGADMINS代表定義過的用戶或組:user1, user2, %gp1
2)FILESERVERS代表定義過的服務器:fs1, fs2
3)NETWORKADMINS代表定義過的命令:/sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
3.2.3 關閉密碼驗證提示
在命令列前加入關鍵字“NOPASSWD: ”,詳細如下:
%wheelALL=(ALL)NOPASSWD:ALL
或
%wheelALL=(ALL)NOPASSWD:
/sbin/route
4 其他指令
4.1 導入子規則
includedir
/etc/sudoers
.d
使定義於/etc/sudoers.d目錄下的子規則生效
4.2 關閉sudo命令的提示
此選項適用於使用shell中調用sudo執行命令時候屏蔽以下提示:
sudo
:sorry,youmusthavea
tty
torun
sudo
4.2.1 方法一
注釋掉以下行:
#Defaultsrequiretty
4.2.2 方法二
添加以下行:
Defaults:user1!requiretty
4.3 指定安全的執行路徑
Defaultssecure_path=
/sbin
:
/bin
:
/usr/sbin
:
/usr/bin
5 開啟監視日志
5.1 創建日志文件
touch
/var/log/sudo
.log
5.2 開啟sudo的日志功能
visudo
加入如下行:
Defaultslogfile=
/var/log/sudo
.log
Defaultsloglinelen=0
Defaults!syslog
5.3 配置系統日志
5.3.1 修改日志配置文件
vim
/etc/rsyslog
.conf
“local7.*”行後加入如下行:
local2.debug
/var/log/sudo
.log
5.3.2 重啟系統日志服務
servicersyslogrestart
5.4 測試日志
5.4.1 命令行監視日志
tail
-f
/var/log/sudo
.log
5.4.2 執行指令測試
sudo
/usr/bin/ssh
[email protected]
6 應用場景
6.1 排除部分使用的情景
6.1.2 配置要求
禁止某用戶使用:
ssh
命令
允許某用戶使用:
ssh
除外命令
6.1.2 解決方案
1) 查詢用戶的所屬組
id
mail
顯示如下:
uid=8(mail)gid=12(mail)
groups
=12(mail)
2) 定義方法
%mailALL=(root)NOPASSWD:ALL
mailALL=(root)NOPASSWD:!
/usr/bin/ssh
注:定義所屬組允許執行所有命令,但拒絕用戶執行ssh命令
3) 相對好的定義方法
%mailALL=(root)NOPASSWD:
/sbin/
*,
/bin/
*,
/usr/sbin/
*,
/usr/bin/
*
mailALL=(root)NOPASSWD:!
/usr/bin/ssh
可防止用戶使用如下方法破解:
sudo
cp
/usr/bin/ssh
a
sudo
.
/a
[email protected]
4) 相對更好的定義方法
%mailALL=(root)NOPASSWD:
/sbin/
*,
/bin/
*,
/usr/sbin/
*,
/usr/bin/
*
mailALL=(root)NOPASSWD:!
/sbin/
*
/sbin/
*,!
/sbin/
*
/bin/
*,
/sbin/
*
/usr/sbin/
*,
/sbin/
*
/usr/bin/
*,\
!
/bin/
*
/sbin/
*,!
/bin/
*
/bin/
*,!
/bin/
*
/usr/sbin/
*,!
/bin/
*
/usr/bin/
*,\
!
/usr/sbin/
*
/sbin/
*,!
/usr/sbin/
*
/bin/
*,!
/usr/sbin/
*
/usr/sbin/
*,!
/usr/sbin/
*
/usr/bin/
*,\
!
/usr/bin/
*
/sbin/
*,!
/usr/bin/
*
/bin/
*,!
/usr/bin/
*
/usr/sbin/
*,!
/usr/bin/
*
/usr/bin/
*,\
!
/usr/bin/ssh
注:禁止用戶使用允許的命令操作運行命令的目錄的文件
可防止用戶使用如下方法破解:
sudo
mv
/usr/bin/ssh
/usr/bin/a
#或者
sudo
cp
/usr/bin/ssh
/usr/bin/a
#然後
sudo
/usr/bin/a
[email protected]
怎樣?腦洞大開吧?sudo是相對安全的O(∩_∩)O哈哈~
6.2 防止用戶操作日志
%mailALL=(root)NOPASSWD:
/sbin/
*,
/bin/
*,
/usr/sbin/
*,
/usr/bin/
*
mailALL=(root)NOPASSWD:!
/sbin/
*
/var/log/sudo
.log,!
/bin/
*
/var/log/sudo
.log,\
!
/usr/sbin/
*
/var/log/sudo
.log,!
/usr/bin/
*
/var/log/sudo
.log
------------------------------------------------------------
參閱文獻
官方文檔:
https://www.sudo.ws/man/1.8.17/sudoers.man.html
非官方文檔:
http://my.oschina.net/aiguozhe/blog/38706
http://www.jbxue.com/LINUXjishu/22920.html
http://blog.csdn.net/julius819/article/details/7735070
http://longcentod.blog.51cto.com/9060910/1533644
http://blog.csdn.net/xyz846/article/details/26406955
http://xxxxxx/Linuxjc/1137408.html TechArticle