首先我们先了解一下su和sudo
su命令允许用户以另一个用户的权限执行命令。
sudo命令允许拥有适当权限的用户作为具有管理权限的root用户执行命令。
sudo命令的语法如下:
没有任何选项的基本形式如下:
当上述命令被执行时,sudo检查sudoers文件,以检查调用该命令的用户是否有权限。
su命令的语法如下:
su常用的选项包括:
-
-c, --command COMMAND, 以指定的用户身份运行一个特定的命令。
-
-l, --login USERNAME, 运行一个登录脚本,以便改变为一个特定的用户。
-
-s, --shell SHELL, 指定一个不同的外壳。
-
-p, --preserve-environment, 用于保留当前的shell环境。
su
su
命令允许用户切换到其他用户,通常是切换到root用户来执行特权命令。
特点:
-
需要知道目标用户的密码:要使用
su
切换到root用户,你需要知道root用户的密码。 -
会话完全改变:当你使用
su
切换到另一个用户时,你的环境变量(如$PATH
、$HOME
等)会变为目标用户的环境变量。 -
持续权限:一旦你使用
su
切换到root用户,除非你显式地退出或关闭会话,否则你将保持root权限。 -
安全风险:由于
su
要求知道root密码,因此如果多个用户都知道root密码,那么系统的安全性就会降低。
sudo
sudo
命令允许用户以其他用户的身份(通常是root)来执行命令。
特点:
-
配置灵活:
sudo
的配置文件(/etc/sudoers
)允许管理员细粒度地控制哪些用户可以执行哪些命令。 -
不需要知道root密码:默认情况下,只有配置在
/etc/sudoers
中的用户才需要输入他们自己的密码来执行特权命令。这样,root密码的暴露风险被降低了。 -
环境变量不变:使用
sudo
执行命令时,环境变量(如$PATH
、$HOME
等)保持不变,这有助于减少因环境变量改变而引起的潜在问题。 -
命令级权限:与
su
不同,sudo
允许为特定的命令或命令集合分配权限,而不是整个用户会话。 -
日志记录:
sudo
命令的执行会被记录在/var/log/auth.log
(或类似位置)中,这有助于审计和追踪系统上的活动。 -
时间限制:
/etc/sudoers
中的配置可以限制用户使用sudo
的时间段。
总结
-
su
和sudo
都是用于执行特权命令的工具。 -
su
需要知道目标用户的密码,并会改变整个会话的环境变量;而sudo
则允许基于命令的细粒度权限控制,并可以在不改变环境变量的情况下执行特权命令。 -
在安全性方面,
sudo
通常被认为是比su
更安全的选择,因为它减少了root密码的暴露风险,并提供了更灵活的权限控制机制。