![如何使用 sudo 从某个路径运行命令?](https://linux22.com/image/1521194/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20sudo%20%E4%BB%8E%E6%9F%90%E4%B8%AA%E8%B7%AF%E5%BE%84%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
我正在设置一些远程控制机器人的自动化。这些机器人必须只具有运行某些命令的权限(我不能打开太多权限以sudoers
允许任意命令)。
它运行良好,我可以使用文件中的指令设置我需要的几个命令并绕过密码限制(因为sudo
输入时没有机会输入密码)。但有一个问题。一些脚本,特别是用某些……呃,PHP 框架编写的脚本……需要从某个目录运行,该目录被视为项目的根目录。NOPASSWD
sudoers
此目录由另一个用户拥有,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