【问题标题】:How to run script as another user without password?如何在没有密码的情况下以另一个用户身份运行脚本?
【发布时间】:2011-10-17 20:31:03
【问题描述】:

我有必须以 user2 身份运行的 script.sh。但是,此脚本只能在我的应用程序中的 user1 下运行。

我想运行以下命令:

su user2 -C script.sh

但无需密码也能运行。

我也希望这是非常严格的,因为 user1 只能在 user2 下运行 script.sh 而不能运行其他任何东西。

我已经尝试使用 sudoers 文件执行此操作,但经过数小时的尝试后,我一直感到困惑。

如果有人可以提供一个明确的示例来说明如何实现这一点(而不是像使用 sudoers 这样的通用示例),我们将不胜感激。

【问题讨论】:

  • 我不特别用关闭。这是一个关于如何以特定方式对系统进行编程的问题;因此,它是关于 shell 编程的,并且在 SO 的范围内,这是关于编程的问题。很明显,许多人并不认为这太离题以至于不应该投反对票。问题和答案都有相当多的赞成票。

标签: linux bash sudo su sudoers


【解决方案1】:

尝试运行:

su -c "Your command right here" -s /bin/sh username

这将以用户名身份运行命令,前提是您有权以该用户身份使用 sudo。

【讨论】:

  • 它像普通用户一样拥有完整的 sudo 权限,如下所示:sudo su -c "Your command right here" -s /bin/sh otheruser
  • 只是给所有mac用户的注释,显然语法有点不同:su username -c "command"
  • 如果您尝试以其他用户身份启动 screen,那么这可能会有所帮助 - linuxquestions.org/questions/linux-software-2/…
  • 如果username(或问题中的user2)本身有密码,这将不允许跳过提示。另一个答案是:user1 和 user2 都不需要密码。
【解决方案2】:

致电visudo 并添加以下内容:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

命令路径必须是绝对路径!然后从user1 shell 调用sudo -u user2 /home/user2/bin/test.sh。完成。

【讨论】:

  • Ubuntu 帮助中有nice description of sudoers 格式。 sudoers 的手册页很丑:(
  • 那么这将如何扩展以让所有用户以 user2 身份运行,而不仅仅是 user1?
【解决方案3】:
`su -c "Your command right here" -s /bin/sh username`

上述命令是正确的,但在 Red Hat 上,如果 selinux 强制执行,它将不允许 cron 作为另一个用户执行脚本。例子; execl: couldn't exec /bin/sh execl: Permission denied

我必须安装 setroubleshoot 和 setools 并运行以下命令才能允许它:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-28
    • 2021-12-15
    • 2018-05-09
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多