我有一个帐户需要无缝地伪装成其他帐户,如下所示:
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。)