web-dev-qa-db-fra.com

Comment vérifier que mes utilisateurs et groupes sont corrects?

J'ai de nombreux périphériques sous Ubuntu autour de moi.

Pour autant que je sache, /etc/group, /etc/passwd, /etc/shadow sont créés lors de l'installation, ils n'appartiennent donc à aucun package:

$ dpkg -S /etc/passwd
dpkg-query: no path found matching pattern /etc/passwd
$ dpkg -S /etc/shadow
dpkg-query: no path found matching pattern /etc/shadow
$ dpkg -S /etc/group
dpkg-query: no path found matching pattern /etc/group

Ma question est dans le titre - Comment vérifier que mes utilisateurs et groupes sont corrects? Que faire si j'ai mal orthographié ou modifié quelque chose à la main dans de tels fichiers?

2
N0rbert

1. Approche de base

J'ai trouvé un paquet très utile pour une telle opération. Il s'appelle base-passwd et a la description suivante:

_$ apt-cache show base-passwd   
Package: base-passwd  
...  
Description-en: Debian base system master password and group files  
 These are the canonical master copies of the user database files  
 (/etc/passwd and /etc/group), containing the Debian-allocated user and  
 group IDs. The update-passwd tool is provided to keep the system databases  
 synchronized with these master files.
_

Les fichiers maîtres (dans la terminologie susmentionnée) sont placés dans:

  • _/usr/share/base-passwd/group.master_
  • _/usr/share/base-passwd/passwd.master_

Le package contient un seul binaire _/usr/sbin/update-passwd_.
Son objectif est décrit dans la page de manuel ( man update-passwd ):

LA DESCRIPTION
_update-passwd_ gère les mises à jour de _/etc/passwd_, _/etc/shadow_ et _/etc/group_ sur les systèmes Debian en cours d'exécution. Il compare les fichiers actuels aux copies maîtres, distribuées dans le package _base-passwd_, et met à jour toutes les entrées de la plage système globale (c'est-à-dire, 0 à 99).

Pour le problème de la question, nous devons exécuter:

_Sudo update-passwd --sanity-check --verbose
_

Vous pouvez aussi essayer de lancer la simulation (essai à sec):

_$ Sudo update-passwd --sanity-check --verbose --dry-run
Reading passwd from /usr/share/base-passwd/passwd.master
Reading group from /usr/share/base-passwd/group.master
Reading passwd from /etc/passwd
Reading shadow from /etc/shadow
Reading group from /etc/group
_

Si vous exécutez sans arguments, vous mettrez à jour _/etc/passwd_, _/etc/shadow_ et _/etc/group_ (__ SOMECODE) __ ou vous arrêterez tranquillement:

_$ Sudo update-passwd
$ Sudo update-passwd --verbose
No changes needed
_

L'utilitaire couvre 39 groupes standard - adm , audio , backup , bin , cdrom , démon , dialout , dip , disque , fax , disquette , jeux , gnats , irc , kmem , liste , lp , mail , man , nouvelles , nogroup , opérateur , plugdev , proxy , racine , sasl , ombre , src , personnel , Sudo , sys , bande , tty , utilisateurs , utmp , uucp , vidéo , voix , www-data .

On peut lire la documentation locale sur les groupes standard dans _/usr/share/doc/base-passwd/users-and-groups.html_ (ou en ligne ).

2. Approche plus profonde

Attention: ne continuez pas si vous n'êtes pas sûr de ce que vous faites ou si vous êtes débutant.

Commencer avec

_Sudo update-passwd --verbose
_

et ensuite, si vous avez installé un autre logiciel à partir de référentiels puis mis à la corbeille votre _/etc/passwd_ et/ou _/etc/group_, vous pouvez essayer de réinstaller tous ces packages avec avec la commande basé sur suggestion de @ mur :

_Sudo apt-get install --reinstall \
$(grep -RlE '(getent|useradd|adduser|groupadd|addgroup|chrgp|chmod|gpasswd|usermod)' \
/var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-a-z]+inst:\1:')
_

2.1. Cassé _/etc/group_

Si vous avez supprimé des entrées de _/etc/group_, vous serez confronté à des messages d'erreur

_dpkg: unrecoverable fatal error, aborting:
 unknown group 'crontab' in statoverride file
E: Sub-process /usr/bin/dpkg returned an error code (2)
_

Vous devez supprimer les lignes correspondantes de _/var/lib/dpkg/statoverride_ et _/etc/passwd_ puis réessayer avec la commande ci-dessus.

Un autre message d'erreur possible est

_E: Internal Error, No file name for dbus:AMD64
_

Vous pouvez résoudre ce problème en téléchargeant le package manuellement:

_apt-get download dbus
Sudo dpkg -i dbus*.deb
_

et essayez à nouveau avec la commande ci-dessus.

Si vous avez supprimé des groupes liés à systemd systemd-journal , systemd-timesync , systemd-network , systemd-resol , procd-bus-proxy à partir de /etc/groupez puis supprimez-les de _/etc/passwd_ et réinstallez le paquet systemd avec

_Sudo apt-get install --reinstall systemd
_

puis réessayez avec la commande ci-dessus

2.2. Cassé _/etc/passwd_

Si vous avez supprimé des entrées de _/etc/passwd_, vous serez confronté à des messages d'erreur

_dpkg: unrecoverable fatal error, aborting:
 unknown user 'hplip' in statoverride file
_

Vous devez supprimer la ligne correspondante de _/var/lib/dpkg/statoverride_, puis réessayer avec la commande ci-dessus.

2
N0rbert