Wie setze ich umask für die gesamte Gnome-Sitzung?


10

Verwenden von Gnome 3.18. Ich teile Dateien zwischen anderen Familienmitgliedern, aber die Standard-Umask in meiner Distribution (Archlinux) ist 0022. Daher ist nicht jede erstellte Datei / jedes erstellte Verzeichnis für unsere gemeinsame Gruppe beschreibbar.

Ich habe versucht zu setzen umask 0002in , /etc/profileaber die Gnome - Sitzung wird immer noch mit 0022. Es funktioniert jedoch für eine Login-Bash-Shell.

Ich habe auch versucht, diese Zeile hinzuzufügen /etc/pam.d/system-auth: session required pam_umask.so umask=0002 Sie hat den gleichen Effekt wie die in /etc/profile. Ich habe es versucht

Wenn ich die Umask manuell in einer Gnome-Terminal-Shell ändere, starte ich eine Anwendung daraus, z. B. gedit, und die von ihr erstellten Dateien haben die gewünschten Berechtigungen. Wenn ich gedit über die Gnomenmenüs starte, ist dies nicht der Fall. Es geht mir also wirklich darum, die Umask für die Gnome-Sitzung festzulegen, und ich kann nicht finden, wo ich das tun soll.

EDIT (um Gilles 'Kommentar zu beantworten): Ich benutze GDM 3.18 als DM. Ich habe auch versucht, die Zeile pam_umask hinzuzufügen /etc/pam.d/gdm-launch-environment. Alle anderen gdm-*Dateien enthalten Includes von sessionaus der system-authDatei, daher sollten sie nicht mehr benötigen. Es ändert nichts.

/etc/login.defsenthält UMASK 077aber auch USERGROUPS_ENAB yeswelche sollte umaskentweder 0077oder 0007für Benutzer gesetzt werden, deren primäre Gruppe der Benutzername ist.

Die einzige Datei, die 022für umask in enthält, /etcist, /etc/profileaber das war mein erster Versuch.

Was /etc/Xsession.d, habe ich nicht dieses Verzeichnis. Da Wayland jetzt der Standard-Anzeigeserver ist, bin ich mir nicht sicher, ob die Umask als Teil der X-Initialisierung festgelegt werden soll, auch wenn ich sie noch selbst verwende.


Welchen Display Manager verwenden Sie? (In diesem Programm geben Sie Ihren Benutzernamen und Ihr Passwort ein.) Gdm, lightdm, slim, xdm, kdm, ...? Versuchen Sie, je nachdem, wie Arch und Ihr DM eingerichtet sind, eine Datei /etc/Xsession.doder eine andere Datei hinzuzufügen /etc/pam.d(ich gehe davon aus, dass Sie dies systemweit festlegen möchten). Oder vielleicht /etc/login.defs.
Gilles 'SO - hör auf böse zu sein'

Die beiden Antworten sind gültig für ttyoder sshLogins, und sie sind im Grunde die gleichen, wirklich (mit pam_umask). Sie arbeiten nicht mit meiner Gnomensitzung. Also kann ich niemandem das Kopfgeld geben. Ich weiß nicht, ob dies spezifisch für Gnome auf Xorg unter Archlinux ist. Ich werde mit anderen Distributionen testen, wenn ich etwas Zeit habe.
Christophe Drevet-Droguet

1
Es gibt einen ähnlichen Thread im Archlinux-Forum, der das Problem behandelt: bbs.archlinux.org/viewtopic.php?id=207753 Scheint wie ein Fehler in gdm ...

Am Ende habe ich ACLs verwendet, was eine viel bessere Möglichkeit ist, Berechtigungen zu steuern. Die Standardmaske für sicherere Berechtigungen muss nicht geändert werden.
Christophe Drevet-Droguet

Antworten:


6

Einige Gnome-Anwendungen werden von gestartet systemd --user. In diesem Fall wird umask von systemd 0022unabhängig vom konfigurierten Wert für pam_umask auf gesetzt . Mir sind keine Problemumgehungen bekannt, aber ich habe ein Problem mit dem Systemd Github Issue Tracker geöffnet . Dieses Problem wird auch bei Gnome Bugzilla gemeldet .

Umask set using pam_umaskfunktioniert wie erwartet für Anwendungen, die nicht von gestartet werden systemd --user.

Unter Ubuntu Bugzilla wird eine Problemumgehung empfohlen  , um Systemd Service-Overrides für alle betroffenen Anwendungen zu platzieren.


Um dies selbst zu untersuchen

Sie können die auf Ihrem System ausgeführten Prozesse in einem Baumformat (übergeordnete / untergeordnete Prozesse) auflisten, indem Sie Folgendes verwenden:

pstree -Tapu

Suchen Sie nach PIDs für: (1) die Instanz von systemd --user in Ihrer Sitzung ; (2) eine von ihm gestartete Anwendung wie gedit, die systemd --user als untergeordneter Prozess angezeigt wird ; und (3) einen Prozess in Ihrer Sitzung, der nicht von systemd --user gestartet wurde .

Vergleichen Sie die in procfs gemeldeten Aufgaben :

grep Umask /proc/<pid>/status

systemd --user selbst (1) und Prozesse, die nicht von ihm gestartet wurden (3), sollten die richtige umask haben, die von pam_umask festgelegt wurde . Von systemd --user (2) gestartete Prozesse haben eine Umask von 0022.


3

Das Problem ist das von Sebasth erwähnte. Ich habe viele Dinge ausprobiert, aber dann habe ich eine Problemumgehung gefunden, die darin besteht, die (pro Benutzer) UMask von dbus zu überschreiben:

$ systemctl --user edit dbus

Schreiben Sie in die Datei, die geöffnet wird, einfach:

[Service]
UMask=002 # This is the umask I want to use

Die Datei wird in .config / systemd / user / dbus.service.d / override.conf gespeichert und überschreibt die dbus-Standard-Umask, von der ich annehme, dass sie von systemd --user geerbt wird, da dbus von ihr gestartet wird. Melden Sie sich einfach ab und wieder an, und Gnome-Anwendungen sollten die angegebene umask verwenden. Nur eine Problemumgehung, aber es funktioniert für mich.


2

Stattdessen können umaskSie die usergroupsOption ändern, für die pam_umaskdieser Benutzer und diese Gruppe dieselben Berechtigungen haben wie die klassische Unix-Methode zum Freigeben von Ordnern.

# /etc/pam.d/login or
# /etc/pam.d/common-session or system-auth
session optional pam_umask.so usergroups

1
Wenn der Benutzer nicht root ist und der Benutzername mit dem Namen der primären Gruppe identisch ist, werden die Umask-Gruppenbits mit den Eigentümerbits identisch (Beispiele: 022 -> 002, 077 -> 007).
Christophe Drevet-Droguet

Ich verwende die primäre Gruppe als Freigabegruppe. Bei Benutzergruppen werden Dateien standardmäßig mit dieser Benutzergruppe erstellt und können von anderen Benutzern nicht bearbeitet werden.
Christophe Drevet-Droguet

1
Ich sehe jedoch einen Weg: Ich kann Benutzergruppen und eine gemeinsame sekundäre Gruppe verwenden und dann im freigegebenen Baum ein Bit "Gruppe setzen" hinzufügen, um diese gemeinsame Gruppe für alle erstellten Dateien und Ordner zu erzwingen. Wie auch immer, ich werde es später auf meinem PC versuchen. Ich bin mir nicht sicher, ob Gnome sich sowieso darum kümmern wird, da 0022 immer als Umask benötigt wird, egal was für tty-Sitzungen funktioniert.
Christophe Drevet-Droguet

1

Um die Standard-Umask systemweit festzulegen, müssen Sie sie zuerst aktivieren, was hier ziemlich gut erklärt wird:

http://manpages.debian.org/cgi-bin/man.cgi?query=pam_umask&sektion=8

Der obige Link ist für Debian und Ubuntu, aber für alle anderen Linux-Systeme gleich.

Um es umask zu aktivieren (was möglicherweise bereits vorhanden ist), müssen Sie eine Zeile hinzufügen zu /etc/pam.d/common-session:

session optional pam_umask.so

Nach der Aktivierung können Sie es einrichten in:

/etc/login.defs

Ich sehe, dass Sie diese Datei bereits gefunden haben. Alles, was Sie tun müssen, ist Folgendes festzulegen:

# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK           077

Und setzen Sie UMASK auf 0002 oder was auch immer Sie möchten.

Dadurch wird der Standardwert systemweit festgelegt. Dies bedeutet, dass alle Benutzer die Umask von dort abholen müssen, sofern sie in ihrem .profile oder .bashrc nichts anderes festgelegt haben


Vielen Dank für Ihre Antwort. Ich muss das versuchen. Ich bin nicht so optimistisch, weil ich dieses PAM-Modul bereits mit einem Inline-Parameter "umask = 0002" ausprobiert habe und es nicht funktioniert hat (für Gnome hat es jedoch für andere Login-Shells funktioniert). Ich werde Ihren Vorschlag versuchen.
Christophe Drevet-Droguet

Sie haben versucht, Pam-Modul für System-Auth nicht Common-Auth :-)
Ostendali

