基于 Linux 的系统有很多重复的功能,例如这些系统做同样的事情:
sudo --login --user <user>
sudo su - <user>
这sudo
-only 方法看起来更优雅。可以没有吗su
不破坏太多东西?
答案1
su
如果我没记错的话,和之间有一些细微的区别sudo
:
su
只允许更改用户 ID(例如成为超级用户)。su
允许任何知道另一个用户密码的用户成为该用户,并且无法控制这一点。sudo
允许以另一个用户(包括 root)身份运行命令。sudo
由文件控制/etc/sudoers
。
我认为该命令的最初目标sudo
是更好地控制谁可以使用 root 权限运行命令,谁不能。当您的系统有多个管理员时,sudo
允许以 root 身份运行命令而无需 root 密码,从我的角度来看,这更安全。在许多发行版上,/etc/sudoers
允许控制可以使用的用户或组列表sudo
。
答案2
在使用上,是的,sudo可以完全替代su。但有很多脚本和程序使用su
,因此没有办法安全地删除它。许多 Linux 发行版没有预安装 sudo。在脚本中使用 sudo 会使其与这些系统不兼容。正如 Jernej 在他的评论中提到的,su 是 Posix 标准的一部分。这意味着,当您编写脚本时,您应该能够相信,如果您使用的话,
su
您的脚本将在所有 Posix 兼容的操作系统上运行。
这里是一个参考。
答案3
sudo
自动关闭大于调用进程的任何文件描述符>&2
- 这可能是一个问题。
整个sudoers
事情又是另外一回事了(可以说是不必要的)从久经考验的/etc/passwd
基本用户/组 Unix 风格的权限方案中抽象出来,它需要自己的管理。
例如,从man growisofs
:
如果执行下
sudo(8) growisofs
拒绝启动。这样做的原因如下。自然growisofs
必须访问要记录到 DVD 介质的数据集,或者通过让mkisofs
生成间接访问ISO9660如果要记录预先掌握的图像,则可以即时布局或直接布局。在 下执行sudo(8)
,growisofs
有效地授予sudoers
对文件系统中任何文件的读取访问权限。growisofs
解析$MKISOFS
环境变量以确定可执行映像的替代路径这一事实加剧了这种情况mkisofs
。这意味着在 下执行sudo(8)
,growisofs
有效地授予sudoers
以提升的权限执行他们选择的程序的权利。如果您出于某种原因仍然认为上述内容可以接受并且愿意承担后果,那么请考虑就地运行以下包装器脚本sudo(8)
以获取真正的growisofs
二进制文件。
#!/bin/ksh
unset SUDO_COMMAND
export MKISOFS=/path/to/trusted/mkisofs
exec growisofs "$@"
但请注意,上述“解决方法”的建议替代方案实际上是安装
growisofs
set-root-uid
,在这种情况下,它将在访问数据或执行之前放弃特权,mkisofs
以防止对数据进行未经授权的访问。
至少su
实际上暂时切换用户并保留 Unix 风格的权限。sudo
, 另一方面,超越用户。尽管如此,如果你正确地处理这个问题,/etc/sudoers
sudo
可能在大多数方面都可以完全替代su
,并且可以方便地做到这一点 - 以最小的安全成本,因为su
提出了大多数相同的安全问题sudo
- 也许还有一些自己的安全问题。我认为这是一次精彩的讨论就此主题而言。
但为什么不直接跳过它们然后......
CTRL+ ALT+Fn
login: root
或者...
ssh root@localhost
无论发生什么事根反正?