Linux sudo 使用介绍
环境信息
- Centos 7
sudo
可以配置适当的权限授予普通用户,使普通用户执行 root
用户才能执行的操作
配置 sudo
权限的主要配置文件为 /etc/sudoers
。/etc/sudoers
是一个只读文件,不能直接使用 vim
等编辑器来编辑,要修改此文件,需要以 root
用户身份使用 visudo
命令来修改。
主要配置文件内容如下
# Allow root to run any commands anywhere |
各列值含义说明:
root
第一列为用户名,如root
、users
;%wheel
以%
开头表示这是一个组,而不是用户ALL=(ALL)
第二列等号左边的ALL
表示允许从任何主机登录当前的用户账户;等号右边的ALL
表示第一列的用户可以切换成系统中任何一个其它用户(如:su users
);ALL
第三列表示第一列的用户能下达的命令,ALL
表示可以下达任何命令。NOPASSWD: ALL
意味着成员可以执行指定的命令而无需输入密码。
当我们以普通用户身份(以 test
为例)登录,在使用 sudo
命令时报出如下信息:
test is not in the sudoers file. This incident will be reported.
则说明该用户没有在 /etc/sudoers
文件中进行配置,因此无法使用 sudo
命令
AWS 的 Centos 镜像部署后的虚拟机默认使用 centos
用户登陆,登陆后即可执行 sudo su -
切换到 root
用户,此配置由 /etc/sudoers.d/90-cloud-init-users
配置,内容如下:
cat /etc/sudoers.d/90-cloud-init-users |
若要禁止此行为,删除此文件即可。
使用示例
限制特定用户只能执行指定目录下的脚本
在 visudo
中,你可以使用 Cmnd_Alias
限制用户只能执行特定目录下的脚本。假设你想让用户 centos
只能执行 /usr/local/scripts/
目录下的脚本,可以按照以下方式配置:
Cmnd_Alias ALLOWED_SCRIPTS = /usr/local/scripts/* |
含义 :
Cmnd_Alias ALLOWED_SCRIPTS = /usr/local/scripts/*
定义
ALLOWED_SCRIPTS
,表示 允许执行 /usr/local/scripts/ 目录下的所有脚本 。qqc ALL=(ALL) NOPASSWD: ALLOWED_SCRIPTS
允许
centos
用户以sudo
执行ALLOWED_SCRIPTS
目录下的所有脚本,且无需输入密码。
切换到 centos
用户,并尝试执行:
sudo /usr/local/scripts/test.sh |
成功执行 ,说明规则生效。
但是,如果 centos
用户 试图运行 /bin/bash
或 /usr/bin/python
,或者访问其他路径 :
sudo /bin/bash |
如果希望 centos
用户可以查看自己可以运行的命令:
Cmnd_Alias ALLOWED_SCRIPTS = /usr/local/scripts/* |
这样,centos
用户可以运行:
sudo -l |
来查看自己被允许的 sudo
命令。