3
Es ist nur eine Frage der Verteilung der Dateinamen. Ich weiß, dass Debian common-*für allgemeine Einstellungen verwendet wird. Arch verwendet als RedHat eine system-authDatei dafür. Wie auch immer, ich habe Ihren Vorschlag versucht, session optional pam_umask.sound und UMASK 002in /etc/login.defsWie erwartet und wie bei hinzuzufügen pam_umask.so umask=0002, funktionierte es für eine tty- loginSitzung (oder über SSH), aber Gnome stellte 0022wie immer eine Umask ein. Gnome muss eine interne Umask-Einstellung verwenden, oder Archlinux verwendet eine ... Ich werde eine andere Distribution ausprobieren, um festzustellen, ob das Problem ebenfalls auftritt.
Christophe Drevet-Droguet

1

Für die Anmeldesitzung: Fügen Sie umask 0002Ihrem $HOME/.profile(oder /etc/profile) hinzu.

Für die Gnome-Sitzung: Fügen Sie umask 0002Ihre hinzu$HOME/.gnomerc


1

BEARBEITEN: Damit systemd die Umask der Gnome-Sitzung festlegt, habe ich unter /etc/systemd/system/display-manager.service.d/ eine umask.conf-Datei mit den folgenden Zeilen erstellt:


