# sudo與visudo的超細用法說明


1 sudo與visudo

1.1 基本說明:
使用su命令切換用戶身份雖然簡單,但是,也有一些致命的缺點:

(1)     普通用戶必須知道root密碼才可以切換到root,這樣root密碼就泄漏了。

(2)     使用su命令切換身份,無法對切換后的身份做精細的控制,拿到超級權限的人可以為所欲為。甚至可以改掉root密碼,讓真正的管理員無法再擁有root權限。

#通過sudo命令,我們可以把某些超級用戶權限,分類有針對性授權給指定的普通用戶,並且普通用戶不需要知道root密碼就可以使用得到的授權來管理。因此,sudo命令使得集權式管理在理論上得到了保證,使系統的安全性方面加強了很多。

1.1.1 區別

sudo:可以讓普通用戶擁有root權限去執行命令,sudo的配置文件是/etc/sudoers。

visudo:通過visudo編輯/etc/sudoers,可以檢查語法。

1.1.2 參數說明
sudo

-l:查看授權情況,列出用戶在主機上可用的和被禁止的命令※

-k:刪除時間戳,時間戳默認5分鍾也會失效

-u:指定某個用戶身份去執行特定的命令操作

visudo:edit the sudoers file

-c:檢查語法※

1.1.3 sudo提權配置說明
用戶或組
機器= (授權角色)
可以執行的命令
user
MACHINE=
COMMANDS
oldboy
ALL=(ALL)
/usr/sbin/useradd,/usr/sbin/userdel
%用戶組



1.1.4 配置oldboy用戶擁有所有權限
[root@s1 ~]# visudo                  #<==通過visudo編輯/etc/sudoers

oldboy  ALL=(ALL)       NOPASSWD: ALL #<==先切換到98行,再添加

[root@s1 ~]# su - oldboy           #<==切換到oldboy用戶

[oldboy@s1 ~]$ sudo su -           #<==可以直接切換到root,不需要密碼

[root@s1 ~]#

1.2 快速操作命令增加sudo授權※

echo "oldboy ALL=(ALL)       NOPASSWD:ALL">>/etc/sudoers
tail -1 /etc/sudoers
visudo -c
#<==用echo追加時,最好要檢查語法
 
1.3 sudo配置文件詳解
oldboy ALL=(ALL)       NOPASSWD: ALL
用戶   主機 身份             命令

1.3.1 主機別名(Host Aliases)
一般不改,只用ALL。
13 # Host_Alias    FILESERVERS = fs1, fs2     #<==注意有空格
14 # Host_Alias    MAILSERVERS = smtp,smtp2

1.3.2 用戶別名(User Aliases)
用戶別名包含了用戶和用戶組。
20 # User_Alias ADMINS = jsmith, mikem, %groupname #<==用戶組前面加百分號
1.3.3 身份別名(Runas_Alias)
即sudo允許切換到的用戶身份,一般不改
Runas_Alias   OP = root
1.3.4 命令別名(Command Aliases)
32 ## Services
33 # Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
 
1.4 sudo配置文件實踐
1.4.1 工作需求
職位
用戶別名
身份別名
命令別名
開發人員
KF_ADMINS
OP1
KF_CMD
運維人員
YW_ADMINS
OP1
USER_CMD,DISK_CMD,NETMAG_CMD,CTRL_CMD
網絡工程師
WL_ADMINS
OP2
NETMAG_CMD

1.4.2 操作過程
visudo    #<==直接切換到最后一行,添加如下的內容,實際上修改的文件是:/etc/sudoers
 
##Edit by chendianhu at 2016-07-26##
# User Aliases
User_Alias KF_ADMINS =kaifa01, kaifa02
User_Alias YW_ADMINS =oldboy, oldgirl, %sa
User_Alias WL_ADMINS =leo, maya
 
# Command Aliases
Cmnd_Alias KF_CMD =/bin/grep, /usr/bin/tail, /bin/cat
Cmnd_Alias USER_CMD =/usr/sbin/useradd, /usr/sbin/userdel, \
/usr/bin/passwd[A-Za-z]*, /bin/chown, /bin/chmod
Cmnd_Alias DISK_CMD=/sbin/fdisk, /sbin/parted
Cmnd_Alias NETMAG_CMD =/sbin/ifconfig, /etc/init.d/network
Cmnd_Alias CTRL_CMD =/sbin/reboot, /sbin/halt
 
#Runas Alias
Runas_Alias    OP1 =root, oldboy
Runas_Alias    OP2 = root, oldgirl
 
#Authorization
#root    ALL=(ALL)       ALL
#user    host runas      cmd
KF_ADMINS  ALL=(OP1) KF_CMD
YW_ADMINS  ALL=(OP1) USER_CMD, DISK_CMD, NETMAG_CMD, CTRL_CMD
WL_ADMINS  ALL=(OP2)  NETMAG_CMD
#<==注意寫法ALL=(OP2),因為寫錯了,需要排查很久的!

1.4.3 驗證過程
1.4.3.1 添加用戶
useradd kaifa01
useradd kaifa02
useradd oldgirl
useradd leo
useradd maya
1.4.3.2 驗證添加用戶
id kaifa01
id kaifa02
id oldgirl
id leo
id maya

