Thomas Martin I/O

Programming, Sysadmin, Open Source

Debian, useradd, bash et compgen

2010-11-29 SYSADMIN DEBIAN


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 !