如何以不同的用户身份运行'at'?
我经常需要运行在作为一个不同的用户。我一直在做类似的东西如何以不同的用户身份运行'at'?
$ echo "$PWD/batchToRun -parameters" | sudo su - otheruser -c "at now"
batchToRun
还计划通过otheruser的crontab来运行。直到batchToRun
开始运行,取决于环境变量设置的细微副作用 - 如LANG(排序任何人?) - 从运行sudo
的用户环境传入。
我通常不想以登录其他用户;这是一个半特权帐户,我想要一个与其相关联的活动的“纸质足迹”,以便我可以回头看看究竟做了什么,由谁,什么时候等。
除了明显的重写batchToRun
独立于这些设置,确保sudoer环境不会污染目标环境的好方法是什么?
注:这是对FC7(须藤版本1.6.8p12版本得以)等老的发行版,所以任何闪亮的新功能sudo
/su
/at
(值得注意的是,与-i
参数传递到sudo
的能力)都超出了我把握。
更新:事实证明,su - otheruser
实际上是用户之间足够的防火墙,并且我的污染源自交互式启动顺序中的某些内容。不过,我仍然喜欢env
编辑功能。
运行at
之前,你可以剥夺环境:
echo "command ..." | env - PATH="$PATH" sudo su - otheruser -c "at now"
您也可以安排sudo
通过设置env_reset
选项来为你做这个。例如,您可以授予用户以其他用户直接运行at
命令的权限(而不是sudo
以root用户身份运行其他用户),然后使用该用户或该命令的Defaults
命令设置env_reset(请参阅sudoers手册页)。
但是,以上可能是最简单的解决方案,而不会改变您今天通常的做法。
otheruser
环境的任何“污染”都应该限制在at
命令的环境中。当它实际上运行时间为batchToRun
时,它将使用其典型的默认环境运行otheruser
。也就是说,只有at now
在由su sudo
命令产生的shell中运行。
不错。而这些年来,我认为“env”仅用于打印你的环境。 – jhfrontz 2013-03-22 23:07:09