Ganti shell default saat pengguna tidak di / etc / passwd

8

Ada ide tentang bagaimana saya bisa mengganti shell menjadi ikan?

$ 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

Pertanyaan terkait: pengguna tidak ada di / etc / passwd ketika mencoba mengubah shell default. Sepertinya ia menggunakan 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

Jadi saya menginstal paket yang relevan 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
sumber
Apakah itu mungkin?
George Udosen
@ George silakan periksa edit.
Abhishek Bhatia
@ George ini tidak berhasil.
Abhishek Bhatia
Shell jalan harus dalam /etc/shellsuntuk chsh-seperti alat untuk menerimanya.
muru

Jawaban:

1

Berikut adalah petunjuk: /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. Tampaknya Anda harus menambahkan /usr/bin/fishuntuk /etc/shells.

pim
sumber
Haha cantik, chsh.ldap -s /usr/bin/zsh myusernameberi aku Segmentation fault.
jchook
Maka itu harus dilaporkan di sini: launchpad.net/ubuntu/+source/nss-pam-ldapd/+bugs
pim
1

Tunggu, ini adalah pengguna LDAP, ada pengaturan di LDAP yang memungkinkan Anda untuk mengubah shell default untuk pengguna di dalamnya.

Anda dapat menginstal ldap-akun-manajer yang memberi Anda webfrontent untuk konfigurasi ldap.

apt install ldap-account-manager

masukkan deskripsi gambar di sini

Ini dapat dilakukan pada server mana pun yang Anda inginkan untuk menangani konfigurasi. Karena Anda perlu mengkonfigurasi server dalam file konfigurasi. Tetapi saya akan merekomendasikan Anda menginstalnya di server yang memiliki ldap benar-benar berjalan, supaya Anda dapat mengingatnya lebih mudah.

Ziazis
sumber
-1

Mengutip ajmitch di sini ,

Anda dapat mengatur ikan sebagai shell default Anda dengan menjalankan chsh -s which fish Kemudian logout dan kembali. (Untuk mengaturnya kembali ke bash, Anda perlu menggunakan sintaksis Ikan tentu saja, seperti ini chsh -s (yang bash))

Cukup gunakan chsh -s which fishDan pastikan untuk keluar dan masuk kembali atau nyalakan kembali komputer Anda.

Ngomong-ngomong, ini bisa menjadi duplikat yang mungkin di sini: Bagaimana cara menetapkan ikan sebagai shell default?

Maks
sumber
Hmm..chsh hanya berfungsi jika pengguna di / etc / passwd. $ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Abhishek Bhatia
Ah ... ya ... Saya tidak melihat bagian itu ...
Maks
1
Itu tidak berfungsi ketika akun dikelola oleh LDAP. -1
David Foerster