Der Unterschied zwischen einem Systembenutzer und einem normalen Benutzer

Mit den Kommandozeilenwerkzeugen adduser und useradd kann man neben normalen Usern auch sogenannte Systemuser anlegen.

Viele fragen sich hierbei, was eigentlich der Unterschied zwischen diesen beiden Arten von Benutzerkonten ist. Da auch ich mir diese Frage schon ein paar Mal gestellt habe, möchte ich sie mit diesem Artikel endgültig beantworten.

Ich beginne dabei mit ein paar kleinen Auszügen aus der Manpage. Anschließend werde ich für jeden Benutzertyp ein Konto anlegen, um beide direkt miteinander vergleichen zu können.

Die Theorie

In der Manpage von adduser finden sich folgende Einträge:

 Add a normal user
       If  called  with  one  non-option  argument and without the --system or
       --group options, adduser will add a normal user.

       adduser will choose the first available UID from  the  range  specified
       for  normal users in the configuration file.  The UID can be overridden
       with the --uid option.
[...]
 Add a system user
       If called with one non-option argument and the --system option, adduser
       will add a system user. If a user with the same name already exists  in
       the  system uid range (or, if the uid is specified, if a user with that
       uid already exists), adduser will exit with a warning. This warning can
       be suppressed by adding "--quiet".

       adduser  will  choose  the first available UID from the range specified
       for system  users  in  the  configuration  file  (FIRST_SYSTEM_UID  and
       LAST_SYSTEM_UID).  If  you want to have a specific UID, you can specify
       it using the --uid option.

Auf den ersten Blick scheint der Unterschied in der Vergabe von UID und GID zu liegen. Welcher Bereich dabei für die jeweiligen Benutzer gilt, wird in einer Konfigurationsdatei festgelegt. Unter Ubuntu ist dies z.B. die Datei /etc/adduser.conf:

# FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for UIDs
# for dynamically allocated administrative and system accounts/groups.
# Please note that system software, such as the users allocated by the base-passwd
# package, may assume that UIDs less than 100 are unallocated.
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999

# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=1000
LAST_UID=29999

FIRST_GID=1000
LAST_GID=29999

So liegen die UID und GID von Systembenutzern in diesem Fall zwischen 100 und 999 und die der normalen Benutzer zwischen 1000 und 29999.

Des Weiteren wird laut Manpage für normale Benutzer eine Gruppe mit gleichem Namen wie das Benutzerkonto angelegt. System-Benutzer werden hingegen standardmäßig in die Gruppe nogroup einsortiert.

Die Praxis

Nach der Theorie kommt bekanntlich die Praxis. Diese beginnt mit der Erstellung eines normalen Test-Benutzers.

:~$ sudo adduser test
Adding user `test' ...
Adding new group `test' (1004) ...
Adding new user `test' (1003) with group `test' ...
Creating home directory `/home/test' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
        Full Name []: Vorname Nachname
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y
:~$

Der neue Benutzer test wird automatisch einer Gruppe mit dem gleichen Namen zugewiesen. Der User bekommt dabei die UID 1003, während die Gruppe die GID 1004 erhält. Es wird ein Home-Verzeichnis erstellt und die Standardkonfigurationsdateien werden aus dem Verzeichnis /etc/skel in das Home-Verzeichnis kopiert. Anschließend werden noch ein paar allgemeine Informationen zum Benutzer abgefragt, bevor dieser endgültig erstellt wird.

Wird ein System-Benutzer angelegt, sieht das ganze wie folgt aus:

:~$ sudo adduser --system test2
Adding system user `test2' (UID 114) ...
Adding new user `test2' (UID 114) with group `nogroup' ...
Creating home directory `/home/test2' ...
:~$

Oh Wunder, die Manpage hat recht behalten. Der Benutzer test2 wird mit der UID 114 angelegt und der Gruppe nogroup zugewiesen. Anschließend wird noch das Home-Verzeichnis erstellt und schon ist Schluss. Ach ja, es wurde gar kein Passwort vergeben. Warum eigentlich nicht?

System-Benutzer werden meist von Programmen und Diensten für ihre Ausführung benötigt. Da es sich dabei um keine echten Benutzer handelt, wird auf die Abfrage des vollständigen Namen etc. verzichtet. Auf ein Passwort wird ebenfalls verzichtet. Denn es wäre sehr unpraktisch, dieses jedes Mal eingeben zu müssen, wenn ein Dienst auf eine Datei zugreifen möchte. Und bevor man das Passwort im Klartext in einer Textdatei speichert, vergibt man besser erst gar keins. ;-) Doch ob dies die einzigen Unterschiede sind, wird sich gleich noch zeigen.

Mit der Anlage eines Benutzers werden Einträge in /etc/passwd und /etc/groups hinzugefügt. Die beiden soeben erstellten Test-Benutzer haben dort folgende Einträge:

:~$ cat /etc/passwd | grep test
test:x:1003:1004:Vorname Nachname,,,:/home/test:/bin/bash
test2:x:114:65534::/home/test2:/bin/false

:~$ cat /etc/group | grep test
test:x:1004:
:~$

Der Blick in die Datei /etc/passwd offenbart, dass der normale Benutzer test über eine Login-Shell (/bin/bash) verfügt. Dieser Benutzer ist also in der Lage, sich interaktiv an einem Terminal oder einer SSH-Sitzung anzumelden. Dem System-Benutzer hingegen wurde keine Login-Shell zugewiesen (/bin/false). Dieser ist daher im Gegensatz zum normalen Benutzer nicht in der Lage, sich an einem Terminal oder über SSH am System anzumelden.

Ein Blick in die Gruppe /etc/group offenbart, dass die Gruppe test mit der GID 1004 erstellt wurde, während es für test2 keine Gruppe gibt.

Fazit

Normale Benutzerkonten werden in der Regel für echte Benutzer eines Systems erstellt. Mit Ihnen kann man sich am System anmelden und in einer Shell oder grafischen Oberfläche arbeiten.

System-Benutzer hingegen werden in der Regel für Programme und Dienste angelegt, welche sich nicht interaktiv am System anmelden müssen. Daher besitzen sie weder eine Login-Shell noch ein Passwort.

Sonst unterscheiden sich die beiden Benutzertypen nur darin, aus welchem Bereich ihre UIDs und GIDs stammen. An diesen kann man auch recht einfach erkennen, ob es sich bei einem Benutzer um einen normalen oder System-Benutzer handelt.

2 Gedanken zu „Der Unterschied zwischen einem Systembenutzer und einem normalen Benutzer

  1. Pingback: Installation von Seafile auf einem Ubuntu/Debian Server | My-IT-Brain

  2. Pingback: Was sind die maximalen und minimalen Werte für UID und GID in den verschiedenen Linux-Distributionen? | My-IT-Brain

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.