【问题标题】:How do I run a command as a different user from a root cronjob?如何以与根 cronjob 不同的用户身份运行命令?
【发布时间】:2010-11-22 16:59:44
【问题描述】:

我似乎陷入了 NFS 限制和 Cron 限制之间。

所以我让 root cron(在 RHEL5 上)运行一个 shell 脚本,除其他外,它需要通过 NFS 挂载 rsync 一些文件。并且 NFS 挂载上的文件由模式 700 的 apache 用户拥有,因此只有 apache 用户可以运行 rsync 命令——以 root 身份运行会产生权限错误(NFS 显然是一种罕见的情况,其中 root 用户是不是全能的?)

当我只想手动运行 rsync 时,我可以使用“sudo -u apache rsync ...”但是 sudo no workie in cron -- 它说“sudo:抱歉,你必须有一个 tty 才能运行 sudo ”。

我不想将整个脚本作为 apache 运行(即来自 apache 的 crontab),因为脚本的其他部分确实需要 root ——这只是一个需要作为 apache 运行的命令。而且我真的不希望更改文件的模式,因为这将涉及对其他应用程序的重大更改。

一定有办法从 cron 中完成“sudo -u apache”??

谢谢! 抢

【问题讨论】:

  • 将其移至 SuperUser.com 可能会更好。
  • 这是一个老问题,但在搜索排名中仍然很高,并且没有一个答案解决了为什么 root 权限不适用于 NFS 挂载。对于其他绊脚石的人来说,原因是 root_squash。这个博客有一个相当不错的解释为什么这个选项是必要的并且通常是默认设置的。 fullyautolinux.blogspot.com/2015/11/…

标签: cron root sudo nfs


【解决方案1】:

使用su 代替sudo

su -c "rsync ..." apache

【讨论】:

  • 是的!但不是。 apache 用户没有常规的登录 shell,因此 su -c 语法仅返回“此帐户当前不可用”。为此目的更改 apache 用户的 passwd 条目似乎是个坏主意。嗯,我想这个问题的标题应该是“如何以 apache 用户身份从 root cronjob 运行命令?”如果不引入安全漏洞,也许就无法做到?
  • 如果您明确指定要与-s 开关一起使用的shell(例如-s /bin/sh),是否有帮助?至少在 Ubuntu 上,如果相关用户在 /etc/passwd 中没有有效的 shell,这似乎会有所帮助。
【解决方案2】:

将它放在 /etc/crontab 并在用户字段中指定 apache 而不是 root

【讨论】:

    【解决方案3】:

    su --shell=/bin/bash --session-command="/path/to/command -argument=something" 用户名&

    为我工作(CentOS)

    【讨论】:

    • 我必须在--session-command 变量中的命令之前添加export TERM=xterm;。因此,我最终得到了su --shell=/bin/bash --session-command="export TERM=xterm; /path/to/command -argument=something" username &
    • 不适用于 Ubuntu (12.04),因为 su 命令不支持 --session-command 选项。
    • 为了澄清答案,在root的crontab中,添加su --shell=/bin/bash --session-command="/path/to/command -argument=something" username
    【解决方案4】:

    默认情况下,在 RHEL 上,sudo 不允许用于没有终端 (tty) 的进程。这是在/etc/sudoers 中设置的。

    您可以使用以下说明允许特定用户使用 tty-less sudo

    https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user

    【讨论】:

      【解决方案5】:

      如果你想永久让你像 apache 一样摆弄:

      chsh apache
      

      这允许您更改用户的外壳

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-24
        • 1970-01-01
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 2017-06-11
        • 2019-11-09
        相关资源
        最近更新 更多