BASH Scripting, su do www-data dla pojedynczego polecenia


26

Pracuję nad automatyzacją tworzenia repozytoriów subversion i powiązanych stron internetowych, jak opisano w tym poście na blogu, który napisałem . Mam problem z częścią, w której zwracam się do użytkownika danych www, aby uruchomić następującą komendę:

svnadmin create /svn/repository

Na początku skryptu znajduje się kontrola, która zapewnia, że ​​działa on jako root lub sudo, a wszystko po tym jednym poleceniu musi być uruchomione jako root. Czy istnieje dobry sposób, aby uruchomić to polecenie jako dane www, a następnie przełączyć się z powrotem na root, aby zakończyć?

Odpowiedzi:


24

Wystarczy użyć su - www-data -c 'svnadmin create /svn/repository'w skrypcie uruchamianym przez root. Tak więc użytkownik www-data uruchamia tylko to polecenie.


Aktualizacja dla przyszłych przeglądających :

W przypadku wystąpienia "This account is currently not available"błędu rozważ użycie:

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

(Cenna wzmianka @Petr na temat -sflagi w celu dostosowania się www-datado polityki braku logowania użytkownika)


1
Tak, wygląda na to, że zapomniałem podstawowej zasady skryptowania ... RTFM. Dzięki!
Brendon Dugan

15
Próbując tego, otrzymuję błądThis account is currently not available.
rubo77

Dostaję również ten błąd, ale poniższa odpowiedź futbolsalas15 działa dobrze.
Andrew

18
Użyj, su - www-data -s /bin/bash -c 'your_command'aby to zadziałało. Użytkownik www-data ma powłokę, /usr/sbin/nologinwięc bez -sparametru prowadzi do komunikatu o błędzie.
Petr

63

Słowo „su” prawdopodobnie oznacza żądanie hasła, a dane www nie mają hasła. Polecam polecenie sudo:

 sudo -u www-data command

Warunkiem jest, aby użytkownik był rootem lub był skonfigurowany w pliku sudoers


4
Wow, dlaczego nie jest to wybrana odpowiedź? Zbyt długo zajęło mi to znalezienie.
Kapitan Hypertext

3

Użyj 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.

2
Należy zauważyć, że polecenia su nie działają z kontami, które mają wyłączone logowanie (np. Www-data). Musisz użyć sudo.
Frantumn

2

2 Możliwe podejścia :


1) sudopolecenie:

W większości przypadków będziesz miał dostęp do sudopolecenia, więc rozwiązaniem jest po prostu:

sudo -u target_user target_command


2) supolecenie (jeśli sudo nie jest zainstalowane. Ex. alpine-linux images):

su - target_user -c 'target_command'

W przypadku pojawienia się błędu „To konto jest obecnie niedostępne” , użytkownik stosuje zasady braku logowania (dostępu do powłoki). Jeśli tak, rozważ użycie:

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

(Na podstawie cennego komentarza @Petr na temat -sflagi, aby uwzględnić www-datazasady braku logowania użytkownika)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.