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
去包含了这个目录。