Ich habe zwei Systeme, A und B. A ist Ubuntu 16.04 und B ist Ubuntu 20.04. Auf jedem ist ein Utility-Benutzer „rufus“ definiert. „rufus“ hatkein Loginauf beiden Systemen.
Ich möchte verstehen, warum 'rufus' auf den beiden Systemen unterschiedliche Standard-Umask-Werte hat. Auf System A (16.04) erhalte ich
$ sudo -u rufus sh -c umask
0022
Auf System B (20.04) bekomme ich
$ sudo -u rufus sh -c umask
0002
umask
Wenn ich es sowohl für meinen eigenen Benutzer als auch für „Root“ ausführe 0022
, wird auf beiden Systemen der erwartete Standardwert zurückgegeben. Was auch immer der Unterschied ist, er scheint mit einer Eigenschaft zusammenzuhängen, die spezifisch für „rufus“ ist.
Folgendes habe ich berücksichtigt:
1) Systembenutzer
Einige Linux-Systeme definieren für Systembenutzer andere Standard-Umasks als für normale Benutzer.
Auf System A (16.04) hat 'rufus'
$ id rufus
uid=999(rufus) gid=999(rufus) groups=999(rufus)
Auf System B (20.04) hat 'rufus'
$ id rufus
uid=114(rufus) gid=119(rufus) groups=119(rufus)
AnbeideSysteme, /etc/login.defs
hat eine Standard-Umask von 022 und das Systembenutzerfenster auskommentiert
UMASK 022
# System accounts
#SYS_UID_MIN 100
#SYS_UID_MAX 999
aber /etc/adduser.conf
hat
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999
was darauf hinweist, dass 'rufus' ein Systembenutzer ist aufbeideSysteme (das heißt, UID > 99 und UID < 1000). Dies scheint also nicht den Unterschied in der Standard-Umask zu erklären.
2) Anmeldeskripte
Die Standard-Umask eines Benutzers kann durch Login-Skripte gesetzt werden, entweder globale /etc/profile
oder benutzerspezifische wie ~/.profile
. 'rufus' hatkein Login, daher sollten diese Dateien keinen Einfluss auf die umask
Rückgabe haben, da sie nie verarbeitet werden.
Um gründlich zu sein, habe ich die Dateien noch einmal überprüft
/etc/profile
/etc/bash.bashrc
~rufus/.profile
auf beiden Systemen ('rufus' hat einen Home-Ordner). Keiner von ihnen hat einen Wert für umask festgelegt. Aus mehreren Gründen scheint dies den Unterschied in der Standard-umask nicht zu erklären.
3) /etc/passwd
Die „Umask“ eines Benutzers kann in festgelegt werden /etc/passwd
.
Auf System A (16.04):
rufus:x:999:999:,,,:/home/rufus:/usr/sbin/nologin
Auf System B (20.04):
rufus:x:114:119::/home/rufus:/usr/sbin/nologin
Keines davon legt „Umask“ fest, daher scheint dies den Unterschied in der Standard-Umask nicht zu erklären.
4) libpam-umask
Ich weiß sehr wenig darüber, aber ich verstehe, dass es verwendet werden kann, um den Umask-Wert für einen Benutzer festzulegen. Auf beiden Systemen libpam-umask
wird es vom Paket bereitgestellt libpam-modules
. Dieses Paket ist auf beiden Systemen installiert, aber ich habe es nie verwendet oder konfiguriert. Auf beiden Systemen haben die Konfigurationsdateien /etc/pam.d/common-session
und /etc/pam.d/common-session-noninteractive
keine Umask-Einstellung in der Zeile
session optional pam_umask.so
wenn ich also nicht woanders nachschauen muss, scheint dies den Unterschied in der Standard-Umask nicht zu erklären.
Das ist alles, was mir einfällt. Was könnte sonst den Unterschied umask
zwischen den beiden Systemen bei der Rückgabe von „rufus“ erklären?
Eine Frage, die ich besonders gerne beantwortet hätte, ist: Wenn Ubuntu eine Standard-Umask für alle Systembenutzer festlegt (UID 100-999), in welcher Datei wird diese festgelegt?. Dies scheint eine weitere der für Linux typischen „Geheiminformationen“ zu sein.
Antwort1
Ich glaube, ich habe es herausgefunden. In /etc/login.prefs
20.04 steht folgendes:
# If USERGROUPS_ENAB is set to "yes", that will modify this UMASK default value
# for private user groups, i. e. the uid is the same as gid, and username is
# the same as the primary group name: for these, the user permissions will be
# used as group permissions, e. g. 022 will become 002.
Dies könnte ehrlich gesagt ein Fehler in 16.04 beim Ausführen des Befehls sein sudo -u username sh -c umask
. Das ist das Einzige, was mir einfällt. Auf meinen Testsystemen erhalte ich die folgende Ausgabe.
16.04 Uhr:
terrance@terrance-1604:~$ id
uid=1000(terrance) gid=1000(terrance) groups=1000(terrance),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)
terrance@terrance-1604:~$ umask
0002
terrance@terrance-1604:~$ sudo -u terrance sh -c umask
0022
20.04 Uhr:
terrance@terrance-ubuntu:~$ id
uid=1000(terrance) gid=1000(terrance) groups=1000(terrance),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),126(sambashare),132(vboxusers)
terrance@terrance-ubuntu:~$ umask
0002
terrance@terrance-ubuntu:~$ sudo -u terrance sh -c umask
0002
Wie es scheint, unterstützen beide genau dieselben Befehle und haben genau denselben Wortlaut /etc/login.prefs
. Aber 16.04 scheint den Benutzer nicht so richtig zu lesen wie 20.04. Es sieht nach einem Fehler aus, aber da 16.04 jetzt EOL ist, werden sie nicht mehr wegen Fehlern aktualisiert.
Hoffe das hilft!