如何以不同的用户身份运行'at'?

时间:2013-03-22 15:51:44

标签: shell environment-variables sudo su at-job

我经常需要以不同的用户身份在作业中运行。我总是这样做

$ 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的任何闪亮的新功能(特别是,能够将-i传递给sudo的参数不在我的掌握之中。

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

2 个答案:

答案 0 :(得分:1)

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

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

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

但上述情况可能是最简单的解决方案,而不会改变你今天的做法。

答案 1 :(得分:0)

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