BASH Scripting, su zu www-Daten für einen einzelnen Befehl

26

Ich arbeite an der Automatisierung der Erstellung von Subversion-Repositorys und zugehörigen Websites, wie in diesem von mir geschriebenen Blog-Beitrag beschrieben . Ich habe Probleme mit dem Teil, in dem ich dem Benutzer www-data den folgenden Befehl erteile:

svnadmin create /svn/repository

Am Anfang des Skripts wird überprüft, ob es als root oder sudo ausgeführt wird. Nach diesem Befehl muss alles als root ausgeführt werden. Gibt es eine gute Möglichkeit, diesen einen Befehl als WWW-Daten auszuführen und dann zum Beenden zurück zum Stammverzeichnis zu wechseln?

Brendon Dugan
quelle

Antworten:

24

Verwenden su - www-data -c 'svnadmin create /svn/repository'Sie einfach in Ihrem Skript, das von root ausgeführt wird. Damit nur dieser Befehl von www-data user ausgeführt wird.


Update für zukünftige Zuschauer :

Wenn Sie eine "This account is currently not available"Fehlermeldung erhalten, sollten Sie Folgendes in Betracht ziehen:

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(@Petr 's wertvolle Erwähnung über das -sFlag, um www-datadie Richtlinie für Benutzer ohne Anmeldung zu berücksichtigen )

johnshen64
quelle
1
Ja, anscheinend habe ich eine Grundregel für die Skripterstellung vergessen ... RTFM. Vielen Dank!
Brendon Dugan
15
This account is currently not available.
Wenn
Ich bekomme auch diesen Fehler, aber die Antwort von futbolsalas15 unten funktioniert einwandfrei.
Andrew
18
Verwenden Sie su - www-data -s /bin/bash -c 'your_command', um diese Arbeit zu machen. Der Benutzer www-data hat eine Shell, /usr/sbin/nologinso dass es ohne den -sParameter zur Fehlermeldung kommt.
Petr
63

Mit 'su' wird wahrscheinlich das Passwort abgefragt, und www-data hat kein Passwort. Ich empfehle den Befehl sudo:

 sudo -u www-data command

Voraussetzung ist, dass Ihr Benutzer root ist oder in der sudoers-Datei konfiguriert ist

futbolsalas15
quelle
4
Wow, warum ist das nicht die gewählte Antwort? Ich habe viel zu lange gebraucht, um das zu finden.
Captain Hypertext
3

Verwendung su:

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.
MikeyB
quelle
2
Es ist zu beachten, dass su-Befehle nicht mit Konten funktionieren, für die Anmeldungen deaktiviert sind (z. B. www-data). Sie müssen sudo verwenden.
Frantumn
2

2 Mögliche Ansätze :


1) sudoBefehl:

In den meisten Fällen haben Sie Zugriff auf den sudoBefehl. Die Lösung lautet also einfach:

sudo -u target_user target_command


2) suBefehl (falls sudo nicht installiert ist Ex. alpine-linux images):

su - target_user -c 'target_command'

Falls Sie die Fehlermeldung "Dieses Konto ist derzeit nicht verfügbar" erhalten , ist für den Benutzer eine Richtlinie ohne Anmeldung (Shell-Zugriff) in Kraft. Wenn ja, erwägen Sie die Verwendung von:

su - target_user -s /bin/bash -c 'target_command'

(Basierend auf @Petrs wertvollem Kommentar zum -sFlag, um www-datadie Richtlinie für Benutzer ohne Anmeldung zu berücksichtigen )

Iceman
quelle