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ć?
This account is currently not available.
su - www-data -s /bin/bash -c 'your_command'
aby to zadziałało. Użytkownik www-data ma powłokę,/usr/sbin/nologin
więc bez-s
parametru prowadzi do komunikatu o błędzie.Słowo „su” prawdopodobnie oznacza żądanie hasła, a dane www nie mają hasła. Polecam polecenie
sudo
:Warunkiem jest, aby użytkownik był rootem lub był skonfigurowany w pliku sudoers
źródło
Użyj
su
:źródło
2 Możliwe podejścia :
1)
sudo
polecenie:W większości przypadków będziesz miał dostęp do
sudo
polecenia, więc rozwiązaniem jest po prostu:sudo -u target_user target_command
2)
su
polecenie (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
-s
flagi, aby uwzględnićwww-data
zasady braku logowania użytkownika)źródło