为了账号安全,请及时绑定邮箱和手机立即绑定

以特定用户的身份从PHP运行命令行应用程序

/ 猿问

以特定用户的身份从PHP运行命令行应用程序

PHP
德玛西亚99 2019-12-05 14:38:52

我在本地主机上运行Apache。通过以www-user用户身份运行的PHP脚本,我想控制我的机器上Rhythmbox的播放。到目前为止,我的PHP脚本中有一个简单的命令:


exec('rhythmbox-client --pause');


当我像我一样从命令行运行它时,它的效果很好,但是如果它以www-user身份运行,我想可能rhythmbox-client不知道/无法访问我的Rhythmbox实例。


有没有一种简单的方法可以让该PHP脚本以我的用户而不是www-user的身份运行,或者告诉您rhythmbox-client要控制哪个实例?


整个应用程序是,当我的电话摘机时,它将调用我的PHP脚本,该脚本将暂停音乐,并在电话摘机时恢复播放。我喜欢VoIP电话!


解决方案: 多亏了Carpetsmoker和Tarek,我才sudo回答了问题,但是有两个问题。为了克服它们,我做了以下工作:


创建了一个bash脚本来调用rhythmbox-client。该bash脚本是使用sudoPHP 执行的,如下面的答案所述。不幸的是rhythmbox-client,不知道要控制什么环境,因此bash脚本如下所示:


#! /bin/bash

DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1`

if [ "x$DBUS_ADDRESS" != "x" ]; then

        export $DBUS_ADDRESS

        /usr/bin/rhythmbox-client --pause

fi

现在,bash脚本可以由PHP和wwwuser执行,并且我的手机可以暂停/播放音乐!


查看完整描述

3 回答

?
慕丝7291255

一种解决方案是使用sudo(8):


exec('sudo -u myuser ls /');

显然,您将需要进行设置sudo(8)以允许运行您的Web服务器的用户调用它。使用来编辑sudoers文件visudo(8),您可以使用类似以下的命令:


wwwuser ALL=/usr/bin/rhythmbox-client

为了防止Apache能够运行其他命令,而仅运行rythymbox命令。


查看完整回答
反对 2019-12-05
?
桃花长相依

如果某个进程可以由任何用户运行,则可以由PHP运行。示例是fortune命令


-rwxr-xr-x 1 root root 18816 Oct  1  2009 /usr/games/fortune

查看x每个用户的权限。但这有时根本无法工作,您可能必须让用户www-data或其他人apache运行程序。您可以sudo www-data尝试运行该命令。如果可以,那么Apache / PHP应该可以运行它。


查看完整回答
反对 2019-12-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信