我想跑
- 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 php
但sudo -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,还是无人或其他用户?