我经常需要以不同的用户身份在作业中运行。我总是这样做
$ 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
编辑功能。
答案 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
。