Shell 如何运行&x27;at';作为一个不同的用户?

Shell 如何运行&x27;at';作为一个不同的用户?,shell,environment-variables,sudo,su,at-job,Shell,Environment Variables,Sudo,Su,At Job,我经常需要以不同的用户身份运行作业。我总是做类似的事情 $ echo "$PWD/batchToRun -parameters" | sudo su - otheruser -c "at now" batchToRun也计划通过其他用户的crontab运行。直到batchToRun开始依赖于环境变量设置的细微副作用(如LANG(对任何人进行排序?)为止,这一切都很有效,这些设置是从运行sudo的用户的环境传入的 我通常不想以其他用户身份登录;这是一个半特权帐户,我希望它的相关活动有一个“书面记

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

$ echo "$PWD/batchToRun -parameters" | sudo su - otheruser -c "at now"
batchToRun
也计划通过其他用户的crontab运行。直到
batchToRun
开始依赖于环境变量设置的细微副作用(如LANG(对任何人进行排序?)为止,这一切都很有效,这些设置是从运行
sudo
的用户的环境传入的

我通常不想以其他用户身份登录;这是一个半特权帐户,我希望它的相关活动有一个“书面记录”,这样我就可以回去看看到底做了什么,由谁做的,何时做的,等等

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

注意:这是在FC7(sudo版本1.6.8p12)和其他旧发行版上,因此我无法掌握
sudo
/
su
/
at
的任何闪亮的新功能(特别是,使用
-i
将参数传递给
sudo


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

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

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

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

echo "command ..." | env - PATH="$PATH" sudo su - otheruser -c "at now"
您还可以通过设置
env_reset
选项,安排
sudo
为您执行此操作。例如,您可以允许您的用户以其他用户的身份直接运行
at
命令(而不是
sudo
到root然后到其他用户),然后使用该用户或该命令的
Defaults
命令设置env_reset(请参阅sudoers手册页)


但是,在不改变您目前的工作方式的情况下,上述可能是最简单的解决方案。

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

echo "command ..." | env - PATH="$PATH" sudo su - otheruser -c "at now"
您还可以通过设置
env_reset
选项,安排
sudo
为您执行此操作。例如,您可以允许您的用户以其他用户的身份直接运行
at
命令(而不是
sudo
到root然后到其他用户),然后使用该用户或该命令的
Defaults
命令设置env_reset(请参阅sudoers手册页)


但是,在不改变您目前的工作方式的情况下,上述可能是最简单的解决方案。

我看到的行为与“at”手册页上描述的行为一致:工作目录、环境(变量术语、显示和umask从调用时就被保留了。也许你是在建议“su-otheruser”应该是一个彻底的突破?现在我回过头来更仔细地检查事情,我发现这是真的——环境污染的来源似乎更隐蔽。我看到的行为与“at”手册页上描述的行为一致:工作目录、环境(变量项、显示和u除外)umask从调用时就被保留了。也许你是在建议“su-otheruser”应该是一个彻底的突破?现在我回头更仔细地检查了一下,我发现这是真的——环境污染的来源似乎更阴险。这些年来,我一直认为“env”只对打印您的环境有用。很好。这些年来,我一直认为“env”只对打印您的环境有用。如果您同时使用
sudo
su
,您可能做错了什么。现在就试试
sudo-u otheruser
@OrangeDog注意
-
(并参考FC7)。如果同时使用
sudo
su
,可能是做错了什么。现在就试试
sudo-uotheruser
@OrangeDog注意
-
(并参考FC7)。