歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> CentOS下的sudo相關配置的總結歸納

CentOS下的sudo相關配置的總結歸納

日期:2017/3/3 11:47:59   编辑:Linux技術
1 基礎部分
[b]1.1 常用的命令行[/b]
man sudoers #參閱幫助
visudo #編輯sudoers的命令
sudo -l #查看可執行或禁止執行的命令
sudo -u user1 /bin/ls #指定user1用戶的身份執行命令
sudo -g gp1 /bin/ls #指以gp1組的身份執行
sudo -u user1 -g gp1 /bin/ls #指定用戶和組的身份執行
[b]1.2 配置文件路徑[/b]
/etc/sudoers
[b]1.3 sudoers的規則分類[/b]
sudoers的規則分為以下兩類:
1)別名定義(可選)
2)授權規則(必選)
[b]1.4 特殊符號的用法[/b]
"#" 用於注釋
"\x" 轉義字符
"\" 使用到物理行行尾則把下行的物理行連接成一個邏輯行
"*" 匹配零個或多個字符
"?" 匹配單個字符
"[...]" 匹配指定范圍的字符
"[!...]" 匹配非指定范圍的字符
2 Alias(別名)
[b]2.1 別名的類型[/b]
包含以下四種別名: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)*
[b]2.2 別名的定義格式[/b]
[b][b]2.2.1 單個別名的書寫方式[/b][/b]
Alias_Type NAME = item1, item2, ...
注:別名成員以“,”號分隔[b][b]2.2.2 多個別名的書寫方式[/b][/b]
Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
注:以“:”號分隔[b][b]2.2.3 四種書寫簡式[/b][/b]
User_Alias ::= NAME '=' User_List

Runas_Alias ::= NAME '=' Runas_List

Host_Alias ::= NAME '=' Host_List

Cmnd_Alias ::= NAME '=' Cmnd_List
[b]2.3 別名定義[/b][b]NAME的有效字符[/b]
NAME ::= [A-Z]([A-Z][0-9]_)*
[b]2.4 常見的定義范例[/b]
[b][b]2.4.1 命令行別名的定義范例[/b][/b]
作用:定義用戶別名和別名中包含能否運行的命令
范例:
## 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
[b][b]2.4.2 用戶別名的定義范例[/b][/b]
作用:定義用戶別名和別名中包含的用戶或組
## User Aliases
User_Alias NETWORKINGADMINS = user1, user2, %gp1
注:
1)組前面加“%”號
2)用戶名必須是系統有效的用戶
[b][b]2.4.3 主機別名的定義范例[/b][/b]
作用:定義主機別名和別名中包含的主機
范例:
## Host Aliases
Host_Alias     FILESERVERS = fs1, fs2
注:
1)服務器fs1和fs2屬於FILESERVERS組
2)主機可以是主機名稱、IP(192.168.0.8)、或網段(192.168.0.0/24)、子網掩碼(255.255.255.0)
3 授權規則
[b]3.1 授權規則的格式[/b]
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
其實就這個意思:
用戶名或%組名 可管理的主機名稱=能否運行的命令
注:以上都可以使用別名代替
[b]3.2 授權規則的范例[/b]
[b][b]3.2.1 不使用別名的定義方式[/b][/b]
基於系統用戶名的定義
user1 fs1=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
基於系統組的定義

