我发生了以下事情:
$ sudo su - superman
Sorry, user clarkkent is not allowed to execute '/bin/su - superman' as root in krypton101.
然而,以下工作正常:
$ sudo su superman
什么时候允许用户做sudo su
而不做是有用的sudo su -
?如何设置/取消设置此设置?我读这一页但这没有帮助。
更多细节:
- 我不是管理员
- 我无权访问
/etc/sudoers
- 发行版是 Centos 7
答案1
当指定 via 允许的命令时sudo
,基本上有两个简单的选项:
- 允许特定命令任何参数,或
- 允许特定命令准确指定仅参数集。
因此,允许sudo su - superman
和sudo su superman
需要文件中的两个条目sudoers
。您的管理员似乎只为您提供了其中之一。
文件sudoers
语法实际上并不让管理员使用通配符或正则表达式限制选项指定特定命令,因为这些规范太容易被滥用。正如安德鲁所说,安全总比后悔好是这里的方法。
但请注意,sudo su superman
需要sudo
允许原始用户运行su superman
作为根用户。实际上,将有两次身份转换,而不仅仅是一次:首先从原始用户到 root by sudo
,然后从 root 到superman
by su
。文件中的规范如下所示sudoers
:
original_user ALL=(root) su superman
另一方面,sudoers
如果用户不太专注于命令的使用,则语法有一种更简单的方法允许用户作为特定用户运行任何命令su
。
如果 sudoers 规范是这样写的:
original_user ALL=(superman) ALL
那么用户可以使用sudo -u superman -s
来实现接近(但可能不精确)的等价sudo su superman
和 sudo -u superman -i
达到一个精确的相当于sudo su - superman
.
为什么人们不使用它,而是坚持使用sudo su -
构造?因为旧版本的!-i
中不存在该选项。sudo
它是在 2000 年之后的某个时候才出现的,因此有很多旧文献仍然推荐这种现已过时的sudo su -
结构。当然,老 Unix 用户和管理员可能有肌肉记忆,所以他们会不假思索地使用它。
答案2
回答这个问题:什么时候允许用户执行 sudo su 而不是 sudo su - 有用?
su
之后但之前的连字符用户名指示su允许当前用户继承username的环境。只要克拉肯的环境具有必要的环境变量设置,以便能够运行超人,没有必要运行sudo su - superman
。
不允许的一个合理的“原因”sudo su - superman
可能是系统管理员认为sudo su - superman
这造成了安全风险。这是因为sudo su -
,在不指定用户名的情况下,指示系统将您登录为根用户,这可能是系统管理员试图避免的事情。我实际上不确定添加连字符是否会产生这种风险,但我想当涉及到安全性时,它是安全总比后悔好。
如何设置/取消设置此设置?
配置在/etc/sudoers
文件中定义。