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.