Pourquoi syslog est-il un utilisateur?

15

Quand je vérifie le /var/log, je trouve quelque chose de très étrange

me@me:~$ ls -lt /var/log |head -6 '
total 160368
-rw-r-----  1 syslog            adm              19919118 Jan 15 16:55 auth.log
-rw-r-----  1 syslog            adm             139702302 Jan 15 16:55 syslog
-rw-r-----  1 syslog            adm                191122 Jan 15 16:55 mail.log
-rw-r-----  1 syslog            adm               2210432 Jan 15 16:32 kern.log
-rw-r--r--  1 root              root              1741863 Jan 15 14:22 dpkg.log

Notez que le propriétaire des quatre premiers fichiers journaux est syslog. C'est bizarre, car il n'y a qu'un seul utilisateur sur mon système:

me@me~$ users
me

Pourquoi un nom de fichier syslogpeut-il être un utilisateur?

Alice
la source
6
Je vous assure qu'il y a bien plus d'un utilisateur sur votre système. Je sais que vous voulez dire "utilisateur humain associé à un compte et un répertoire personnel", mais la notion d '"utilisateur" pour tous les systèmes est plus large que cela.
Jetez un coup d'œil un jour /etc/passwd. Je compte 36 utilisateurs de rôle, hors root. Essayez également - man usersvous supposez (incorrectement) ce que fait la commande.
chrylis -on strike-

Réponses:

26

Cela concerne la sécurité et les autorisations d'accès à votre système.

Et non, vous avez beaucoup plus d' utilisateurs que votre propre utilisateur. Il y a "root", "daemon", "bin", "games", "nobody" et "list".

Effectuez une more /etc/passwdpour une liste d'utilisateurs sur votre système. Vous verrez beaucoup de lignes avec "/ usr / sbin / nologin". Cela signifie que ceux-ci ne peuvent pas être utilisés en tant qu'utilisateur normal avec une connexion comme votre propre utilisateur. La troisième colonne est l'ID utilisateur. Tous les ID utilisateur inférieurs à 1 000 sont des pseudo-utilisateurs. Votre 1er utilisateur sudo (celui qui a installé le système) en a 1000 par défaut.

Fondamentalement, l'utilisateur syslog est autorisé à utiliser le /var/log/répertoire défini comme répertoire appartenant à root . Pour ne pas avoir à compromettre les autorisations sur le répertoire (c.-à-d. Réduire les autorisations afin que d'autres utilisateurs puissent l'utiliser), cet utilisateur a été créé.

La même chose est faite avec l'utilisateur pour Apache et MySQL (vous verrez un utilisateur et un groupe www-data et un utilisateur et un groupe MySQL lorsque vous les installerez), mais il est utilisé pour de nombreuses choses. Il existe un groupe "dialout" qui est utilisé pour accéder aux périphériques externes. Les utilisateurs sont ajoutés à ce groupe pour permettre à l'utilisateur d'utiliser ces appareils. Sinon, vous obtiendrez une erreur d'autorisation refusée. Cela fonctionne de deux manières: refuser l'accès à un utilisateur signifie supprimer le groupe.

Rinzwind
la source
Cependant, ce nombre n'a pas toujours été de 1000. J'ai travaillé sur des systèmes qui avaient une histoire suffisamment longue pour que les identifiants des utilisateurs réels commencent à partir du 20.
kasperd
1
Je sais mais Ubuntu commence toujours à 1000. Redhat, par exemple, commence à 500.
Rinzwind
Oui, mais les utilisateurs ne sont pas nécessairement créés localement. Dans mon cas, ils ont été reçus via NIS, ces jours-ci, il aurait probablement été LDAP.
kasperd
Les vrais utilisateurs à partir de 20 ans briseraient sérieusement une distribution basée sur Debian. Les UID 0-99 sur les systèmes basés sur Debian sont alloués statiquement par le projet Debian à des utilisations spécifiques.
Peter Green
1
@PaddyLandau / bin / false fermera une connexion sans en avertir. nologin devrait afficher un message "Ce compte n'est pas disponible actuellement." (/etc/nologin.txt détient cet avis)
Rinzwind
8

