如何使用 sudo 从某个路径运行命令?

如何使用 sudo 从某个路径运行命令?

我正在设置一些远程控制机器人的自动化。这些机器人必须只具有运行某些命令的权限(我不能打开太多权限以sudoers允许任意命令)。

它运行良好,我可以使用文件中的指令设置我需要的几个命令并绕过密码限制(因为sudo输入时没有机会输入密码)。但有一个问题。一些脚本,特别是用某些……呃,PHP 框架编写的脚本……需要从某个目录运行,该目录被视为项目的根目录。NOPASSWDsudoers

此目录由另一个用户拥有,www-data或者apache大多数情况下由另一个用户拥有。好的,我可以授权机器人以该用户的身份运行脚本,但我无法cd在非交互式会话中找到正确的路径,因为无法将其cd作为命令包含在sudoers文件中。

通常我会做的事情是类似这样的cd /var/www/path/to/app && php whatever.php --some args,但我找不到在文件中设置这种模式的方法sudoers,这似乎是不可能的。

你知道怎样解决这个问题吗?

答案1

我所知道的唯一解决方法是创建一个包含代码的小型 shell 脚本,然后允许用户/机器人执行该脚本。

sudo cd /var/www/path/to/app && php whatever.php --some args

将不起作用,因为它是两个命令,而 sudo 允许您运行一个。但如果您将其放在一个小的脚本中(比如说 /var/www/scripts/something/script.sh):

#!/bin/bash
cd /var/www/path/to/app && php whatever.php --some args

您可以使用它来运行它

sudo /var/www/scripts/something/script.sh

相关内容