为什么“sudo”和“sudo -i”对 NOPASSWD 的处理不同?

为什么“sudo”和“sudo -i”对 NOPASSWD 的处理不同?

我有一个帐户需要无缝地伪装成其他帐户,如下所示:

manager$ sudo -u worker_A echo hello from worker A
hello from worker A
manager$ sudo -u worker_B echo hello from worker B
hello from worker B

因此我将类似这样的内容放在了以下文件中/etc/sudoers.d

manager ALL=worker_A,worker_B,worker_C NOPASSWD: ALL

对于上述命令,这似乎工作正常。但是,在某些情况下,我需要作为帐户执行的操作worker_*需要整个登录环境,即我需要将-i/--login标志传递给 sudo。但是,当我尝试这样做时,我得到了完全出乎意料的结果:

manager$ sudo -u worker_A echo hello from worker A
hello from worker A
manager$ sudo -u worker_A -i echo hello from worker A
[sudo] password for manager:

问题:

  • 这里发生了什么?
  • 我该如何修复它?

(注意:我更改了帐户名称并简化了 sudoers 文件的内容,以创建一个最小示例并保护隐私。希望我没有无意中犯下任何拼写错误或在此过程中更改任何内容。)

答案1

因此,为了防止任何人花时间试图解决这个问题,并可能帮助遇到类似问题的人,在其他地方有一个不相关的规则被该帐户继承,manager该规则与现有规则相冲突,从而导致意外行为。

(特别是,另一条规则是允许开发人员成为账户worker_*,但前提是他们专门使用该命令sudo -i -u worker_A来获取交互式 shell。)

相关内容