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?

Beznadziejny
źródło

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:~$ 

źródło
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!

Hans
źródło
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.

lorenzog
źródło
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

Wierzę, że możesz zmienić powłokę użytkownika w /etc/passwordpliku, prawdopodobnie za pomocą passwdpolecenia. Jeszcze go nie przeczytałem, ale może to być przydatne: różnice w powłokach UNIX i sposób zmiany powłoki .

David Dean
źródło
Polecenia to chshlub usermod. Nigdy nie edytuj passwdpliku bezpośrednio, zawsze używaj do tego vipwpolecenia.
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ę :)
dimpiax
źródło
To faktycznie ustawi Zsh jako domyślny terminal dla użytkownika root.
lcguida,
@lcguida w prawo.
dimpiax