%gp1 fs1=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
使用ALL關鍵字的定義
root    ALL=(ALL)       ALL
[b][b]3.2.2 使用別名的定義方式[/b][/b]
NETWORKINGADMINS FILESERVERS=(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
[b][b]3.2.3 關閉密碼驗證提示[/b][/b]在命令列前加入關鍵字“NOPASSWD: ”,詳細如下:
%wheel        ALL=(ALL)       NOPASSWD: ALL

%wheel        ALL=(ALL)       NOPASSWD: /sbin/route
4 其他指令
[b]4.1 導入子規則[/b]
includedir /etc/sudoers.d
使定義於/etc/sudoers.d目錄下的子規則生效
[b]4.2 關閉sudo命令的提示[/b]
此選項適用於使用shell中調用sudo執行命令時候屏蔽以下提示:
sudo: sorry, you must have a tty to run sudo
[b][b]4.2.1 方法一[/b][/b]
注釋掉以下行:
#Defaults    requiretty
[b][b]4.2.2 方法二[/b][/b]
添加以下行:
Defaults:user1 !requiretty
[b]4.3 指定安全的執行路徑[/b]
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
5 開啟監視[b]日志[/b]
[b]5.1 創建日志文件[/b]
touch /var/log/sudo.log
[b]5.2 開啟sudo的日志功能[/b]
visudo
加入如下行:
Defaults logfile=/var/log/sudo.log
Defaults loglinelen=0
Defaults !syslog
[b]5.3 配置系統日志[/b]
[b][b]5.3.1 修改日志配置文件[/b][/b]
vim /etc/rsyslog.conf
“local7.*”行後加入如下行:
local2.debug                                            /var/log/sudo.log
[b][b]5.3.2 重啟系統日志服務[/b][/b]
service rsyslog restart
[b]5.4 測試日志[/b]
[b][b]5.4.1 命令行監視日志[/b][/b]
tail -f /var/log/sudo.log
[b][b]5.4.2 執行指令測試[/b][/b]
sudo /usr/bin/ssh [email protected]
6 應用場景
[b]6.1 排除部分使用的情景[/b]
[b][b]6.1.2 配置要求[/b][/b]
禁止某用戶使用:su命令
允許某用戶使用:su除外命令
注:禁止的原因是因為用戶可以使用此命令提權
sudo su - root
[b][b]6.1.2 解決方案[/b][/b]
1) 查詢用戶的所屬組
id mail
顯示如下:
uid=8(mail) gid=12(mail) groups=12(mail)
2) 定義方法
%mail ALL=(root) NOPASSWD: ALL
mail ALL=(root) NOPASSWD: !/bin/su
注:定義所屬組允許執行所有命令,但拒絕用戶執行su命令
3) 相對好的定義方法
%mail ALL=(root) NOPASSWD: /sbin/*,/bin/*,/usr/sbin/*,/usr/bin/*
mail ALL=(root) NOPASSWD: !/bin/su
可防止用戶使用如下方法破解:
sudo cp /bin/su assu
sudo ./assu - root
4) 相對更好的定義方法
%mail ALL=(root) NOPASSWD: /sbin/*,/bin/*,/usr/sbin/*,/usr/bin/*
mail ALL=(root) NOPASSWD: !/*/* /sbin/*,!/*/* /bin/*,!/*/* /usr/sbin/*,!/*/* /usr/bin/*,\
                             !/bin/su
注:禁止用戶使用允許的命令操作運行命令的目錄的文件
可防止用戶使用如下方法破解:
sudo mv /bin/su /bin/assu
 #或者
 sudo cp /bin/su /bin/assu
 #然後
 sudo assu - root
5)實際上,我建議做如下配置
%mail ALL=(root) NOPASSWD: /sbin/*,/bin/*,/usr/sbin/*,/usr/bin/*
mail ALL=(root) NOPASSWD: !/*/* /sbin/*,!/*/* /bin/*,!/*/* /usr/sbin/*,!/*/* /usr/bin/*,\
                             !/bin/su,!/usr/bin/passwd *root*,!/*/* */root/*
可防止用戶使用passwd命令操作root用戶:
sudo passwd root
 sudo passwd -l root
 sudo passwd -u root
或使用其他命令去操作root的家目錄
sudo ls /root/
 sudo ls -l /root/
怎樣?腦洞大開吧?sudo是相對安全的對吧?O(∩_∩)O哈哈~
注:以上個人總結,如有錯漏歡迎指正,在下感激不盡。
------------------------------------------------------------
參閱文獻
官方文檔:
https://www.sudo.ws/man/1.8.17/sudoers.man.html
非官方文檔:
/content/2256517.html
http://www.jbxue.com/LINUXjishu/22920.html
/content/7960225.html
http://longcentod.blog.51cto.com/9060910/1533644
/content/9341688.html
本文出自 “老譚linux集群博客” 博客,請務必保留此出處http://cmdschool.blog.51cto.com/2420395/1791234
Copyright © Linux教程網 All Rights Reserved