我知道在终端中至少有两种方法可以升级到 root 权限,我真的很好奇这两种方法在可访问和不可访问的内容方面是否存在差异。另外,这两种方法在安全方面有什么好处或缺点吗?
答案1
su
用于使用第二个用户的凭证向第二个用户进行身份验证。
sudo
用于使用 sudo 配置文件中编写的一些规则对另一个用户进行身份验证/etc/sudoers
。为了确保您的身份与您所假装的身份一致,sudo
可以再次询问您的凭据。
sudo
更加灵活,允许管理员以安全和有限的方式访问某些脚本命令或编辑文件。
su
不太灵活,并且需要知道要模拟的用户的凭据。由于功能简单,因此非常小,并且几乎在所有类 Unix 系统中都可以找到。
su
和都sudo
在使用Linux的PAMsudo
用于身份验证。某些发行版甚至与相比具有不同的 PAM 配置su
。因此,我必须使用sudo su
才能应用限制,同时也用于sudo
身份验证。
su
这是我针对 Ubuntu 20.04.1 LTS 的 PAM 配置,重点介绍了和sudo
PAM 配置之间的区别:
$ diff -y <(egrep -v '^#|^$' /etc/pam.d/su|sort) <(egrep -v '^#|^$' /etc/pam.d/sudo|sort)
auth sufficient pam_rootok.so <
@include common-account @include common-account
@include common-auth @include common-auth
@include common-session | @include common-session-noninteractive
session optional pam_mail.so nopen | session required pam_env.so readenv=1 envfile=/etc/defau
session required pam_env.so readenv=1 | session required pam_env.so readenv=1 user_readenv=0
session required pam_env.so readenv=1 envfile=/etc/de <
session required pam_limits.so <
$
一般来说,文献鼓励使用sudo
而不是su
,这样你就不需要另一组可能需要共享的密码。但在实践中,你可能会发现自己需要两组密码,su
甚至两组密码都用。
学习、测试、阅读文档并使用最适合您情况的那个。
现在给出一些如何使用它们的例子:
sudo fdisk -l # List all disk MS-DOS and GPT partitions
su -c 'fdisk -l' # same as above
sudo -i # Become root
su - # same as above
sudo bash # Run a bash shell as root in the current folder, and keep the environment variables
su bash # same as above
sudo -u oracle ps # Run ps as oracle user
su oracle ps # same as above
sudo su - # you should use: sudo -i
sudo -iu oracle # Start a login shell as oracle user
su - oracle # same as above
此外su
,sudo
在 Linux 上你还可以找到波尔基特其中有pkexec
。有关详细信息,请参阅polkit 文档。 例子:
pkexec fdisk -l # It's similar to: sudo fdisk -l
答案2
快速检查手册页会发现,sudo
主要用于以其他用户身份启动命令,而su
用于通过 PAM“替换用户凭据”。手册页包含有关使用su
和执行命令时具体发生的情况的更多详细信息sudo
。