1.4.3.3 配置密碼
echo "123456"|passwd --stdin kaifa01
echo "123456"|passwd --stdin kaifa02
echo "123456"|passwd --stdin oldgirl
echo "123456"|passwd --stdin leo
echo "123456"|passwd --stdin maya

1.4.3.4 以oldgirl用戶為例
[root@s1 ~]# su - oldgirl  #<==切換用戶oldgirl
[oldgirl@s1 ~]$ whoami
oldgirl
[oldgirl@s1 ~]$ sudo -l   #<==查看該用戶授權情況
[sudo] password for oldgirl:
省略……
用戶 oldgirl 可以在該主機上運行以下命令:
    (root, oldboy) /usr/sbin/useradd,/usr/sbin/userdel, /usr/bin/passwd [A-Za-z]*, /bin/chown, /bin/chmod, (root,oldboy)/sbin/fdisk, /sbin/parted, (root, oldboy) /sbin/ifconfig, /etc/init.d/network,(root, oldboy) /sbin/reboot,
   /sbin/halt
[oldgirl@s1 ~]$ rm -f /etc/hosts  #<==刪除命令肯定不允許
rm: 無法刪除"/etc/hosts":權限不夠
[oldgirl@s1 ~]$ useradd li       #<==添加用戶,不允許
-bash: /usr/sbin/useradd: 權限不夠
[oldgirl@s1 ~]$ sudo useradd li   #<==添加用戶,允許,因為前面加了sudo關鍵字
[oldgirl@s1 ~]$ id li
uid=506(li) gid=506(li) 組=506(li)
[oldgirl@s1 ~]$ tail -1 /etc/passwd
li:x:506:506::/home/li:/bin/bash
 
[oldgirl@s1 ~]$ userdel li      #<==刪除用戶,不允許
-bash: /usr/sbin/userdel: 權限不夠
[oldgirl@s1 ~]$ sudo userdel li -r  #<==刪除用戶,允許,因為前面加了sudo關鍵字
[oldgirl@s1 ~]$ id li
id: li:無此用戶
 
1.5 注意事項
(1)     授權規則中的ALL字符串必須為大寫字母
(2)     \:代表換行(反斜線)
(3)     !:代表非(感嘆號)
(4)     遠程sudo 加-t參數 

1.6 sudo審計
sudo配合rsyslog服務,進行日志審計。

1.6.1 檢查軟件是否已安裝
[oldgirl@s1 ~]$ rpm -qa sudo rsyslog
rsyslog-5.8.10-10.el6_6.x86_64
sudo-1.8.6p3-19.el6.x86_64

1.6.2 配置/etc/sudoers
[root@s1 ~]# echo "Defaults   logfile=/var/log/sudo.log">>/etc/sudoers
#<==只需要往配置文件里加一條記錄,超級簡單!
[root@s1 ~]# tail -1 /etc/sudoers    #<==驗證
Defaults   logfile=/var/log/sudo.log
[root@s1 ~]# visudo -c             #<==檢查語法
/etc/sudoers:解析正確

1.6.3 驗證
[root@s1 ~]#su - oldgirl          #<==切換到oldgirl用戶
[oldgirl@s1 ~]$ sudo -l           #<==列出能執行的命令
省略……
用戶 oldgirl 可以在該主機上運行以下命令:
    (root,oldboy) /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd [A-Za-z]*,/bin/chown, /bin/chmod, (root,oldboy)/sbin/fdisk, /sbin/parted, (root, oldboy) /sbin/ifconfig, /etc/init.d/network,(root, oldboy) /sbin/reboot, /sbin/halt
[oldgirl@s1 ~]$ sudo useradd wang   #<==sudo來執行添加用戶命令
[oldgirl@s1 ~]$ su -          #<==切換回root
密碼:
[root@s1 ~]# cat /var/log/sudo.log    #<==查看sudo審計日志
Jul 26 20:31:46 : oldgirl : TTY=pts/0 ;PWD=/home/oldgirl ; USER=root ;
    COMMAND=list             #<==oldgirl用戶的sudo操作行為,被記錄下來了
Jul 26 20:32:02 : oldgirl : TTY=pts/0 ;PWD=/home/oldgirl ; USER=root ;
    COMMAND=/usr/sbin/useradd wang  #<==oldgirl的操作行為,會全部被記錄下來
 
 
[oldgirl@s1 root]$ sudo rm -f /etc/hosts  #<==rm命令不允許執行
[sudo] password for oldgirl:
對不起,用戶 oldgirl 無權以 root 的身份在 s1 上執行 /bin/rm -f /etc/hosts。
 
[root@s1 ~]# cat /var/log/sudo.log       #<==查看sudo審計日志
Jul 26 20:31:46 : oldgirl : TTY=pts/0 ;PWD=/home/oldgirl ; USER=root ;
   COMMAND=list
Jul 26 20:32:02 : oldgirl : TTY=pts/0 ;PWD=/home/oldgirl ; USER=root ;
   COMMAND=/usr/sbin/useradd wang
Jul 26 20:37:40 : oldgirl : 命令禁止使用 ; TTY=pts/0 ; PWD=/root ;
   USER=root ; COMMAND=/bin/rm -f /etc/hosts #<==操作失敗的命令,也會被記下來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM