![尝试通过 php 上的 shell_exec 启动应用程序](https://linux22.com/image/1184776/%E5%B0%9D%E8%AF%95%E9%80%9A%E8%BF%87%20php%20%E4%B8%8A%E7%9A%84%20shell_exec%20%E5%90%AF%E5%8A%A8%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我已经为这个问题苦思冥想了好几天。我对 Linux 还算熟悉,但绝对算不上专家。
目标:通过 shell_exec (www-data 用户) 启动 soulseek-cli 应用程序
问题不在于如何让 PHP 方面正常工作,而在于如何让 soulseek 使用 www-data 用户(或除 techno 之外的任何其他用户)启动
我按照以下说明使用 npm 进行安装
npm install -g soulseek-cli
(在一些我不确定的密钥环命令之后)
https://github.com/aeyoll/soulseek-cli
我可以让 soulseek 以 techno 用户身份在终端上运行,但是/usr/bin/env: 'node': No such file or directory
当我尝试通过 PHP 页面上的 www-data 启动 soulseek 时收到错误。
在终端上尝试通过 root 启动 soulseek,command not found
尽管可以使用以下方法找到它whereis soulseek
看来该应用程序仅针对 techno 安装?有没有办法在 php 上使用 techno 用户而不是 www-data?或者有没有办法让 www-data 运行用户 techno 应用程序?
Shell 脚本:
PHP 脚本:
尝试以 root 身份运行 soulseek:
nvm 和 node 版本:
答案1
用户 www-data 根本没有权利在不输入密码的情况下运行该程序。
您可以编辑文件 /etc/sudoers 来实现这一点。
查找 sudoers 文件中的条目并添加应用程序的具体路径。可能是“/usr/bin/soulseek”?
我这样做是为了控制我的网络摄像头并在我的网站的 php 页面上执行一个脚本,该脚本将温度/湿度数据写入文件中。我将所有文件路径的集合简称为“Camera-Funktions = CAMFKT”。
# Cmnd alias specification
Cmnd_Alias CAMFKT = /usr/bin/cam_on, /usr/bin/cam_off, /usr/bin/cam_reset, /usr/bin/play, /usr/bin/HTU21D.
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
www-data ALL=(ALL) NOPASSWD: CAMFKT
我没有更改 root 和 %sudo 条目,这只是为了向您显示文件中其他条目的位置。您知道如何编辑 sudoers 文件吗?如果您更改了它,用户 www-data(来自互联网的人)可以执行该程序。请小心。