1

我经常需要以不同的用户身份运行作业。我一直在做类似的事情

$ echo "$PWD/batchToRun -parameters" | sudo su - otheruser -c "at now"

batchToRun还计划通过otheruser的 crontab 运行。这很有效,直到batchToRun开始取决于环境变量设置的微妙副作用——比如LANG排序任何人?)——从运行的用户的环境中传入sudo

我通常不想以otheruser身份登录;这是一个半特权帐户,我想要一个与其相关活动的“书面记录”,这样我就可以回去查看到底做了什么,由谁做的,什么时候做的等等。

除了明显的重写batchToRun以独立于此类设置之外,还有什么好方法可以确保 sudoer 的环境不会污染目标环境?

注意:这是在 FC7(sudo 版本 1.6.8p12)和其他旧发行版上,所以sudo/ su/的任何闪亮的新功能at(特别是通过 to 传递参数的能力-isudo都不在我的掌握范围内。

更新:事实证明,这su - otheruser实际上是用户之间的足够防火墙,并且我的污染来自交互式启动序列中的某些东西。不过,我仍然喜欢env编辑功能。

4

2 回答 2

1

您可以在运行之前剥离环境at

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

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

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

于 2013-03-22T22:33:08.900 回答
0

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

于 2013-03-22T16:58:13.350 回答