Changer le shell par défaut lorsque l'utilisateur n'est pas dans / etc / passwd

8

Des idées sur la façon de changer la coquille en poisson?

$ 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

Questions connexes: l' utilisateur n'existe pas dans / etc / passwd lors de la tentative de modification du shell par défaut Il semble qu'il utilise 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

J'ai donc installé le paquet approprié 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
la source
Est-ce que c'est possible?
George Udosen
@George, veuillez vérifier la modification.
Abhishek Bhatia
@George cela ne fonctionne pas.
Abhishek Bhatia
Le chemin du shell doit être dans /etc/shellsdes chshoutils similaires pour l'accepter.
muru

Réponses:

1

Voici un indice: /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. Il semble que vous devez ajouter /usr/bin/fishà /etc/shells.

pim
la source
Haha charmant, chsh.ldap -s /usr/bin/zsh myusernameme donne un Segmentation fault.
jchook
Ensuite, il devrait être signalé ici: launchpad.net/ubuntu/+source/nss-pam-ldapd/+bugs
pim
1

Attendez, c'est un utilisateur LDAP, il y a un paramètre dans LDAP qui vous permet de changer le shell par défaut de l'utilisateur en eux.

Vous pouvez installer ldap-account-manager qui vous donne un webfrontent pour la configuration ldap.

apt install ldap-account-manager

entrez la description de l'image ici

Cela peut être fait sur n'importe quel serveur sur lequel vous souhaitez gérer la configuration. Puisque vous devrez de toute façon configurer le serveur dans les fichiers de configuration. Mais je vous recommande de l'installer sur le serveur sur lequel le ldap fonctionne réellement, juste pour que vous vous en souveniez plus facilement.

Ziazis
la source
-1

Pour citer ajmitch ici ,

Vous pouvez définir fish comme shell par défaut en exécutant chsh -s which fish puis vous déconnecter et vous reconnecter.

Utilisez simplement chsh -s which fishEt assurez-vous de vous déconnecter et de vous reconnecter ou de redémarrer votre ordinateur.

Soit dit en passant, cela pourrait être un double possible ici: Comment puis-je définir le poisson comme shell par défaut?

Max
la source
Hmm..chsh ne fonctionne que si l'utilisateur dans / etc / passwd. $ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Abhishek Bhatia
Ah ... oui ... je n'en ai pas vu la partie ...
Max
1
Cela ne fonctionne pas lorsque les comptes sont gérés par LDAP. -1
David Foerster