当前位置: 首页 > 面试题库 >

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

祝昊东
2023-03-14
问题内容

我在本地主机上运行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执行,并且我的手机可以暂停/播放音乐!


问题答案:

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

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

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

wwwuser ALL=/usr/bin/rhythmbox-client

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



 类似资料:
  • 问题内容: 我想到了suPHP,但这不是我所需要的。以其他用户身份运行整个PHP脚本并不能达到我的目的。我只需要以其他用户身份运行一个Linux命令行即可。 可能吗? 问题答案: 您可以尝试shell_exec函数和sudo 编辑 :看到sudo提示输入密码,您可能想使用proc_open,它允许您使用管道。请参阅此注释,以了解如何创建自定义密码管道。

  • 问题内容: 尝试编写一个能够以其他UNIX用户身份运行UNIX命令的Java程序。我有用户的密码,并且知道要运行的命令,但是该命令必须以该用户身份运行- 因此我必须先以该用户身份登录。 例如:假设我们有一个用户jim,他想查看bob的主目录中的内容,并且(出于某种原因)jim有权执行ls,而bob则没有。 我们目前以bob身份登录 。这是我们(可以)执行的操作: 问题是,系统提示您输入吉姆的密码。

  • 问题内容: 因此,我试图使用子进程从python脚本中以超级用户身份运行一个进程。在ipython shell中,类似 工作正常,但是一旦将其粘贴到脚本中,我就会开始获得:。 我猜这是由于sudo处理ubuntu上的环境的方式。(我也尝试和与无济于事) 所以我的问题基本上是,如果我想以超级用户身份运行,并在需要时提示用户输入超级用户密码,我该怎么做?我无意在脚本中存储密码。 编辑: 我尝试将命令既

  • 我最近开始使用Jenkins进行集成。在没有shell命令的情况下在主节点上运行作业之前,一切都很好,但我必须在主节点和从节点上运行作业,从节点包含要运行的shell命令。我无法以root用户身份运行这些shell命令。我试过了 使用 在shell命令中设置用户名 使用 每次使用上述任何一种方法时,我都会遇到错误。

  • 问题内容: 我正在编写一个初始化脚本,该脚本应该以与root用户不同的用户身份执行单个命令。这是我目前正在做的事情: 通常,这在Ubuntu / Debian上可以正常工作,但是在RHEL上,该脚本以挂起方式执行。 还有另一种以其他用户身份运行命令的方法吗? (请注意,我不能使用lsb初始化函数,因为它们在RHEL / Centos 5.x中不可用。) 问题答案: 在RHEL系统上,该脚本旨在提供

  • 问题内容: 我最近开始使用Jenkins进行集成。一切都很好,直到我在没有shell命令的情况下在主节点上运行作业,但是我必须在包含shell命令的主节点和从属节点上运行作业。我无法以root用户身份运行这些Shell命令。我努力了 使用。 在shell命令中设置用户名。 使用。 我得到我每次使用任何上述方法时错误。 问题答案: 您需要修改用户的权限,以便您可以运行shell命令。您可以将jenk