Linux_sudo命令的使用与机制
1、sudo命令的作用
 
sudo(全称 superuser do)是 Linux/Unix 系统中权限管理的核心工具。
 允许普通用户在授权下以其他用户(默认是 root)的权限执行命令,而无需直接登录账户。
2、sudo命令的典型使用场景
 
sudo 覆盖了系统管理的几乎所有高权限操作场景,以下是常见示例:
2.1、安装/卸载软件
sudo apt-get install nginx  # Ubuntu/Debian系安装 
sudo yum remove httpd  		# CentOS/RHEL系卸载 
2.2、管理系统服务
sudo systemctl start nginx  	# 启动Nginx服务  
sudo systemctl restart mysql  	# 重启MySQL服务  
2.3、修改系统配置文件
sudo nano /etc/nginx/nginx.conf  # 编辑Nginx主配置文件 
2.4、 管理用户与权限
sudo adduser newuser  # 添加新用户 
sudo passwd olduser  # 修改指定用户密码 
3、sudo命令的选项
 
sudo 除了无选项以root用户执行指令的操作,还支持许多其他的选项,可灵活控制执行环境、目标用户等。
以下是常用选项的介绍:
3.1、 -u <用户>:指定目标用户
 
通过 -u 选项可指定其他目标用户。
示例:
# 以 `www-data` 用户身份查看 Nginx 日志(需 `sudoers` 授权)  
sudo -u www-data cat /var/log/nginx/access.log  
3.2、-i(--login):模拟目标用户的登录环境
 
-i(--login):模拟目标用户的登录环境,加载其完整的登录配置文件(如 ~/.bash_profile、~/.profile),并切换到目标用户的家目录。
示例:
# 以 root 身份模拟登录环境(需输入当前用户密码)  
sudo -i
效果等同于
su - 目标用户后执行命令,关于su命令看这篇文章:Linux_su命令
3.3、-s(--shell):启动目标用户的 shell
 
-s(--shell):启动目标用户的非登录交互式 shell,仅加载非登录配置文件(如 ~/.bashrc),保持原用户的当前工作目录。
示例:
# 以 root 身份启动 shell(需输入当前用户密码)  
sudo -s  
3.4、-l(--list):查看当前用户的 sudo 权限
 
-l 可列出当前用户被允许执行的 sudo 命令(需输入密码验证身份)。
示例:
user@host:~$ sudo -l  
Matching Defaults entries for user on host:  env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin  User user may run the following commands on host:  (ALL : ALL) ALL  # 允许以所有用户执行所有命令  
3.5、-k(--reset-timestamp):重置密码缓存
 
sudo 默认会缓存用户密码(通常 15 分钟),期间无需重复输入。-k 强制清除缓存,下次使用 sudo 需重新输入密码。
示例:
sudo -k  		# 清除当前用户的 sudo 密码缓存  
4、sudo 的核心机制
sudo 的核心是 基于用户/组的权限授权,所有权限规则存储在 /etc/sudoers 文件中。
其工作流程如下:
- 用户执行 sudo 命令;
- 系统检查 /etc/sudoers,确认当前用户是否有权限以目标用户(默认root)执行该命令;
- 若有权限,用户需输入自己的密码(非目标用户密码)验证身份;
- 验证通过后,命令以目标用户权限执行,操作记录被写入系统日志(如 /var/log/auth.log)。
4.1、sudo 的核心配置文件:/etc/sudoers
 
sudoers必须通过 visudo 命令编辑,可以自动检查语法错误,避免文件损坏导致无法使用 sudo.
sudoers中最核心的部分是权限规则,格式为:
用户/用户组  主机=(目标用户:目标组)  允许执行的命令  
示例1:
root    ALL=(ALL:ALL) ALL
表示root用户可以在任何主机上以任何用户和任何组的身份执行任何命令。
示例2:
%sudo ALL=(ALL:ALL) ALL
%符号:表示 “用户组”(Group),而非单个用户。
 这条配置表示“sudo组的成员“可以在 任何主机上 以任何用户和任何组的身份执行任何命令。
sudo组 是Ubuntu等系统的默认特权组,普通用户加入此组后即可通过 sudo 执行高权限命令。
4.2、sudo 的其他配置文件:/etc/sudoers.d/
 
下图截取自/etc/sudoers,可以看到,不建议直接修改该文件,可以将自定义配置的内容放在/etc/sudoers.d/目录下,并且使用了@includedir去包含了这个目录。
 
