更新

更新

我想跑

  • shell 脚本restore
  • 作为 postgres 用户
  • 来自 php 脚本(用户名是php
  • 使用 sudo (因此不需要密码)

该脚本将包含几行代码,例如

dropdb <database name>
psql -c "create database <database name> with encoding 'unicode';" -U edutemplate1
psql -d <database name> -f edu.hourly.sql 
  • 会是什么sudo 命令语法运行脚本restore
  • 会是什么sudoers 语法允许 php 用户restore以用户身份运行脚本postgres

  • Sudo 版本 1.7.2p7

  • Linux 测试 2.6.34-12-desktop #1 SMP PREEMPT 2010-06-29 02:39:08 +0200 x86_64 x86_64 x86_64 GNU/Linux

更新

问题的第一部分已经在 SO 上得到回答sudoers 语法以 php 用户身份运行 shell 脚本

更新2

我添加php ALL=(postgres) NOPASSWD: /usr/bin/id到 /etc/sudoers 然后执行,su phpsudo -su postgres /usr/bin/id系统要求我输入 postgres 的密码。如果我在用户 root 下发出相同的 sudo 命令,我将获得正确的输出“uid=26(postgres) gid=26(postgres) groups=26(postgres)”

更新3

更新 sudoers 使其php ALL=(postgres) NOPASSWD: ALL正常工作......

答案1

也可以看看这个答案类似场景。

如下所示/etc/sudoers

php ALL=(postgres) NOPASSWD: /the/restore/script

然后让 php 发出如下命令:sudo -u postgres /the/restore/script

答案2

您可以从 root 执行“su $USERNAME -c “command”” 无论如何,您也可以通过 sudo 执行此操作,如果您可以描述一下您想要做什么?例如从哪个用户?是否需要密码?(您可以在 /etc/sudoers 中定义它)“php 用户”您的意思是 www-data,还是无人或其他用户?

相关内容