sudo命令是用来以另外一个用户的身份来执行某些命令,并且不需要知道对方的密码;sudo的默认安全策略记录在/etc/sudoers配置文件中。而运行安全策略文件中的命令时,需要用户输入自己的密码来进行身份验证。也就是说用户在执行sudo命令时需要输入自己的密码。如果验证失败,则命令不会被执行,如果用户没有权限执行命令,则会把此操作发送邮件给管理员。
sudo命令的语法
sudo [-bhHpV][-s ][-u <用户>][指令]
-u user:默认为root;
-l:列出用户可以使用的命令;
-k:再次检票,执行命令需要再次输入用户密码;
-v:因为sudo在第一次执行时或是在N分钟内没有执行(N预设为五分钟)会问密码,这个参数是重新做一次确认,如果超过N分钟,也会询问密码;
-V:显示版本编号;
-b:将要执行的指令放在后台执行;
sudo命令的安全策略文件
/etc/sudoers
修改文件命令
visudo(有报错检查)
sudo还支持别名机制,可以通过别名来指明用户或者是命令
查看:man sudoers
常用别名格式:
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)*
User_Alias ::= NAME '=' User_List
Runas_Alias ::= NAME '=' Runas_List
Host_Alias ::= NAME '=' Host_List
Cmnd_Alias ::= NAME '=' Cmnd_List
NAME ::= [A-Z]([A-Z][0-9]_)*
对用户做配置授权:
1)只允许user1用户和user2用户可以使用fdisk命令
User_Alias USERADMINFD = user1,user2 //定义用户别名
Cmnd_Alias COMMANDFD = /usr/sbin/fdisk //定义命令别名
root ALL=(ALL) ALL
USERADMINFD ALL=(root) COMMANDFD
//这一行的意思是:允许哪些用户在哪个主机上以哪个用户的身份运行哪些命令
这里我指明的是:在USERADMIN这个别名当中的用户(user1,user2)
可以在所有主机上以root用户的身份运行COMMANDFD别名当中的命令
2)切换用户身份测试:
[root@www ~]# su - user1
Last login: Sat Mar 9 05:40:38 EST 2019 on pts/1
[user1@www ~]$ sudo -l //查看当前用户可用的sudo命令
[sudo] password for user1:
Matching Defaults entries for user1 on www:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE 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 www:
(root) /usr/sbin/fdisk
[user1@www ~]$
[user1@www ~]$ sudo fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0005f749 //运行成功
3)切换到user3这个不在安全策略文件中的用户试试
[root@www ~]# su - user3
Last login: Sat Mar 9 05:42:22 EST 2019 on pts/1
[user3@www ~]$ sudo -l
[sudo] password for user3:
Sorry, user user3 may not run sudo on www.
[user3@www ~]$
[user3@www ~]$ sudo fdisk -l
[sudo] password for user3:
user3 is not in the sudoers file. This incident will be reported. //会提示user3在策略文件中没有定义
[user3@www ~]$
4)允许user3运行useradd,usermod,passwd命令
User_Alias USERADMINUS = user3
Cmnd_Alias COMMADNUS = /usrs/sbin/useradd,/usr/sbin/usermod,/usr/bin/passwd [a-z]*,!/usr/sin/passwd root (指明passwd后面必须要接用户名,但不能是root)
USERADMINUS ALL=(root) NOPASSWD:COMMADNUS //前面加NOPASSWD表明用户执行sudo操作时不用输入密码
5)切换到user3尝试创建用户
[root@www ~]# su - user3
Last login: Sat Mar 9 06:57:42 EST 2019 on pts/1
[user3@www ~]$ sudo -l
Matching Defaults entries for user3 on www:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY
HOSTNAME HISTSIZE 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 user3 may run the following commands on www:
(root) NOPASSWD: /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd
[user3@www ~]$
[user3@www ~]$ sudo useradd jyy
[user3@www ~]$ sudo passwd jyy
Changing password for user jyy.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[user3@www ~]$
[user3@www ~]$ sudo passwd
[sudo] password for user3:
Sorry, user user3 is not allowed to execute '/bin/passwd' as root on www. //并不能修改root用户的密码
[user3@www ~]$
[user3@www ~]$
[user3@www ~]$
[user3@www ~]$ sudo passwd user1 //可以修改其他普通用户的密码
Changing password for user user1.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[user3@www ~]$