用户什么时候可以执行“sudo su”但不能执行“sudo su -”?

用户什么时候可以执行“sudo su”但不能执行“sudo su -”?

我发生了以下事情:

$ 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 - supermansudo su superman需要文件中的两个条目sudoers。您的管理员似乎只为您提供了其中之一。

文件sudoers语法实际上并不让管理员使用通配符或正则表达式限制选项指定特定命令,因为这些规范太容易被滥用。正如安德鲁所说,安全总比后悔好是这里的方法。

但请注意,sudo su superman需要sudo允许原始用户运行su superman 作为根用户。实际上,将有两次身份转换,而不仅仅是一次:首先从原始用户到 root by sudo,然后从 root 到supermanby 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文件中定义。

相关内容