【问题标题】:How to run 'at' as a different user?如何以不同的用户身份运行“at”?
【发布时间】:2013-03-22 15:51:44
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 如果您同时使用sudosu,您可能做错了什么。试试sudo -u otheruser at now
  • @OrangeDog 请注意-(并参考FC7)。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 不错。这些年来,我认为“env”只对打印你的环境有用。
【解决方案2】:

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

【讨论】:

  • 我看到的行为与“at”手册页中描述的一致:工作目录、环境(变量TERM、DISPLAY和_除外)和umask从时间开始保留调用。
  • 也许你建议“su - otheruser”应该是一个彻底的休息?现在我回过头来更仔细地检查事情,我发现这是真的——环境污染的来源似乎更隐蔽。
猜你喜欢
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多