visudo配置sudo权限
- 配置visudo
- 仅允许字符终端登陆(tty)--授权localhost
- 允许图形和tty登陆--授权all
- 用户组提权-示例配置
- 在`sudoers.d`目录下创建授权文件--`推荐`
- 五段式配置
- 三段式配置
- 检查sudoers配置是否有误
- 如何在sudo`运行的命令中`防止`使用参数`
- 结果验证
配置visudo
https://blog.51cto.com/chenfage/1830424
在大约99行
添加配置信息
第一段
表示允许提权的用户
第二段
ALL=(ALL) 这里第一个ALL
可以指定主机来源,参数有localhost
和IP地址
,ALL
第三段
允许放行的命令(绝对路径),多个命令可以用逗号(,)隔开
例如:
# 允许lisi用户通过sudo 执行poweroff命令
## 没有NOPASSWD:表示要输入密码
lisi ALL=(ALL) /usr/sbin/poweroff
代授权的用户或组 | 来源机器= (授权角色) | 是否免密码:可以执行的命令 |
---|---|---|
lisi | ALL= (ALL) | /usr/sbin/poweroff |
仅允许字符终端登陆(tty)–授权localhost
非ssh可执行的命令
# 用户名 本地登陆用localhost=命令绝对路径
## 没有NOPASSWD:表示要输入密码
## user1用户允许localhost登录,能通过sudo 运行yum命令,需要输入密码
user1 localhost=/usr/bin/yum
代授权的用户或组 | 来源机器= | (授权角色) | 可以执行的命令 | 免密码 |
---|---|---|---|---|
zhangsan | localhost= | /usr/bin/yum |
允许图形和tty登陆–授权all
ssh和localhost登录都可以执行
# 用户名 要执行的命令 免密码
## user1用户允许本地和ssh登录,能通过sudo允许yum命令不需要输入密码
user1 ALL=/usr/bin/yum NOPASSWD: ALL
代授权的用户或组 | 来源机器= | (授权角色) | 可以执行的命令 | 免密码 |
---|---|---|---|---|
user1 | ALL= | /usr/bin/yum | NOPASSWD: ALL |
用户组提权-示例配置
用户组提权配置只需要在用户组前加上%
# %组名 ALL=(主机来源) 命令绝对路径
%gourp ALL=(ALL) /usr/bin/yum
%组名 | 来源机器= | (授权角色) | 可以执行的命令 | 免密码 |
---|---|---|---|---|
%sudo | ALL= | (ALL) | /usr/bin/yum | NOPASSWD: ALL |
在sudoers.d
目录下创建授权文件–推荐
sudoers.d目录下文件权限一定要
0440
# sudoers.d目录下文件设为0440
chmod 0440 /etc/sudoers.d/*
示例:
# 创建hadoop用户
## -d 指定用户登入时的起始目录
## -m 自动创建用户的登入目录
sudo useradd -d /home/hadoop -m hadoop
# 配置hadoop用户的权限
echo "hadoop ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/hadoop
# 配置hadoop的sudo配置文件权限
sudo chmod 0440 /etc/sudoers.d/hadoop
代授权的用户或组 | 来源机器= (授权角色) | 免密码:可以执行的命令 |
---|---|---|
hadoop | ALL = (root) | NOPASSWD: ALL |
五段式配置
# 给devops创建授权文件,设置文件权限0400
cd /etc/sudoers.d && touch devops && chmod 0440 devops && vim devops
# 将配置文件添加到devops文件中,当执行sudo updatedb命令时免密码
devops ALL=(ALL) NOPASSWD:/usr/bin/updatedb
代授权的用户或组 | 来源机器= | (授权角色) | 可以执行的命令 | 免密码 |
---|---|---|---|---|
devops | ALL= | (ALL) | /usr/bin/updatedb | NOPASSWD: /usr/bin/updatedb |
第一段
: 表示允许提权的用户,%sudo
代表sudo组
第二段
: ALL=(ALL) 这里第一个ALL
可以指定主机来源,参数有localhost
和IP地址
,ALL
第三段
:表示sudo可以切换到什么用户。ALL
表示所有用户
第四段
:表示sudo可以切换到哪些组下的用户。ALL
表示所有组
第五段
:表示sudo之后能够执行的命令(绝对路径
)。NOPASSWD:ALL
表示执行任意命令都不需要密码
代授权的用户或组 | 来源机器= | (授权角色) | 可以执行的命令 | 免密码 |
---|---|---|---|---|
devops | ALL= | (ALL) | NOPASSWD: ALL |
三段式配置
第一段
: 表示允许提权的用户,%sudo
代表sudo组
第二段
: ALL=(ALL) 这里第一个ALL
可以指定主机来源,参数有localhost
和IP地址
,ALL
第三段
: 允许放行的命令(绝对路径
),多个命令可以用逗号(,)隔开
# 允许执行所有sudo命令不需要输入密码
devuser ALL=(ALL) NOPASSWD:ALL
代授权的用户或组 | 来源机器= (授权角色) | 免密码:可以执行的命令 |
---|---|---|
devops | ALL= (ALL) | NOPASSWD: ALL |
检查sudoers配置是否有误
https://www.linuxcool.com/visudo
# 检查文件格式是否有误
visudo -c /etc/sudoers.d/devops
# 严格检查sudoers文件
visudo -s
如何在sudo运行的命令中
防止使用参数
参考: https://linux.cn/article-15106-1.html
visudo
以root
用户身份编辑/etc/sudoers
文件.
命令行后添加 ""防止使用参数
# 命令行后添加 ""防止使用参数
user1 ALL=(root) /usr/bin/ls ""
# 用户设为ALL命令行后添加 ""防止使用参数
ALL ALL=(root) /usr/bin/ls ""
代授权的用户或组 | 来源机器= (授权角色) | 免密码:可以执行的命令 |
---|---|---|
user1 | ALL = (root) | /usr/bin/ls “” |