Linux 权限管理进阶:sudo 实战技巧详解

今天分享一下sudo权限管理。

1. 什么是 sudo?

sudo(superuser do)允许普通用户在不切换到 root 账户的前提下,以其他用户(默认是 root)的身份运行命令。相比直接使用 su,sudo 提供了更细粒度、更安全的权限控制。

2. sudo 的基本命令用法
复制
sudo command # 以 root 权限执行命令 sudo -u 命令 # 以指定用户身份执行命令 sudo -i # 获取一个 root 登录 shell sudo -l # 查看当前用户被授权执行的命令列表1.2.3.4.
3. sudo 权限配置

所有 sudo 的核心配置文件是 /etc/sudoers,但你不应该直接编辑它。推荐使用 visudo 来避免配置错误导致系统无法使用 sudo。

复制
visudo1.

sudoers 文件的基本语法:

复制
<用户> <主机>= (<可切换身份>) <命令列表>1.

例如:

复制
liyb ALL=(ALL) NOPASSWD: /usr/vibin/systemctl restart nginx1.

含义是:用户 liyb 可以在所有主机上,以任意用户身份,无需输入密码,执行 /bin/systemctl restart nginx。

4. 实战案例

(1) 限制用户只运行特定命令:

复制
liyb ALL=(ALL) /usr/bin/systemctl restart nginx1.

效果:用户 bob 只能使用 sudo 重启 nginx,不能用它来执行其他命令。

(2) 多个用户共享相同权限:

复制
Cmnd_Alias RESTART_CMDS = /sbin/reboot, /usr/bin/systemctl restart nginx User_Alias ADMINS = alice, liyb ADMINS ALL=(ALL) NOPASSWD: RESTART_CMDS1.2.3.4.

用户组 ADMINS 成员可以无需密码执行 RESTART_CMDS 里的命令。

(3) 开发人员编辑特定配置文件

复制
dev ALL=(ALL) NOPASSWD: /usr/bin/vi /etc/nginx/nginx.conf1.

开发人员只能编辑 nginx 配置文件,而无法访问其他系统文件。

(4) 将liyb设为root权限

复制
liyb ALL=(ALL) ALL1.

如果设置成这样,代表liyb用户可以执行任何权限,不过需要输入密码才能执行。

还有一种办法就是将liyb用户加入wheel组。

5. sudo 日志与审计

所有通过 sudo 执行的命令都会被记录,方便日后审计和追踪:

Ubuntu/Debian 系统:/var/log/auth.logCentOS/RHEL 系统:/var/log/secure

日志信息包含用户名、执行命令、终端信息、是否成功等关键信息:

6. 安全建议与最佳实践最小权限原则:只授权用户执行他们所需的最少命令避免通配符(如 /bin/*):容易被滥用谨慎使用 NOPASSWD:虽然方便,但可能成为安全隐患定期审计授权规则:用户、命令需求可能会变化

阅读剩余
THE END