簡述 sudo是一種許可權管理機制,管理員可以授權普通用戶去執行root的操作,而不需要知道root的密碼,它依賴於/etc/sudoers這個文件,可以授權給哪個用戶在哪個主機上能夠以管理員的身份執行什麼樣的管理命令,而且是有限的。/etc/sudoers文件相當於一個授權表,此文件的許可權只有管理員 ...
簡述
sudo是一種許可權管理機制,管理員可以授權普通用戶去執行root的操作,而不需要知道root的密碼,它依賴於/etc/sudoers這個文件,可以授權給哪個用戶在哪個主機上能夠以管理員的身份執行什麼樣的管理命令,而且是有限的。/etc/sudoers文件相當於一個授權表,此文件的許可權只有管理員可以查看並且不建議使用vim編輯器來進行編輯,跟cron一樣有專門的編輯命令可以檢測語法問題,以免產生語法錯誤導致系統崩潰;針對sudo編輯專門提供了一個命令visudo。
sudo命令格式
sudo [options] COMMAND
options:
-l COMMAND:列出用戶可執行或不可執行的命令信息;
-k:清除用戶成功認證所緩存的時間戳,預設緩存時間戳為5分鐘
visudo
用戶授權語句的格式:
USERS LOCATION=(USERNAME|GROUP|Runas_alias) [NOPASSWD|PASSWD] COMMAND
USERS:
username:授權用戶名;
%groupname:授權用戶組;
User_alias:授權的用戶或組別名
LOCATION:
ip:規則匹配的IP地址;
hostname:規則匹配的主機名;
NetAddr:規則匹配的網段;
Host_alias:主機別名
COMMAND:
command:命令的絕對路徑;
Cmnd_alias:命令的別名組
其中關於 Alias 定義的格式:
ALIAS_TYPE NAME=item1,item2,item3...
註意:NAME必須全為大寫字母。
ALIAS_TYPE:
User_Alias:授權用戶別名類型
Host_Alias:主機別名類型
Runas_Alias:作為哪些用戶執行的別名類型
Cmnd_Alias:命令別名類型
應用實例
[root@happiness ~]# visudo Cmnd_Alias COMM1=/usr/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd,!/usr/bin/passwd root #命令別名1 Cmnd_Alias COMM2=/usr/sbin/shutdown,/usr/sbin/reboot #命令別名2 User_Alias USERADM=user1,user2 #用戶別名 USERADM ALL=(root) NOPASSWD:COMM1,PASSWD:COMM2 [root@happiness ~]# useradd user1 [root@happiness ~]# useradd user2 [root@happiness ~]# passwd user1
測試結果: [root@happiness ~]# su - user1 [user1@happiness ~]$ sudo -l #查看用戶所擁有的sudo許可權 Matching Defaults entries for user1 on this host: requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin User user1 may run the following commands on this host: (root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd, !/usr/bin/passwd root, (root) PASSWD: /usr/sbin/shutdown, /usr/sbin/reboot [user1@happiness ~]$ sudo passwd user2 #為user2設置密碼 Changing password for user user2. New password: [user1@happiness ~]$ sudo passwd root #不允許更改root密碼 Sorry, user user1 is not allowed to execute '/bin/passwd root' as root on happiness. [user1@happiness ~]$ sudo shutdown #執行shutdown需要輸入用戶密碼 [sudo] password for user1: