2021-05-12 14:32:11
CentOS下的sudo相關設定的總結歸納
CentOS下的sudo相關設定的總結歸納
1 基礎部分
1.1 常用的命令列
1
2
3
4
5
6
|
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 #指定使用者和組的身份執行 |
1.2 組態檔路徑
1
|
/etc/sudoers |
1.3 sudoers的規則分類
sudoers的規則分為以下兩類:
1)別名定義(可選)
2)授權規則(必選)
1.4 特殊符號的用法
1
2
3
4
5
6
7
|
"#" 用於註釋 "x" 跳脫字元 "" 使用到物理行行尾則把下行的物理行連線成一個邏輯行 "*" 匹配零個或多個字元 "?" 匹配單個字元 "[...]" 匹配指定範圍的字元 "[!...]" 匹配非指定範圍的字元 |
2 Alias(別名)
2.1 別名的型別
包含以下四種別名:User_Alias,Runas_Alias,Host_Alias,Cmnd_Alias
註:以上別名型別的書寫大小寫敏感
1
2
3
4
|
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 單個別名的書寫方式
1
|
Alias_Type NAME = item1, item2, ... |
註:別名成員以“,”號分隔
2.2.2 多個別名的書寫方式
1
|
Alias_Type NAME = item1, item2, item3 : NAME = item4, item5 |
註:以“:”號分隔
2.2.3 四種書寫簡式
1
2
3
4
5
6
7
|
User_Alias ::= NAME '=' User_List Runas_Alias ::= NAME '=' Runas_List Host_Alias ::= NAME '=' Host_List Cmnd_Alias ::= NAME '=' Cmnd_List |
2.3 別名定義NAME的有效字元
1
|
NAME ::= [A-Z]([A-Z][0-9]_)* |
2.4 常見的定義範例
2.4.1 命令列別名的定義範例
作用:定義使用者別名和別名中包含能否執行的命令
範例:
1
2
|
## 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 |
2.4.2 使用者別名的定義範例
作用:定義使用者別名和別名中包含的使用者
1
2
|
## User Aliases User_Alias NETWORKINGADMINS = user1, user2, %gp1 |
註:
1)組前面加“%”號
2)使用者名稱必須是系統有效的使用者
2.4.3 主機別名的定義範例
作用:定義主機別名和別名中包含的主機
範例:
1
2
|
## 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 授權規則
3.1 授權規則的格式
1
2
3
4
5
6
7
8
9
10
|
## 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 |
其實就這個意思:
1
|
使用者名稱或%組名 主機名稱=能否執行的命令 |
註:以上都可以使用別名代替
3.2 授權規則的範例
3.2.1 不使用別名的定義方式
基於系統使用者名稱的定義
1
|
user1 fs1= /sbin/mount /mnt/cdrom , /sbin/umount /mnt/cdrom |
基於系統組的定義
1
|
%gp1 fs1= /sbin/mount /mnt/cdrom , /sbin/umount /mnt/cdrom |
使用ALL關鍵字的定義
1
|
root ALL=(ALL) ALL |
3.2.2 使用別名的定義方式
1
|
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
3.2.3 關閉密碼驗證提示
在命令列前加入關鍵字“NOPASSWD: ”,詳細如下:
1
|
%wheel ALL=(ALL) NOPASSWD: ALL |
或
1
|
%wheel ALL=(ALL) NOPASSWD: /sbin/route |
4 其他指令
4.1 匯入子規則
1
|
includedir /etc/sudoers .d |
使定義於/etc/sudoers.d目錄下的子規則生效
4.2 關閉sudo命令的提示
此選項適用於使用shell中呼叫sudo執行命令時候遮蔽以下提示:
1
|
sudo : sorry, you must have a tty to run sudo |
4.2.1 方法一
注釋掉以下行:
1
|
#Defaults requiretty |
4.2.2 方法二
新增以下行:
1
|
Defaults:user1 !requiretty |
4.3 指定安全的執行路徑
1
|
Defaults secure_path = /sbin : /bin : /usr/sbin : /usr/bin |
5 開啟監視紀錄檔
5.1 建立紀錄檔檔案
1
|
touch /var/log/sudo .log |
5.2 開啟sudo的紀錄檔功能
1
|
visudo |
加入如下行:
1
2
3
|
Defaults logfile= /var/log/sudo .log Defaults loglinelen=0 Defaults !syslog |
5.3 設定系統紀錄檔
5.3.1 修改紀錄檔組態檔
1
|
vim /etc/rsyslog .conf |
“local7.*”行後加入如下行:
1
|
local2.debug /var/log/sudo .log |
5.3.2 重新啟動系統紀錄檔服務
1
|
service rsyslog restart |
5.4 測試紀錄檔
5.4.1 命令列監視紀錄檔
1
|
tail -f /var/log/sudo .log |
5.4.2 執行指令測試
1
|
sudo /usr/bin/ssh root@127.0.0.1 |
6 應用場景
6.1 排除部分使用的情景
6.1.2 設定要求
1
2
|
禁止某使用者使用: su 命令 允許某使用者使用: su 除外命令 |
註:禁止的原因是因為使用者可以使用此命令提權
1
|
sudo su - root |
6.1.2 解決方案
1) 查詢使用者的所屬組
1
|
id mail |
顯示如下:
1
|
uid=8(mail) gid=12(mail) groups =12(mail) |
2) 定義方法
1
2
|
%mail ALL=(root) NOPASSWD: ALL mail ALL=(root) NOPASSWD: ! /bin/su |
註:定義所屬組允許執行所有命令,但拒絕使用者執行su命令
3) 相對好的定義方法
1
2
|
%mail ALL=(root) NOPASSWD: /sbin/ *, /bin/ *, /usr/sbin/ *, /usr/bin/ * mail ALL=(root) NOPASSWD: ! /bin/su |
可防止使用者使用如下方法破解:
1
2
|
sudo cp /bin/su assu sudo . /assu - root |
4) 相對更好的定義方法
1
2
3
|
%mail ALL=(root) NOPASSWD: /sbin/ *, /bin/ *, /usr/sbin/ *, /usr/bin/ * mail ALL=(root) NOPASSWD: !/*/* /sbin/ *,!/*/* /bin/ *,!/*/* /usr/sbin/ *,!/*/* /usr/bin/ *, ! /bin/su |
註:禁止使用者使用允許的命令操作執行命令的目錄的檔案
可防止使用者使用如下方法破解:
1
2
3
4
5
|
sudo mv /bin/su /bin/assu #或者 sudo cp /bin/su /bin/assu #然後 sudo assu - root |
5)實際上,我建議做如下設定
1
2
3
|
%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使用者:
1
2
3
|
sudo su - root sudo passwd -l root sudo passwd -u root |
或使用其他命令去操作root的家目錄
1
2
|
sudo ls /root/ sudo ls -l /root/ |
怎樣?腦洞大開吧?sudo是相對安全的對吧?O(∩_∩)O哈哈~
註:以上個人總結,如有錯漏歡迎指正,在下感激不盡。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-06/132596.htm
相關文章