Zmiana powłoki (za pomocą chsh) za pomocą wiersza poleceń w skrypcie


11

W skrypcie uruchamiania, który konfiguruje maszynę, chcę uruchomić

chsh -s /bin/zsh

To jednak wymaga podania hasła użytkownika. Jak podać hasło jako parametr? A jeśli mam moc sudo, czy mogę jakoś ominąć ten krok? Lub alternatywnie, czy istnieje inny sposób zmiany domyślnej powłoki startowej?

Odpowiedzi:


21

Poniższe informacje uniemożliwiają zablokowanym kontom zmianę ich powłok i pozwalają wybiórczo korzystać z chshnich BEZ sudo lub su:

Prosta i wciąż bezpieczna konfiguracja:

  1. Dodaj tę samą górę /etc/pam.d/chsh:

    # This allows users of group chsh to change their shells without a password.
    #
    # Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
    #
    auth       sufficient   pam_wheel.so trust group=chsh
    
  2. Utwórz grupę chsh:

    groupadd chsh
    

Dla każdego użytkownika, który może zmienić swoją powłokę:

    usermod -a -G chsh username

Zastrzyk gotówki:

user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$ 

Działające rozwiązanie, zastanawiam się, czy nadal nie jest to akceptowane.
dimpiax,

Dzięki. Wydaje się, że jest to najczystszy sposób, aby użytkownik korzystający z powłoki uwierzytelniającej tylko z kluczem zmienił powłokę bez sudo. Te pam.d są bardzo interesujące!
François Drolet

4

chsh tak naprawdę zmienia linię dotyczącą użytkownika w / etc / passwd, chociaż użytkownik może zmienić swoją własną „linię” w / etc / passwd. Dlatego jeśli chcesz zmienić powłokę dla innego użytkownika, potrzebujesz jego / jej hasła.

Jeśli naprawdę chcesz to zrobić (biorąc pod uwagę obawy zawarte w poście Lorenza i możliwe obawy dotyczące bezpieczeństwa), oto jak to zrobić:

#visudo

Wymaga to uprawnień roota.

Załóżmy, że obecnie działasz jako „alicja” i chcesz zmienić powłokę „boba” bez hasła;

Dodaj do pliku:

Cmnd_Alias     SHELL = /usr/bin/chsh
Runas_Alias    SH    = Bob
alice          ALL   = (SH) NOPASSWD: SHELL

Dzięki temu „alicja” może działać na wszystkich hostach jako użytkownicy w grupie SH bez hasła grupy poleceń w SHELL.

Prawdopodobnie trochę za daleko, aby to zrobić, ale jest to możliwe.

Przeczytaj „man sudoers” przed zmianą pliku sudores za pomocą „visudo”, zwłaszcza wiadomości związanych z bezpieczeństwem!


Problem sudopolega na tym, że bardzo łatwo jest ominąć i zrootować system. Lepiej nigdy nie zmieniać, sudoerschyba że istnieje konkretna potrzeba, której nie można zaspokoić w żaden inny sposób (plik wykonywalny setuid / setgid, uprawnienia grupy itp.).

2

Musisz podać nazwę użytkownika; robienie tego przez sudo(lub przez roota) pozwoli ci ustawić hasło / powłokę użytkownika bez pytania o stare hasło. Sprawdź man chshdalsze informacje.

Teraz moje pytanie brzmi: dlaczego chcesz to zrobić? Jeśli jest to skrypt konfiguracyjny, czy nie powinieneś po prostu zmienić powłoki użytkownika podczas tworzenia (tj. Podczas uruchamiania adduser)? Jeśli klonujesz system zdalnie, nie powinieneś go /etc/passwdnajpierw zmieniać ? Nie widzę powodów, aby robić to za pomocą skryptu, chyba że zautomatyzujesz cały proces instalacji, a wybór powłok do zainstalowania nastąpi po utworzeniu pierwszego użytkownika.


To jest dla komputera ec2 (skrypt, który uruchamiam zaraz po uruchomieniu komputera). Chcę zmienić domyślną powłokę początkową. Wykonywanie polecenia „sudo chsh -s / bin / zsh nazwa_użytkownika” również nie działa (nadal prosi o hasło użytkownika)

spróbuj użyć skryptu i użyj #!/usr/bin/sudo -s(linia shebang). Jesteś pewien, że zsh jest w / bin, a może nie w / usr / bin? (tylko sprawdzam, nie znam ec2)
lorenzog

Ta odpowiedź jest niepełna, ponieważ zakłada sudozgodę. Zobacz moje, by zobaczyć inne podejście, które nie wymaga sudoprzeciętnego użytkownika.


0

Spróbuj sudo chsh -s /bin/zsh, a następnie:

  1. wyjście na serwer
  2. uruchom ponownie terminal
  3. zaloguj się do serwera i sprawdź przez echo $SHELL- w przypadku powodzenia zmieniło się :)

To faktycznie ustawi Zsh jako domyślny terminal dla użytkownika root.
lcguida,

@lcguida w prawo.
dimpiax
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.