Wie führe ich einen Befehl mit Sudo von einem bestimmten Pfad aus?

604
Victor Schröder

Ich stelle eine Automatisierung mit ferngesteuerten Bots ein. Es ist zwingend notwendig, dass diese Bots nur genau die Berechtigungen zum Ausführen bestimmter Befehle haben (ich kann die Berechtigungen nicht zu sehr öffnen sudoers, um willkürliche Befehle zuzulassen).

Es funktioniert gut, ich kann die verschiedenen Befehle einrichten, die ich brauche, und die Begrenzung des Passworts umgehen (da es keine Möglichkeit gibt, beim sudoEingeben von Passwörtern ) mit der NOPASSWDDirektive in der sudoersDatei. Aber es gibt ein Problem. Einige Skripts, insbesondere diejenigen, die in einigen ... äh, PHP-Frameworks ... geschrieben sind, erwarten, dass sie von einem bestimmten Verzeichnis aus ausgeführt werden, das als Stamm des Projekts gilt.

Dieses Verzeichnis wird von einem anderen Benutzer gehört, www-dataoder die apachemeisten der Zeit. Ok, ich kann den Bot autorisieren, das Skript als diesen Benutzer auszuführen, aber ich kann nicht cdden richtigen Pfad in einer nicht interaktiven Sitzung verwenden, da es nicht möglich ist, cdeinen Befehl in die sudoersDatei einzufügen.

Normalerweise würde ich so etwas tun cd /var/www/path/to/app && php whatever.php --some args, aber ich finde keinen Weg, dieses Muster in der sudoersDatei einzurichten, es scheint nicht möglich zu sein.

Kennen Sie einen Weg, um das zu umgehen?

0

1 Antwort auf die Frage

0
nStensen

Die einzige Arbeit, die ich kenne, wäre, ein kleines Shell-Skript zu erstellen, das Ihren Code enthält, und dem Benutzer / Bot dann die Ausführung des Skripts gestatten.

sudo cd /var/www/path/to/app && php whatever.php --some args 

funktioniert nicht, da es sich um zwei Befehle handelt, und mit sudo können Sie einen ausführen. Wenn Sie dies jedoch in ein kleines Skript schreiben (sagen wir /var/www/scripts/something/script.sh):

#!/bin/bash cd /var/www/path/to/app && php whatever.php --some args 

Sie können es mit ausführen

sudo /var/www/scripts/something/script.sh