[Service]
UMask=0002

Nach dem Neustart des Computers können nun alle Prozesse unter user.sliceder gewünschten Umask übereinstimmen. Das Abmelden war nicht ausreichend, damit die Änderungen vorgenommen werden konnten. Ich empfehle daher, den Computer neu zu starten, bevor Sie die Tests für Prozessaufgaben ausführen.

Zusätzliche Informationen :

  • Betriebssystem: CentOS7.4
  • DE: Gnome3

3
Wenn es funktioniert, sollte eine Datei wie /etc/systemd/system/gdm.service.d/umask.confnur enthalten [Service]\nUMask=0002ausreichen.
Christophe Drevet-Droguet

Und tatsächlich tut es das! habe es gerade dort getestet. Mein / etc / systemd / system / Ordner enthält einen Symlink zu gdm.service, also habe ich eine display-manager.service.d / umask.conf erstellt und die Zeile hinzugefügt. Dies hat perfekt funktioniert und die Antwort aktualisiert, um sie einzuschließen. Danke you @ ChristopheDrevet-Droguet
Jamalm

0

Ich wollte nur hinzufügen, dass die pam_umaskManpages einige ziemlich gute Informationen enthalten, damit Sie herausfinden können, woher Ihre Umask kommt. Speziell:

pam_umask ist ein PAM-Modul zum Festlegen der Dateimodus-Erstellungsmaske der aktuellen Umgebung. Die Umask wirkt sich auf die Standardberechtigungen aus, die neu erstellten Dateien zugewiesen werden.

Das PAM-Modul versucht, den umask-Wert von den folgenden Stellen in der folgenden Reihenfolge abzurufen:

·   umask= argument
·   umask= entry of the users GECOS field
·   pri= entry of the users GECOS field
·   ulimit= entry of the users GECOS field
·   UMASK= entry from /etc/default/login
·   UMASK entry from /etc/login.defs

Wie jemand gesagt hat, sollten Sie dies in der common-sessionDatei im Verzeichnis einrichten /etc/pam.d.

Beachten Sie, dass Anmeldungen, die pam nicht verwenden (z. B. solche, die umask verwenden gettyoder loginderen Umask über gesetzt wird) login.defs.


0

Bei einer Installation von Fedora 29 mit Gnome stellte ich fest, dass Programme, die über den Gnome-Launcher gestartet wurden, andere lesbare Dateien 0022 hinterließen. Pam verzichtet offenbar auf /etc/login.defs, wie oben angegeben. Das Bearbeiten der Maske dort, 0077, änderte jedoch nichts an Gnomes Verhalten. Ich musste auch / etc / profile und / etc / bashrc bearbeiten - beide setzten es auf 0022 zurück.

Es wäre schön, wenn Fedora einen Platz dafür hätte, aber die Einträge in / etc / profile und / etc / bashrc setzen die Maske für Benutzer mit IDs über oder unter 200 unterschiedlich, so dass es scheint, dass eine Maske nicht für alle passt.

Obwohl dies vorerst eine Lösung ist, ist das Problem noch nicht vollständig gelöst, da der Gnome-Benutzer immer noch keine Möglichkeit hat, seine eigene Umask festzulegen, da diese auf Anwendungen angewendet wird, die vom Gnome-Launcher ausgeführt werden. Gnome sollte anscheinend eine Konfigurationsoption für diese Umask haben. (Vielleicht tut es das, aber ich habe es nicht gefunden.)


0

Ich habe die Problemumgehung zumindest für Fedora 31:

sudo vi /etc/profile.d/umask.sh
umask <your_umask>

sudo vi /etc/login.defs
UMASK <your_umask>

sudo vi /usr/local/bin/systemd-user
/usr/lib/systemd/systemd --user

sudo chmod a+x /usr/local/bin/systemd-user

sudo vi /usr/lib/systemd/system/user@.service
ExecStart=-/usr/local/bin/systemd-user
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.