Heim > Artikel > Backend-Entwicklung > Wie führe ich externe Befehle als bestimmter Benutzer in PHP aus?
Bei der Arbeit mit serverseitigen Umgebungen kommt es häufig vor, dass Sie auf Situationen stoßen, in denen Sie externe Befehlszeilenprogramme ausführen müssen aus einem PHP-Skript. Der Standardbenutzer, unter dem PHP ausgeführt wird, verfügt jedoch möglicherweise nicht über ausreichende Berechtigungen oder Zugriff auf bestimmte Anwendungen.
Stellen Sie sich ein Szenario vor, in dem Sie Apache auf localhost ausführen und versuchen, die Rhythmbox-Wiedergabe zu steuern von einem PHP-Skript, das als www-Benutzer ausgeführt wird. Das Ausführen des Befehls rhythmbox-client --pause funktioniert einwandfrei, wenn es manuell ausgeführt wird, schlägt jedoch fehl, wenn es als www-Benutzer ausgeführt wird, da Rhythmbox die Instanz des Benutzers nicht erkennt oder nicht darauf zugreift.
Eine wirksame Lösung Die Lösung besteht darin, den Befehl sudo zu nutzen, der es Ihnen ermöglicht, das externe Programm als bestimmter Benutzer auszuführen. Dazu muss die sudoers-Datei (visudo) geändert werden, um dem Webserver-Benutzer (z. B. wwwuser) die Berechtigung zum Ausführen eines bestimmten Befehls zu erteilen:
wwwuser ALL=/usr/bin/rhythmbox-client
Dadurch wird die Fähigkeit von Apache eingeschränkt, nur den erforderlichen Befehl auszuführen, wodurch potenzielle Sicherheitsrisiken vermieden werden .
In diesem speziellen Fall erkennt Rhythmbox die Instanz des Benutzers möglicherweise immer noch nicht, da PHP als www-Benutzer ausgeführt wird. Um dieses Problem zu beheben, erstellen Sie ein Bash-Skript, das rhythmbox-client aufruft und die DBUS_SESSION_BUS_ADDRESS aus der Umgebung des ausführenden Benutzers abruft:
<code class="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</code>
Dieses Bash-Skript kann dann von PHP als wwwuser ausgeführt werden, sodass Sie die Rhythmbox-Wiedergabe steuern können als Ihr Benutzer aus Ihrer PHP-Anwendung.
Das obige ist der detaillierte Inhalt vonWie führe ich externe Befehle als bestimmter Benutzer in PHP aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!