🔍 什么是sudo?
sudo(SuperUser Do)是Linux系统中临时获取超级用户权限的命令。普通用户无需切换root账户,就能安全执行需要管理员权限的操作(如安装软件、修改系统配置)。
sudo?🥦 最小权限原则:避免长期使用root账户,降低误操作风险
🌿 权限审计:所有sudo操作会被记录(/var/log/auth.log)
🍀 灵活授权:可精确控制哪些用户/组能执行特定命令
# 安装软件(临时获取root权限)
sudo apt install nginx
# 切换root环境(谨慎使用)
sudo -i
# 编辑系统配置文件
sudo vim /etc/nginx/nginx.conf
# 查看授权日志(需root权限)
sudo tail -f /var/log/auth.log
⚠️ 注意:首次使用会要求输入当前用户密码,默认15分钟内无需重复验证
root ALL=(ALL:ALL) ALL在 /etc/sudoers 文件中,这行配置是默认赋予 root 用户无限权限的核心规则。以下是逐字段的详细解释和实际配置示例:
root ALL=(ALL:ALL) ALL
root:表示规则适用于 root 用户。 如果是用户组,需以 % 开头,如 %admin。ALL:允许在任何主机上使用该规则(适用于多服务器环境)。(ALL:ALL):ALL:允许切换到任何用户(如 sudo -u mysql)。ALL:允许切换到任何用户组(如 sudo -g www-data)。(ALL) 等价于 (ALL:ALL)。ALL:允许执行所有命令(即无限制)。 可替换为具体命令路径,如 /usr/bin/apt。mysql、www-data)。docker、admin)。rm、chmod 等危险操作)。/etc/sudoers文件(❗ 必须用visudo命令编辑,防止语法错误导致系统锁死)
典型配置示例:
# 允许admin组免密执行apt命令
%admin ALL=(root) NOPASSWD: /usr/bin/apt
# 允许用户tom重启服务器
tom ALL=(root) /sbin/shutdown -r now
# 允许开发组重启服务、查看日志(无需密码)
User_Alias DEV_TEAM = %frontend, %backend
Cmnd_Alias SERVICE = /usr/bin/systemctl restart nginx, /usr/bin/tail /var/log/nginx/*
DEV_TEAM ALL=(ALL) NOPASSWD: SERVICE
配置技巧:
User_Alias、Cmnd_Alias分组简化配置。apt install但禁止apt remove。PATH)。💐 避免直接给ALL权限,按需细化命令白名单
🌸 敏感操作建议搭配-k参数(强制重新验证密码)
🌹 定期检查/var/log/auth.log监控异常操作
🌷 使用sudo -l查看当前用户的授权命令
❌ 禁止直接vim编辑/etc/sudoers(必须用visudo) ❌ 不要随意赋予ALL权限(按需最小化授权) ❌ 避免在脚本中明文写sudo密码(改用免密配置)
# 以其他用户身份执行命令(如mysql用户)
sudo -u mysql touch /var/lib/mysql/test.log
# 直接进入rootshell(不推荐!)
sudo -i
# 查看上次sudo操作记录
sudo tail -n 20 /var/log/auth.log | grep sudo
Q:sudo和su有什么区别?A:su直接切换用户身份,需知目标用户密码;sudo按策略临时提权,用当前用户密码验证
Q:报错"xxx is not in the sudoers file"怎么办?A:联系管理员,在/etc/sudoers中添加相应用户授权