我想允许我的 PHP 脚本(由 apache2 托管)使用另一个用户帐户执行命令。
我不希望服务器上托管的另一个网站能够连接到另一个用户帐户。
如果我在 /etc/sudoers 中添加一条规则,那么它将允许网站上的任何人使用该用户。
我想到的解决方案是使用 ssh,使用私钥和公钥。PHP 脚本在所需的用户帐户上启动与托管它的服务器的 ssh 连接。
除了我使用 ssh 的解决方案之外,还有其他方法吗?
此致
答案1
我的直觉告诉我,你正在做的事情是个糟糕的想法。但实际上,你并没有给出足够的背景信息来说明你想要这样做的原因以及实际的用例是什么。
但是你关于sudo
这是否是个好主意的想法是错误的。
sudoers 条目定义如下:
USER HOST = [(RUNAS)] [NOPASSWD:] [!] CMD[,...]
这意味着允许用户以用户身份USER
运行(如果指定)。因此,您可以像这样构造您的条目:CMD
RUNAS
sudoers
www-data YOUR-HOSTNAME = (YOUR-USER) NOPASSWD: /path/to/command
www-data
这将允许指定主机上的用户(或者ALL
如果您将其指定为)以无需密码的用户身份YOUR-HOSTNAME
执行该程序。/path/to/command
YOUR-USER
您还可以提供ALL
命令,允许每个命令都YOUR-USER
有权访问。
例子
使用您给出的示例值,sudoers 行将由以下内容组成(假设mydeployer
为主机名和thedeployer
用户名):
www-data mydeployer = (thedeployer) NOPASSWD: ALL
答案2
您可以使用 sudo 和特定的 sudoers 配置来执行 dat:
从 PHP 执行命令如下
sudo -H -u user2 /your/command parameters
添加到 sudoers(sudo visudo
命令)
www-data ALL=(user2) NOPASSWD: /your/command
这允许 apache 以另一个用户身份运行特定命令