【问题标题】:Running shell script from PHP as different (non root) user以不同(非 root)用户身份从 PHP 运行 shell 脚本
【发布时间】:2011-03-10 03:00:47
【问题描述】:

我正在尝试在 Ubuntu 服务器上从 PHP 运行非特权用户拥有的 shell 脚本。权限问题使得使用 exec() 运行它是不切实际的,因为运行它的是 www-data。我用谷歌搜索了一下,发现了对 suExec 的各种引用(对于这样一个小问题,这似乎太麻烦了),设置 suid 位,以及 Stackoverflow 上一个有趣的方法,涉及 Python 服务器监听发送的命令通过 PHP。

无论如何,在所有这些解决方案中,我倾向于涉及设置 suid 位的解决方案,尝试过但没有用:chmod u+s script.sh,我的 Apache 日志仍然显示权限错误,所以我知道脚本是不是作为它的所有者运行,而是作为www-data

我必须做些什么才能让这个工作正常进行,有没有更简单的解决方案来解决这个问题?

【问题讨论】:

  • 没有。您的用户 (www-data) 需要执行权限才能运行脚本。让您想使用 shell 脚本的根本问题是什么,也许这有一个有用的答案。
  • 基本上我正在尝试创建 php.opensourcecms.com 的内部版本(在某个时间自动重置的开源 CMS 演示)。我已经让 cron 作为非特权用户每 2 小时运行一次脚本,但我想添加功能以按需执行它。我可以将它作为 www-data 运行,但这意味着我也可以从 www-data 的 cron 运行它,因为替换的文件归 www-data 所有。无论如何,出于安全原因,我想避免让 www-data 拥有所有文件。
  • 删除CMS的目录,解压备份,删除/创建/导入数据库备份,就这些了……

标签: php linux permissions exec


【解决方案1】:

查看 sudo 的手册页:sudo -u your_other_user 将让您以其他用户身份执行命令。

还可以使用 man sudoers 来查找用户可以使用 sudo 执行哪些命令的选项。

【讨论】:

  • 正在研究您的解决方案,但到目前为止还没有成功。我已经尝试为应该在 sudoers 文件中运行的特定命令启用无密码 sudo:www-data ALL=(ALL) NOPASSWD: /user/bin/sudo -u user /path/to/command 但如果我 su www-data 并尝试运行它仍然要求输入密码。与/user/bin/sudo -u user 相同
  • sudo: the -U option may only be used with the -l option
  • 请注意,它是小写的 -u 而不是 -U(参见 sudo --help)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 1970-01-01
  • 2013-08-10
  • 2011-10-30
  • 2018-01-20
相关资源
最近更新 更多