2013-03-22 61 views
1

我经常需要运行作为一个不同的用户。我一直在做类似的东西如何以不同的用户身份运行'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编辑功能。

回答

1

运行at之前,你可以剥夺环境:

echo "command ..." | env - PATH="$PATH" sudo su - otheruser -c "at now" 

您也可以安排sudo通过设置env_reset选项来为你做这个。例如,您可以授予用户以其他用户直接运行at命令的权限(而不是sudo以root用户身份运行其他用户),然后使用该用户或该命令的Defaults命令设置env_reset(请参阅sudoers手册页)。

但是,以上可能是最简单的解决方案,而不会改变您今天通常的做法。

+0

不错。而这些年来,我认为“env”仅用于打印你的环境。 – jhfrontz 2013-03-22 23:07:09

0

otheruser环境的任何“污染”都应该限制在at命令的环境中。当它实际上运行时间为batchToRun时,它将使用其典型的默认环境运行otheruser。也就是说,只有at now在由su sudo命令产生的shell中运行。

+0

我看到的行为与“at”手册页上描述的行为一致:工作目录,环境(变量TERM,DISPLAY和_除外)和umask从调用时保留。 – jhfrontz 2013-03-22 22:20:39

+0

也许你认为“su - otheruser”应该是一个干净的休息时间?现在我回头再仔细检查一下事情,我发现这是事实 - 环境污染的来源似乎更加阴险。 – jhfrontz 2013-03-22 23:37:45

相关问题