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


Ich arbeite daran, die Erstellung von Subversion-Repositories und zugehörigen Webseiten zu automatisieren, wie in diesen Blogbeitrag schrieb ich. Ich stoße auf Probleme in dem Bereich, in dem ich su auf den Benutzer www-data, um den folgenden Befehl auszuführen:

svnadmin create /svn/repository

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


25
2018-05-10 18:03


Ursprung




Antworten:


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


Update für zukünftige Zuschauer:

Falls Sie eine "This account is currently not available" Fehler, in Betracht ziehen mit:

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

(@Petrs wertvolle Erwähnung über -s Flagge unterbringen www-data Benutzer keine Login-Richtlinie)


18
2018-05-10 18:07



Ja, es scheint, ich habe eine Grundregel des Skripts vergessen ... RTFM. Vielen Dank! - Brendon Dugan
Versucht dies, bekomme ich den Fehler This account is currently not available. - rubo77
Ich bekomme auch diesen Fehler, aber die Antwort von futbolsolas15 funktioniert gut. - Andrew
Benutzen su - www-data -s /bin/bash -c 'your_command' um das zu schaffen. Benutzer www-data hat Shell /usr/sbin/nologin also ohne die -s Parameter führt zu der Fehlermeldung. - Petr


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

 sudo -u www-data command

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


57
2018-01-10 20:04



Wow, warum ist das nicht die ausgewählte Antwort? Nahm mich viel zu lange um das zu finden. - Captain Hypertext


Benutzen 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.

3
2018-05-10 18:07



Es sollte beachtet werden, dass su-Befehle nicht mit Konten funktionieren, die Logins deaktiviert haben (z. B. www-data). Sie müssen Sudo verwenden. - Frantumn


2 Mögliche Ansätze:


1) sudo Befehl:

In den meisten Fällen haben Sie Zugriff auf die sudo Befehl und so ist die Lösung einfach:

sudo -u target_user target_command


2) su Befehl (wenn Sudo nicht installiert ist. Ex. alpine-linux images):

su - target_user -c 'target_command'

Falls Sie eine 'Dieses Konto ist derzeit nicht verfügbar' Fehler, der Benutzer hat eine No Login (Shell Access) -Richtlinie in Kraft. Wenn ja, überlege dir,

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

(Basierend auf @Petrs wertvollem Kommentar über -s Flagge unterbringen www-data Benutzer keine Login-Richtlinie)


0
2018-05-06 13:39