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.
Pingback: Installation von Seafile auf einem Ubuntu/Debian Server | My-IT-Brain
Pingback: Was sind die maximalen und minimalen Werte für UID und GID in den verschiedenen Linux-Distributionen? | My-IT-Brain