Zmień domyślną powłokę, gdy użytkownik nie znajduje się w / etc / passwd

8

Jakieś pomysły na to, jak mogę zmienić muszlę na rybę?

$ sudo usermod -s /usr/bin/fish jaan
usermod: user 'jaan' does not exist in /etc/passwd
$ getent passwd $USER
jaan:x:15466:94:Jaan Altosaar:/home/jaan:/bin/zsh

Powiązane pytania: użytkownik nie istnieje w / etc / passwd podczas próby zmiany domyślnej powłoki Wydaje się, że używa ldap.

$ cat /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

# Having the NOTFOUND=return bit was breaking dns resolution on web1 and web2. But we probably
# don't want any of the mdns stuff so let's get rid of it all.
#hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
hosts:          files dns

networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       ldap
automount:      ldap

Więc zainstalowałem odpowiedni pakiet ldap.

$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: /usr/bin/fish
Traceback (most recent call last):
  File "/usr/bin/chsh.ldap", line 69, in <module>
    constants.NSLCD_USERMOD_SHELL: shell,
  File "/usr/share/nslcd-utils/nslcd.py", line 128, in usermod
    assert con.get_response() == constants.NSLCD_RESULT_BEGIN
  File "/usr/share/nslcd-utils/nslcd.py", line 103, in get_response
    return self.read_int32()
  File "/usr/share/nslcd-utils/nslcd.py", line 71, in read_int32
    return _int32.unpack(self.read(_int32.size))[0]
struct.error: unpack requires a string argument of length 4
$ which fish
/usr/bin/fish
$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: "/usr/bin/fish"
/usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell
$ /usr/bin/fish
(standard_in) 1: syntax error
Welcome to fish, the friendly interactive shell
Abhishek Bhatia
źródło
Czy to w ogóle możliwe?
George Udosen
@ George, sprawdź edycję.
Abhishek Bhatia
Spójrz na to unix.stackexchange.com/questions/253833/…
George Udosen
@George to nie działa.
Abhishek Bhatia
Ścieżka powłoki powinny być /etc/shellsdla chsh-Jak narzędzi, aby ją zaakceptować.
muru

Odpowiedzi:

1

Oto podpowiedź: /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. Wydaje się, że powinieneś dodać /usr/bin/fishdo /etc/shells.

pim
źródło
Haha kochana, chsh.ldap -s /usr/bin/zsh myusernamedaje mi Segmentation fault.
jchook
Następnie należy to zgłosić tutaj: launchpad.net/ubuntu/+source/nss-pam-ldapd/+bugs
pim
1

Zaczekaj, to użytkownik LDAP, w LDAP jest ustawienie, które pozwala zmienić domyślną powłokę dla tego użytkownika.

Możesz zainstalować ldap-account-manager, który daje stronę internetową do konfiguracji ldap.

apt install ldap-account-manager

wprowadź opis zdjęcia tutaj

Można to zrobić na dowolnym serwerze, na którym chcesz obsłużyć konfigurację. Ponieważ i tak będziesz musiał skonfigurować serwer w plikach konfiguracyjnych. Ale polecam zainstalowanie go na serwerze, na którym faktycznie działa ldap, żebyś mógł łatwiej zapamiętać.

Ziazis
źródło
-1

Aby zacytować tutaj ajmitcha ,

Możesz ustawić rybę jako domyślną powłokę, uruchamiając chsh -s which fish Następnie wyloguj się i zaloguj ponownie. (Aby ustawić ją z powrotem na bash, musisz oczywiście użyć składni Fish, podobnie jak ten chsh -s (który bash))

Wystarczy użyć chsh -s which fishi upewnij się, że wylogujesz się i zaloguj ponownie lub ponownie uruchom komputer.

Nawiasem mówiąc, może to być możliwy duplikat: Jak ustawić rybę jako domyślną powłokę?

Max
źródło
Hmm..chsh działa tylko wtedy, gdy użytkownik w / etc / passwd. $ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Abhishek Bhatia
Ach ... tak ... Nie widziałem tej części ...
Max
1
To nie działa, gdy kontami zarządza LDAP. -1
David Foerster,