À l'origine, les utilisateurs devaient correspondre à un humain utilisant le système, d'où le nom. Chaque processus s'exécute en tant qu'utilisateur particulier et chaque fichier appartient à un utilisateur particulier. Un utilisateur spécial, appelé root, est utilisé pour des choses qui n'appartiennent à aucun utilisateur humain particulier, c'est-à-dire le système d'exploitation lui-même. Étant donné que root correspond au système d'exploitation lui-même, il dispose de tous les privilèges.
Bientôt, les gens ont trouvé qu'il était pratique de créer plusieurs utilisateurs du système, sans privilèges étendus. Cela permet d'isoler les différents services qui s'exécutent sur une machine, afin qu'ils ne marchent pas les uns sur les autres. Un compte de service (ou «compte système», ces deux termes sont synonymes) est celui qui correspond à un service exécuté sur le système, plutôt qu'à une personne utilisant le système. Vous avez généralement un compte de service pour chaque tâche exécutée sur le système qui possède son propre ensemble de privilèges (par exemple ses propres fichiers, ses propres ports réseau, etc.).
Il n'y a pas de définition formelle du compte humain vs système / service. Le noyau s'en fiche (à part l'octroi de nombreux privilèges à l'utilisateur avec l'UID 0). La plupart des commandes d'administration ne se soucient pas non plus. Certaines différences typiques sont:
- Un utilisateur humain a un vrai nom comme «John Doe», tandis qu'un utilisateur système a un nom descriptif comme «démon nasal» ou aucun.
- Un utilisateur humain a un véritable shell de connexion (par exemple
/bin/sh
ou /bin/bash
ou /bin/csh
. Certains utilisateurs du système ont un shell (presque toujours /bin/sh
), d'autres pas, selon la façon dont ils sont destinés à être utilisés (par exemple, su foo
nécessitefoo
d'avoir un shell).
- Un utilisateur humain a souvent un mot de passe - mais ce n'est pas toujours le cas, par exemple un utilisateur distant uniquement peut ne disposer que d'une clé SSH. Notez que sur les unités modernes, le mot de passe n'est pas dans
/etc/passwd
mais dans un autre fichier tel que/etc/shadow
.
- Le répertoire de base d'un utilisateur humain est généralement sous
/home
(ou un emplacement spécifique au site), tandis que le répertoire de base d'un utilisateur système n'est généralement pas sous/home
et peut ne pas exister (mais il existe des exceptions).
- La plupart des sites désignent une plage d'ID utilisateur pour les utilisateurs du système et une plage disjointe pour les utilisateurs humains. La réservation de 100–65533 ou 500–65533 ou 1000–65533 est typique, et la plupart des distributions sont configurées pour commencer à allouer des ID utilisateur réels à partir de 500 ou 1000.
Sur les sites où les comptes sont partagés sur plusieurs machines, il existe généralement un serveur central qui contient des listes d'utilisateurs, accessibles via NIS ou LDAP . L' passwd
entrée dans /etc/nsswitch.conf
spécifie où trouver les informations utilisateur. Il est courant d'avoir des utilisateurs du système au niveau local/etc/passwd
et réels de la base de données à l'échelle du réseau, mais parfois il y a des utilisateurs système dans la base de données à l'échelle du réseau (pour appliquer des UID cohérents, ce qui facilite la réplication du serveur et des données), et parfois il y a utilisateurs humains dans le fichier local (pour leur permettre de se connecter même lorsque le réseau est arrosé).
Un compte accessible à l'homme déguisé en utilisateur système n'aurait généralement pas de vrai nom, mais aurait un shell de connexion, et soit un mot de passe, soit une clé SSH, tout en ayant un ID utilisateur dans la plage système. En fait, ce serait un meilleur déguisement d'utiliser un compte système réel dont la suppression entraînerait l'arrêt de certains services. Mais vous ne pouvez pas avoir de règles strictes pour détecter les attaques potentielles: par définition, les attaquants ne suivent pas les règles.
Les comptes de service et les comptes humains sont gérés par les mêmes commandes et enregistrés dans les mêmes fichiers. Les commandes de création de compte peuvent avoir des options pour définir des valeurs par défaut raisonnables pour les utilisateurs humains vs services, par exemple pour choisir un ID utilisateur dans la plage appropriée, et pour demander un mot de passe pour un humain et désactiver l'authentification par mot de passe pour un service. Par exemple, adduser
vs adduser --system
ou useradd
vs useradd -r
sous Linux.