Warum unterscheiden sich die Umask-Werte eines Benutzers zwischen zwei Systemen?

Warum unterscheiden sich die Umask-Werte eines Benutzers zwischen zwei Systemen?

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

umaskWenn 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.defshat eine Standard-Umask von 022 und das Systembenutzerfenster auskommentiert

UMASK           022
# System accounts
#SYS_UID_MIN              100
#SYS_UID_MAX              999

aber /etc/adduser.confhat

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/profileoder benutzerspezifische wie ~/.profile. 'rufus' hatkein Login, daher sollten diese Dateien keinen Einfluss auf die umaskRü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-umaskwird 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-sessionund /etc/pam.d/common-session-noninteractivekeine 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 umaskzwischen 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.prefs20.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!

verwandte Informationen