版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/twilight_karl/article/details/76595348
简介
sudo
命令允许系统管理员让普通用户执行一些或者全部的root命令。不需要暴露root密码,就可以让普通用户执行管理员的命令
修改sudo权限
- visudo
visudo 会自动打开etc下的sudo文件。在文件中加上允许普通用户执行的命令即可,命令格式如下:
- 用户名 ALL=(root) 命令 参数
括号中的内容表示在使用sudo时,以括号中的身份来执行命令,之后的命令可以加参数,表示指定命令的指定操作。命令最好是以绝对路径的方式来写。
例如:
twilight ALL=(root) /usr/sbin/shutdown -r
twilight用户就可以执行shutdown -r命令,不过仅仅是-r。其他参数还是不允许的
sudo shutdown -r
当我尝试不使用绝对路径,保存退出时会报错:
twilight ALL=(root) useradd
报错信息:
[root@localhost ~]# visudo
visudo:>>> /etc/sudoers:syntax error 在行 94 附近<<<
现在做什么?
选项有:
重新编辑 sudoers 文件(e)
退出,不保存对 sudoers 文件的更改(x)
退出并将更改保存到 sudoers 文件(危险!)(Q)
现在做什么?x
sudo -l
可以使用 sudo -l
查看当前普通用户能使用 sudo
执行的权限:
[twilight@localhost root]$ sudo -l
[sudo] password for twilight:
匹配此主机上 twilight 的默认条目:
!visiblepw, always_set_home, 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
用户 twilight 可以在该主机上运行以下命令:
(root) /usr/sbin/useradd
Centos在执行sudo命令时可以不指定绝对路径:
[twilight@localhost root]$ sudo useradd tom
查看是否生效:
[twilight@localhost root]$ cat /etc/passwd | grep tom
tom:x:1004:1006::/home/tom:/bin/bash
安全性
如果用sudo给普通用户赋予passwd命令的权限,那么普通用户就可以用sudo命令来修改root密码,这是十分不安全的。不过,在赋予权限时可以加上一些限制,将普通用户可用的命令限制在合理范围内。
- 可以使用正则表达式,不需要加引号
- 使用 !
取反,表示不允许执行这条命令
例如以下权限。twilight用户只能更改普通用户的密码:
twilight ALL=/usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root, !/usr/bin/passwd ""
此时查看twilight的sudo权限:
[root@localhost ~]# su twilight
[twilight@localhost root]$ sudo -l
匹配此主机上 twilight 的默认条目:
!visiblepw, always_set_home, 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
用户 twilight 可以在该主机上运行以下命令:
(root) /usr/bin/passwd [a-zA-Z]*, (root) !/usr/bin/passwd root, (root) !/usr/bin/passwd \"\"
此时尝试更改root密码:
[twilight@localhost root]$ sudo passwd root
[sudo] password for twilight:
对不起,用户 twilight 无权以 root 的身份在 localhost.localdomain 上执行 /bin/passwd root。