sudo-為普通使用者提權
阿新 • • 發佈:2019-01-01
目錄
sudo簡介
Sudo
(substitute user
[或 superuser
]do
)是linux
系統管理指令,允許系統管理員委派授權給某些使用者(或使用者組)以root使用者或其他使用者身份執行某些(或全部)命令的能力,同時提供命令及其引數的審計跟蹤。
sudo特性
sudo
能夠授權指定使用者在指定主機上執行某些命令。 如果未授權使用者嘗試使用sudo
,會提示聯絡管理員。sudo
可以提供日誌,記錄每個使用者使用sudo
操作。sudo
為系統管理員提供配置檔案,允許系統管理員集中地管理使用者的使用許可權和使用的主機。sudo
使用時間戳檔案來完成類似“檢票”的系統,預設存活期為5分鐘的“入場券” 。
相關檔案
配置檔案: /etc/sudoers
,/etc/sudoers.d/
可以修改/etc/sudoers
也可以在/etc/sudoers.d/
目錄下新建配置檔案
時間戳檔案:/var/db/sudo
日誌檔案:/var/log/secure
配置檔案
配置支援使用萬用字元glob
:
?
:任意單一字元*
:匹配任意長度字元
[wxc]
:匹配其中一個字元[!wxc]
:除了這三個字元的其他字元
x
:轉義
[[alpha]]
:字母:示例:/bin/ls [[alpha]]*
配置檔案規則:
- 別名定義:不是必須的除了
- 授權規則:必須的
授權規則格式:
user host=(runas) command
使用者 登入主機=(代表使用者) 命令
示例:root ALL=(ALL) ALL
格式說明:
user
:執行命令者的身份username
:使用者名稱#uid
:使用者UID
%group_name
:組名%#gid
:使用者組GID
User_Alias
:使用者別名
使用者別名:格式
User_Alias USER=使用者1,使用者2...
。例:User_Alias DBA=haiyun,wang
;其中DBA
是別名,haiyun,wang是別名內的使用者。注:別名必須為大寫。host
:通過哪些主機
ip
或hostname
:IP
或者主機名network
(/netmask
Host_Alias
:主機別名
主機別名:格式
Host_Alias HOST=主機1,主機2...
。例:Host_Alias HOST=192.168.8.10,192.168.8.100
。其中:HOST
是別名,192.168.8.10,192.168.8.100
是別名中的IP
。注:別名必須大寫。
(runas
):以哪個使用者的身份 username
:使用者名稱
#uid
:使用者UID
%group_name
:組名%#gid
:使用者組GID
Runas_Alias
:使用者別名 使用者別名:格式
Runas_Alias USER=使用者1,使用者2...
。用法同User_Alias
。注:別名必須大寫。
command
:執行哪些命令 command name
:命令名稱,注:寫絕對路徑directory
:目錄下的命令sudoedit
:有編輯sudoers
檔案的許可權,授權的使用者可以自定義許可權Cmnd_Alias
:命令別名
命令別名:格式Cmnd_Alias CMD=命令1,命令2...
。例:Cmnd_Alias CMD=/bin/cat,/bin/mount
。其中,CMD
為別名,/bin/cat
,/bin/mount
為別名中的命令。注:別名必須大寫。
命令執行不需要密碼,在Commands
前可以加NOPASSWD:CMD
例如:haiyun ALL=(ALL) NOPASSWD: ALL
。代表haiyun
使用者可以執行所有命令,且不需要密碼。注:這只是一個例子,並不建議這麼做。
範例
範例1:使使用者haiyun
能夠有許可權掛載/dev/sr0
到/mnt/cdrom
目錄下
[root@A ~]# vi /etc/sudoers #修改檔案/etc/sudoers
root ALL=(ALL) ALL #在此行後面新增,下面內容。注:命令要寫絕對路徑
haiyun ALL=(ALL) /bin/mount /dev/sr0 /mnt/cdrom
[root@A ~]# su - haiyun # 切換到haiyun使用者
[haiyun@A ~]$ sudo /bin/mount /dev/sr0 /mnt/cdrom # 使用sudo執行掛載命令
[sudo] password for haiyun: # 輸入使用者haiyun的密碼
mount: block device /dev/sr0 is write-protected, mounting read-only #掛載成功
[haiyun@A ~]$ df /dev/sr0 #確認掛載成功
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sr0 3878870 3878870 0 100% /mnt/cdrom
範例2:使使用者haiyun
能夠有許可權編輯/etc/sudoers
檔案
[root@A ~]# sudoedit /etc/sudoers.d/test #編輯檔案/etc/sudoers.d/test
haiyun ALL=(ALL) /usr/bin/sudoedit /etc/sudoers.d/test #是使用者haiyun可以編輯test檔案
[root@A ~]# su - haiyun
[haiyun@A ~]$ sudo /usr/bin/sudoedit /etc/sudoers.d/test
[sudo] password for haiyun:
#haiyun ALL=(ALL) /usr/bin/sudoedit /etc/sudoers.d/test #haiyun使用者可以編輯test檔案
[haiyun@A ~]$ sudo /usr/bin/sudoedit /etc/sudoers.d/test # 註釋後已經不能使用
Sorry, user haiyun is not allowed to execute '/usr/bin/sudoedit /etc/sudoers.d/test' as root on A.
範例3:使wang
使用者和haiyun
使用者能夠有許可權修改IP
,使用別名實現,且不需要輸入密碼
[root@A ~]# sudoedit /etc/sudoers.d/test #
User_Alias NETUSER=wang,haiyun # 定義別名NETUSER,有兩個使用者wang,haiyun
Cmnd_Alias IP=/sbin/ip # 定義命令別名為 /sbin/ip
NETUSER ALL=(root) NOPASSWD: IP # NOPASSWD代表無需輸入密碼
[haiyun@A ~]$ sudo ip add add 192.168.1.2/24 dev eth0 # 使用haiyun使用者執行新增IP命令
[haiyun@A ~]$ ip addr show dev eth0 # 檢視eth0的iP,已經新增
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:de:d2:82 brd ff:ff:ff:ff:ff:ff
inet 172.18.250.42/16 brd 172.18.255.255 scope global eth0
inet 192.168.1.2/24 scope global eth0
inet6 fe80::20c:29ff:fede:d282/64 scope link
valid_lft forever preferred_lft forever
[root@A ~]# su - wang # 切換到wang使用者
[wang@A ~]$ ip add del 192.168.1.2/24 dev eth0 # 直接刪除IP是沒有許可權的
RTNETLINK answers: Operation not permitted
[wang@A ~]$ sudo ip add del 192.168.1.2/24 dev eth0 # 使用sudo可以刪除
[wang@A ~]$ ip addr show eth0 # 檢視eth0IP已經別刪除
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:de:d2:82 brd ff:ff:ff:ff:ff:ff
inet 172.18.250.42/16 brd 172.18.255.255 scope global eth0
inet6 fe80::20c:29ff:fede:d282/64 scope link
valid_lft forever preferred_lft forever
範例4:使wang
使用者和haiyun
使用者能夠有許可權檢視/etc/shadow
檔案,預設為haiyun
使用者。
[root@A ~]# sudoedit /etc/sudoers.d/test # 編輯/etc/sudoers.d/test檔案
Defaults:haiyun runas_default=wang
haiyun ALL=(root) /bin/cat /etc/shadow
[root@A ~]# sudo /bin/cat /etc/shadow # 使用sudo檢視/etc/shadow檔案
root:$6$SVxwnkSIO7UUYS71$Nga3eujjzHub.oIfdEY12TLdVwpbJ/WNDaLTrvl4.WkfMYiEGCfW85vX5vVWj08mWT2nkkFXHoge7SaZGIKcA.:17392:0:99999:7:::
bin:*:17246:0:99999:7:::
[root@A ~]# sudo -u wang /bin/cat /etc/shadow # 使用wang使用者檢視shadow檔案,無許可權
/bin/cat: /etc/shadow: Permission denied
範例5:使haiyun
使用者能夠有許可權使用/usr/sbin/
目錄下的所有命令除了/usr/sbin/userdel
命令
[root@A ~]# sudoedit /etc/sudoers.d/test # 新增規則使haiyun使用者能夠使用/usr/sbin/目錄下的所有命令除了/usr/sbin/userdel命令
haiyun ALL=(root) /usr/sbin/,!/usr/sbin/userdel
[haiyun@A ~]$ useradd test # 直接新增使用者是沒有許可權的
-bash: /usr/sbin/useradd: Permission denied
[haiyun@A ~]$ sudo useradd test # 使用sudo可以新增
[haiyun@A ~]$ id test # 檢視test的UID等資訊
uid=514(test) gid=514(test) groups=514(test)
[haiyun@A ~]$ sudo userdel -r test # 刪除test使用者,是沒有許可權的
Sorry, user haiyun is not allowed to execute '/usr/sbin/userdel -r test' as root on A.
範例6:使使用者haiyun
能夠有許可權檢視/var/log/message
後的所有檔案
[[email protected] ~]# sudoedit /etc/sudoers.d/test #編輯/etc/sudoer.d/test檔案
haiyun ALL=(root) /bin/cat /var/log/message* #使haiyun使用者能夠檢視/var/log/message檔案
[[email protected] ~]$ sudo /bin/cat /var/log/messages /etc/shadow #但這樣又會有一個問題後面跟一個其他檔案也能查看了
Sep 13 09:30:29 centos6 xinetd[1391]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.
Sep 13 09:30:29 centos6 xinetd[1391]: Started working: 0 available services
Sep 13 12:52:37 centos6 yum[2876]: Installed: zlib-devel-1.2.3-29.el6.x86_64
Sep 13 14:15:12 centos6 yum[7400]: Installed: aide-0.14-11.el6.x86_64
Sep 13 19:16:39 centos6 dhclient[1114]: DHCPREQUEST on eth0 to 172.18.0.1 port 67 (xid=0x44c4eda2)
Sep 13 19:16:40 centos6 dhclient[1114]: DHCPACK from 172.18.0.1 (xid=0x44c4eda2)
Sep 13 19:16:42 centos6 dhclient[1114]: bound to 172.18.250.42 -- renewal in 41913 seconds.
。。。省略後面內容
root:$6$SVxwnkSIO7UUYS71$Nga3eujjzHub.oIfdEY12TLdVwpbJ/WNDaLTrvl4.WkfMYiEGCfW85vX5vVWj08mWT2nkkFXHoge7SaZGIKcA.:17392:0:99999:7:::
bin:*:17246:0:99999:7:::
。。。省略後面內容
[[email protected] ~]# sudoedit /etc/sudoers.d/test #再次編輯/etc/sudoer.d/test檔案
haiyun ALL=(root) /bin/cat /var/log/message*,!/bin/cat /var/log/messages* * #我們將後面跟空的檔案排除了
[[email protected] ~]$ sudo /bin/cat /var/log/messages-20170820 /etc/shadow #這樣是不可以看的
Sorry, user haiyun is not allowed to execute '/bin/cat /var/log/messages-20170820 /etc/shadow' as root on centos6.haiyun.com.
[[email protected] ~]$ sudo /bin/cat /var/log/messages-20170820 #跟一個檔案就可以了
Aug 20 09:26:49 centos6 kernel: type=1305 audit(1503192408.924:3): audit_pid=1238 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1
Aug 20 09:27:00 centos6 automount[1319]: problem reading master map, maximum wait exceeded
Aug 20 09:27:00 centos6 automount[1319]: automount: warning: could not read at least one map source after waiting, continuing ...
Aug 20 09:27:01 centos6 kdump: kexec: loaded kdump kernel
Aug 20 09:27:01 centos6 kdump: started up
。。。後面內容省略
sudo命令和引數
sudo –i –u wang
切換身份為wang
使用者`sudo -u user
預設為root
,使用指定的使用者執行命令sudo -l
列出使用者在主機上可用的和被禁止的命令sudo -v
再延長密碼有效期限5分鐘,更新時間戳sudo -k
清除時間戳(1970-01-01),下次需要重新輸密碼sudo -b
在後臺執行指令
su命令
su
命令用於變更為其他使用者的身份,除 root 外,需要鍵入該使用者的密碼。
su - username
:代表使用login-shell
的變數檔案讀取方式來登陸系統
su username -c command
:僅進行一次命令
注意事項:
centos 7
將普通使用者新增到wheel組因為whell組預設sudo有全部許可權的。注意此行:%wheel ALL=(ALL) ALL
在centos 7
預設是開啟的。- 假設
root
的UID不
是0的話,那麼也可以利用sudo
實現管理操作。可以考略將此行:root ALL=(ALL) ALL
禁用掉。