J'utilise un système de bureau Ubuntu 12.04. Jusqu'à présent, je n'ai installé que quelques programmes (j'ai des droits sudo).
Lorsque je vérifie la liste des utilisateurs du système, je vois une longue liste, comme plus de 20 utilisateurs - quand ces utilisateurs ont-ils été créés (par exemple, démon, sys, synchronisation, jeux, pouls, etc.)? Comment sont-ils liés aux nouveaux programmes installés?
Si j'exécute un programme sur mon système, il devrait s'exécuter avec mon UID. Mais en faisant un ps , je vois de nombreux autres programmes fonctionnant avec différents UID (comme root, daemon, avahi, syslog, colord, etc.) - comment ces programmes ont-ils démarré avec différents UID?
Réponses:
Les comptes d'utilisateurs sont utilisés non seulement pour les utilisateurs humains réels, mais également pour exécuter les services système et parfois en tant que propriétaires de fichiers système. Cela est dû au fait que la séparation entre les ressources des utilisateurs humains (processus, fichiers, etc.) et la séparation entre les ressources des services système nécessitent les mêmes mécanismes sous le capot.
Les programmes que vous exécutez s'exécutent normalement avec votre ID utilisateur. Seuls les démons système s'exécutent sous leur propre compte. Soit le fichier de configuration qui indique quand exécuter le démon indique également quel utilisateur doit l'exécuter, soit le démon passe à un compte non privilégié après le démarrage. Certains démons nécessitent des privilèges administratifs complets, ils s'exécutent donc sous le compte root . De nombreux démons n'ont besoin d'accéder qu'à un périphérique matériel spécifique ou à des fichiers spécifiques, ils s'exécutent donc sous un compte utilisateur dédié. Cela est fait pour la sécurité: de cette façon, même s'il y a un bogue ou une mauvaise configuration dans l'un de ces services, cela ne peut pas conduire à une attaque complète du système, car l'attaquant sera limité à ce que ce service peut faire et ne sera pas capable d'écraser des fichiers, d'espionner des processus, etc.
Sous Ubuntu, les ID utilisateur compris entre 0 et 99 sont créés lors de l'installation du système. 0 est root; la plupart de celles comprises entre 1 et 99 n'existent que pour des raisons historiques et ne sont conservées qu'à des fins de compatibilité avec certaines installations locales qui les utilisent (quelques entrées supplémentaires ne font pas de mal). Les ID utilisateur compris entre 100 et 999 sont créés et supprimés dynamiquement lorsque des services nécessitant un ID utilisateur dédié sont installés ou supprimés. La plage à partir de 1000 est réservée aux utilisateurs humains ou à tout autre compte créé par l'administrateur système. Il en va de même pour les groupes.
la source
Je suppose que vous trouvez cette liste d'utilisateurs en vérifiant
/etc/passwd
? C'est tout à fait normal - les `` utilisateurs '' servent à transporter un ensemble d'autorisations, utiles pour verrouiller non seulement les `` utilisateurs réels '' mais aussi des programmes dans certaines zones de votre système et suivre ce qu'ils ont changé (même concept avec les groupes).J'ai inséré un de mes
/etc/passwd
fichiers Raspberry Pi ci-dessous pour référence; vous remarquerez l'utilisateurntop
au bas de ce fichier, créé par le programmentop
(surveillance du réseau). De mêmesshd
,gnats
les rapports de bogues, etc.la source
dpkg --get-selections | grep -v deinstall
et le comparer avec la liste d'utilisateurs de votre fichier / etc / passwd si vous le souhaitez. Quant à votre question: "... comment ces programmes sont-ils exécutés avec diff UID", vous pouvez essayer vous-même. Écrivez un script bash aléatoiretest_file
qui contient quelque chose d'inoffensif (echo "Test"
). Ensuitesudo chmod 755 test_file
(donc il est lisible et exécutable par n'importe qui et lisible, inscriptible et exécutable par le propriétaire) puissudo chown nobody
qui l'assignera à l'utilisateurnobody
. Ensuite, lancez-le. Le «programme»test_file
vient de s'exécuter avec l'UIDnobody
.nobody
UID, mais il a fonctionné avec votre UID; vous devez en faire un fichier SUID pour ce faire, mais le bit SUID est supprimé si le fichier est exécuté avec un interpréteur.dpkg
bit est toujours utile (espérons-le) veuillez ne pas tenir compte de la partie sur le faire fonctionner vous-même! Soit allez avec SUID ou connectez-vous en tant qu'utilisateur différent pour que cela ait du sensDans le cas de ceux que vous avez mentionnés, ils ont été créés lors de l'installation du système. Ces comptes d'utilisateurs sont classiques, certains remontant à des décennies. Ils sont également standardisés. La base standard Linux les divise en:
root
,bin
etdaemon
; etadm
,lp
,sync
,shutdown
,halt
,mail
,news
,uucp
,operator
,man
etnobody
D' autres comptes d'utilisateurs qui sont mentionnés ici -
pulse
,avahi
,colord
etDebian-exim
(choisir un à partir du fichier de mot de passe py4on) - nous amener à la question suivante.Les comptes d'utilisateurs non standard sont créés et détruits par les «scripts de maintenance» pour divers packages, au fur et à mesure que ces packages sont installés et purgés. Un compte d'utilisateur sera créé par le soi-disant
postinst
script de maintenance du package , qui s'exécutegetent
pour voir si le compte d'utilisateur existe déjà etuseradd
s'il ne l'est pas. En théorie, il serait supprimé par le soi-disantpostrm
script de maintenance du package , en cours d'exécutionuserdel
.En pratique, les comptes d'utilisateurs des packages ne sont pas supprimés. Le wiki Fedora (qv) explique que cela serait très difficile. Voir le bogue Debian # 646175 pour un exemple de cette justification en action, où il est simplement décidé de ne pas supprimer le
rabbitmq
compte utilisateur lorsque le paquet est purgé, pour résoudre un problème avec un démon qui continue de fonctionner sous l'égide de ce compte.Sous Unix et Linux, un processus exécuté sous l'égide du superutilisateur peut changer son compte d'utilisateur en quelque chose d'autre et continuer à exécuter le même programme, mais l'inverse n'est pas autorisé. (Il faut utiliser le mécanisme set-UID.)
Le système de gestion dæmon fonctionne en tant que superutilisateur. Ses données de configuration spécifient que des démons particuliers s'exécutent sous l'égide de comptes d'utilisateurs particuliers:
rc
le script/etc/init.d
utilise un outil d'aide tel questart-stop-daemon
et son--chuid
option.run
appels de scriptsetuidgid
,s6-setuidgid
,chpst
ourunuid
avec le nom du compte utilisateur. Il existe des exemples de cela dans /unix//a/179798/5132 qui définissent lenagios
compte d'utilisateur.setuid
strophe dans un fichier de travail, qui spécifie le compte utilisateur. Ce n'est pas particulièrement fin, et parfois on veut ce qui est décrit sur /superuser//a/723333/38062 .User=
paramètre dans le fichier d'unité de service, qui spécifie le compte d'utilisateur.Lorsque le système de gestion dæmon génère un processus pour être le dæmon, ces mécanismes abandonnent les privilèges de superutilisateur afin que le processus dæmon continue de s'exécuter sous l'égide du compte d'utilisateur non privilégié.
Il y a une explication assez longue pour laquelle une bonne gestion des démons se fait de cette façon. Mais vous n'avez pas demandé pourquoi; seulement quand, comment et d'où. ☺ Un très bref précis donc:
Les systèmes d'exploitation Unix et Linux isolent les processus s'exécutant sous l'égide de différents comptes d'utilisateurs les uns des autres. Historiquement, si l'on était en mesure de reprendre un démon qui fonctionnait en tant que superutilisateur, on pouvait faire tout ce qu'on voulait. Un démon qui s'exécute sous l'égide d'un compte non privilégié, d'autre part, ne peut accéder qu'aux fichiers, répertoires, périphériques et processus que ce compte non privilégié peut. Un système de programmes Dæmon sans confiance mutuelle fonctionnant tous sous l'égide de différents comptes d'utilisateurs et incapables d'accéder / de contrôler les fichiers / répertoires / processus / périphériques (internes, approuvés) les uns des autres, est donc beaucoup plus difficile à déchiffrer.
Lectures complémentaires
la source
Sous Linux, lorsque nous installons un service, il crée un utilisateur de son nom de service ou similaire à celui-ci afin qu'il ne puisse pas accéder aux autres fichiers.
la source