Le service syslog, qui écrit les messages de journal créés par le noyau et par d'autres services dans divers fichiers journaux, la console et / ou d'autres destinations, s'exécute sous son propre compte utilisateur spécial. Il en va de même de nombreux autres services. Il s'agit de mettre en œuvre le principe du moindre privilège :

Afin de minimiser l'impact possible d'un service compromis ou défectueux (par exemple, un service qui a un bogue qui à son tour est exploité par un attaquant, ou un service qui a un bogue qui provoque est de faire des choses indésirables au hasard, ou un service qui a été délibérément conçu par un développeur malin pour faire de mauvaises choses), vous voulez que chaque service n'ait accès qu'à ce dont il a besoin pour son fonctionnement et rien d'autre.

Sur n'importe quel système d'exploitation de type Unix (qui inclut toutes les distributions GNU / Linux telles que Ubuntu), vous pouvez le plus facilement attribuer des privilèges (c'est-à-dire le droit de lire et / ou d'écrire à partir de / vers certains fichiers ou des éléments similaires à des fichiers tels que nœuds de périphériques) en fonction des utilisateurs et des groupes. Il existe d'autres possibilités, mais elles sont souvent plus fastidieuses et sujettes aux erreurs à configurer, ou ne fonctionnent que dans des contextes spécifiques.

Ainsi, le service syslog s'exécute sous le compte d'utilisateur syslog. Si maintenant, par exemple, un attaquant peut amener le service syslog à faire ce qu'il lui dit au lieu de ce qu'il est censé faire, le service syslog est toujours restreint (appliqué par le noyau en fonction du compte utilisateur, non appliqué par le syslog logiciel lui-même, ce qui serait inutile car il est compromis) pour écrire uniquement dans les fichiers journaux (les seuls fichiers auxquels l'utilisateur syslog a accès en écriture). Ainsi, l'attaquant ne peut pas utiliser le service syslog compromis pour par exemple modifier le contenu d'un site Web ou d'une base de données hébergée sur le même ordinateur, car les fichiers pertinents sont configurés pour être accessibles en écriture uniquement par un ensemble particulier d'un autre utilisateur (humain ou système ) comptes, pas par le compte utilisateur syslog.

Afin de causer plus de tort que de simplement supprimer / modifier les fichiers journaux et lire les fichiers "publics" (avec la permission "lecture" pour tout le monde), l'attaquant devrait d'abord exploiter en plus un deuxième bogue, soit dans le noyau, soit dans certains logiciels. qui est installé pour s'exécuter avec des privilèges différents de l'utilisateur qui l'a invoqué ( setuid ), et ainsi gagner des privilèges supplémentaires ( escalade de privilèges ).


La userscommande que vous avez utilisée, selon sa page de manuel , affiche uniquement les utilisateurs actuellement connectés . Étant donné que l'utilisateur syslog est un utilisateur système , il ne se connectera jamais, il n'apparaîtra donc jamais dans cette liste. Vous pouvez consulter le fichier /etc/passwdou utiliser l'une des autres méthodes décrites ici pour obtenir une liste de tous les utilisateurs (humains et système) de votre système.

Hans-Jakob
la source
7

Parce que syslog n'est pas un fichier; il s'agit d'un démon utilisé par le système pour stocker le démon système et les messages d'application (débogage, erreur, avertissement et informations) dans des fichiers.

Lisez ici pour un bref historique de syslog.

Dans d'autres distributions, par exemple celles basées sur Red Hat Linux, la sortie syslog du système est stockée dans un fichier appelé /var/log/messages. Cela dépend de la configuration.

Comme le dit Rinzwind, pour des raisons de sécurité, différents composants du système d'exploitation s'exécutent avec un utilisateur spécifique, et chaque utilisateur a ses propres droits. Par exemple, syslog dispose au moins d'une autorisation d'écriture sur le /var/logdossier.

Un système possède de nombreux services et il y a généralement des utilisateurs pour chaque service ou pour un petit groupe de services. Par exemple apache get www-data|httpd|apache,. Normalement, ces utilisateurs démons n'obtiennent pas d'accès Bash pour éviter les fuites de sécurité.

AtomiX84
la source