Debian, useradd, bash et compgen
2010-11-29
Thomas Martin
J'ai rencontré un problème étrange sur un serveur ce jour-ci : sur un
compte nouvellement créé, la complétion bash échouait avec une erreur :
-sh: <( compgen -d -- '' ): No such file or directory
-sh: <( compgen -f -X -- '' ): No such file or directory
Après quelques recherches et l'aide de serverfault, voilà la cause du
problème :
- J'ai utilisé la commande useradd(8) pour créer le compte. C'est
une vieille habitude que je devrais éliminer sous Debian, car la page
de man de useradd(8) stipule que : On Debian, administrators
should usually use adduser(8) instead.
- useradd(8) consulte le fichier /etc/logins.def pour
identifier le shell par défaut à positionner, et il s'agit de
/bin/sh. Avec adduser(8), cela aurait été /bin/bash,
d'après /etc/adduser.conf.
- /bin/sh est un lien vers bash, mais bash change de comportement
lorsqu'il est invoqué avec le nom sh. D'après la page de man :
If bash is invoked with the name sh, it tries to mimic the startup
behavior of historical versions of sh as closely as possible.
- Dans ce mode, la complétion fonctionne mal, et provoque le problème
en question !
Conclusion : changer le shell de l'utilisateur par /bin/bash, et
le problème est résolu !