Jak ustawić `umask` dla całej sesji gnome?

10

Korzystanie z Gnome 3.18. Udostępniam pliki innym członkom rodziny, ale domyślnym umask na mojej dystrybucji (archlinux) jest 0022. Dlatego każdego utworzonego pliku / katalogu nie można zapisać dla naszej wspólnej grupy.

Starałem się umieścić umask 0002w /etc/profileale sesja gnome nadal korzysta 0022. Działa jednak dla powłoki bash logowania.

Próbowałem także dodać tę linię /etc/pam.d/system-auth: session required pam_umask.so umask=0002 Ma taki sam efekt jak ten w /etc/profile. próbowałem

Jeśli ręcznie zmienię umask w powłoce terminalu gnome, uruchamiam z niego aplikację, powiedzmy gedit, a następnie tworzone przez nią pliki mają wymagane uprawnienia. Jeśli uruchomię gedit z menu gnome, tak się nie stanie. Więc tak naprawdę mam na myśli ustawienie umask na sesję gnome i nie mogę znaleźć gdzie to zrobić.

EDYCJA (aby odpowiedzieć na komentarz Gillesa): Używam gdm 3.18 jako DM. Próbowałem także dodać wiersz pam_umask /etc/pam.d/gdm-launch-environment. Wszystkie pozostałe gdm-*pliki zawierają sessionz system-authpliku, więc nie powinny potrzebować więcej. Nic to nie zmienia.

/etc/login.defszawiera UMASK 077jednak również USERGROUPS_ENAB yes, które powinny ustawić umaskalbo 0077lub 0007dla użytkowników, których główną grupą jest nazwą użytkownika.

Jedyny plik zawierający 022dla umask w /etcto, /etc/profileale to była moja pierwsza próba.

Co do /etc/Xsession.dtego nie mam tego katalogu. Poza tym, ponieważ wayland jest teraz domyślnym serwerem wyświetlania, nie jestem pewien, czy umask powinien być ustawiony jako część inicjalizacji X, nawet jeśli nadal go używam.

Christophe Drevet-Droguet
źródło
Jakiego menedżera wyświetlania używasz? (To jest program, w którym podajesz swoją nazwę użytkownika i hasło.) Gdm, lightdm, slim, xdm, kdm,…? W zależności od konfiguracji Archa i DM, spróbuj dodać plik /etc/Xsession.dlub inny plik w /etc/pam.d(zakładam, że chcesz ustawić to dla całego systemu). Albo może /etc/login.defs.
Gilles „SO- przestań być zły”
Obie odpowiedzi są ważne ttylub sshlogowania, a są to w zasadzie ten sam, naprawdę (za pomocą pam_umask). Nie działają z moją sesją gnome. Więc nie mogę dać nagrody nikomu. Nie wiem, czy jest to specyficzne dla gnome na Xorg na archlinuxie. Będę testować z innymi dystrybucjami, kiedy będę miał trochę czasu.
Christophe Drevet-Droguet
1
Na forum archlinux jest podobny wątek na ten temat: bbs.archlinux.org/viewtopic.php?id=207753 Wygląda na błąd w gdm ...
Skończyło się na użyciu list ACL, co jest znacznie lepszym sposobem kontrolowania uprawnień. Nie trzeba zmieniać domyślnej bezpieczniejszej maski uprawnień.
Christophe Drevet-Droguet

Odpowiedzi:

6

Niektóre aplikacje Gnome są uruchamiane przez systemd --user, w którym to przypadku umask jest ustawiany przez systemd na 0022niezależnie od skonfigurowanej wartości dla pam_umask . Nie znam żadnych obejść, ale otworzyłem problem w systemd tracker problemów github. Ten problem jest również zgłaszany w Bugzilli Gnome .

Używanie zestawu Umask pam_umaskdziała zgodnie z oczekiwaniami dla aplikacji, które nie zostały uruchomione przez systemd --user.

W  Bugzilli Ubuntu zasugerowano jedno obejście polegające na umieszczeniu zastąpień usługi systemowej we wszystkich aplikacjach, których dotyczy problem.


Aby to zbadać samodzielnie

Możesz wyświetlić listę procesów uruchomionych w systemie w formacie drzewa (procesy nadrzędne / podrzędne), używając:

pstree -Tapu

Znajdź PID dla: (1) wystąpienia sesji systemd --user w sesji ; (2) uruchomiona przez nią aplikacja , taka jak gedit, która pokaże się jako proces potomny systemd --user ; oraz (3) proces w sesji, który nie został uruchomiony przez systemd --user .

Porównaj umasks zgłoszone w procfs :

grep Umask /proc/<pid>/status

systemd --user sam (1) i procesy, które nie zostały przez niego uruchomione (3) powinny mieć poprawną umask, która została ustawiona przez pam_umask . Procesy uruchomione przez systemd --user (2) będą miały rozmiar umask 0022.

sebasth
źródło
3

Problem polega na tym, że wspomniany przez Sebastha. Próbowałem wielu rzeczy, ale potem znalazłem obejście, które polega na zastąpieniu (na użytkownika) UMask dbus:

$ systemctl --user edit dbus

W pliku, który zostanie otwarty, po prostu napisz:

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

Plik zostaje zapisany w .config / systemd / user / dbus.service.d / override.conf i przesłania domyślną umask dbus, która, jak zakładam, jest dziedziczona z systemd --user, ponieważ dbus jest przez nią uruchamiany. Po prostu wyloguj się i zaloguj ponownie, a aplikacje gnome powinny użyć określonego umask. To tylko obejście, ale działa dla mnie.

egdoc
źródło
2

Zamiast tego umaskmożesz użyć usergroupsopcji pam_umask, z tym użytkownikiem i grupą ma takie same uprawnienia, jak w klasycznym uniksowym sposobie udostępniania folderów.

# /etc/pam.d/login or
# /etc/pam.d/common-session or system-auth
session optional pam_umask.so usergroups
xae
źródło
1
Jeśli użytkownik nie jest rootem, a nazwa użytkownika jest taka sama jak nazwa grupy podstawowej , bity grupy umask są ustawione tak samo jak bity właściciela (przykłady: 022 -> 002, 077 -> 007).
Christophe Drevet-Droguet
Używam grupy podstawowej jako grupy udostępniania. W przypadku grup użytkowników pliki będą domyślnie tworzone z tą grupą użytkowników i nie będą edytowalne przez innych użytkowników.
Christophe Drevet-Droguet
1
Widzę jednak sposób: mogę używać grup użytkowników i wspólnej grupy drugorzędnej, a następnie w drzewie współużytkowanym dodać bit „ustaw grupę”, aby wymusić tę wspólną grupę na wszystkich utworzonych plikach i folderach. W każdym razie spróbuję później na komputerze. Nie jestem pewien, czy gnome i tak będzie się tym przejmował, ponieważ zawsze zajmuje 0022 jako umask, bez względu na to, co działa na sesjach tty.
Christophe Drevet-Droguet
1

Aby ustawić domyślny system umask dla całego systemu, musisz go włączyć na pierwszym miejscu, co całkiem dobrze wyjaśniłem tutaj:

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

Powyższe łącze dotyczy Debiana i Ubuntu, ale jest takie samo dla wszystkich innych systemów Linux.

Aby włączyć to umask (które może już jest na swoim miejscu), musisz dodać linię do /etc/pam.d/common-session:

session optional pam_umask.so

Po włączeniu możesz skonfigurować w:

/etc/login.defs

Widzę, że już znalazłeś ten plik, więc wszystko, co musisz zrobić, to ustawić:

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

I ustaw UMASK na 0002 lub cokolwiek chcesz.

Spowoduje to ustawienie wartości domyślnej dla całego systemu, co oznacza, że ​​wszyscy użytkownicy wybiorą stamtąd stamtąd, chyba że nie ustalą inaczej w swoim .profile lub .bashrc

ostendali
źródło
Dziękuję za Twoją odpowiedź. Będę musiał tego spróbować. Nie jestem zbyt optymistyczny, ponieważ wypróbowałem już ten moduł PAM z wbudowanym parametrem „umask = 0002” i nie działał (w przypadku Gnome działał również w przypadku innych powłok logowania). Spróbuję twojej sugestii.
Christophe Drevet-Droguet
próbowałeś modułu pam dla
aut
3
To tylko kwestia dystrybucji nazw plików. Wiem, że Debian używa common-*wspólnych ustawień. Arch, podobnie jak RedHat, używa system-authdo tego pliku. W każdym razie, wypróbowałem twoją sugestię dodania session optional pam_umask.soi UMASK 002do. /etc/login.defsTak jak się spodziewałem, i tak jak w przypadku pam_umask.so umask=0002, działało to dla loginsesji tty (lub poprzez SSH), ale Gnome ustawił 0022umask jak zawsze. Gnome musi użyć wewnętrznego ustawienia umask, albo archlinux używa jednego ... Spróbuję innej dystrybucji, aby zobaczyć, czy problem też się pojawi.
Christophe Drevet-Droguet
1

W przypadku sesji logowania: dodaj umask 0002do swojej $HOME/.profile(lub /etc/profile).

W przypadku sesji Gnome: dodaj umask 0002do swojej$HOME/.gnomerc

ctruta
źródło
1

EDYCJA: Aby systemd ustawił umask sesji gnome, utworzyłem plik umask.conf w /etc/systemd/system/display-manager.service.d/ z następującymi wierszami:


[Service]
UMask=0002

Po ponownym uruchomieniu komputera umożliwia to teraz wszystkim procesom user.slicedostosowanie się do umask, który chcesz. Wylogowanie nie było wystarczające do wprowadzenia zmian, więc radzę zrestartować komputer przed wykonaniem testów na umasks procesowych.

Informacje dodatkowe:

  • System operacyjny: CentOS7.4
  • DE: Gnome3
jamalm
źródło
3
Jeśli to działa, wystarczy plik taki jak /etc/systemd/system/gdm.service.d/umask.confzawierający [Service]\nUMask=0002.
Christophe Drevet-Droguet
I rzeczywiście tak jest! właśnie to przetestowałem. mój folder / etc / systemd / system / zawiera dowiązanie symboliczne do gdm.service, więc utworzyłem display-manager.service.d / umask.conf i dodałem wiersz, to zadziałało idealnie, zaktualizuję odpowiedź, aby go uwzględnić. ty @ ChristopheDrevet-Droguet
jamalm
0

Chciałem tylko dodać, że strony pam_umaskpodręcznika zawierają całkiem niezłe informacje, które pomogą ci dowiedzieć się, skąd pochodzi twój umask. Konkretnie:

pam_umask to moduł PAM do ustawiania maski tworzenia trybu plików dla bieżącego środowiska. Umask wpływa na domyślne uprawnienia przypisane do nowo tworzonych plików.

Moduł PAM próbuje uzyskać wartość umask z następujących miejsc w następującej kolejności:

·   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

Jak ktoś powiedział, powinieneś to ustawić w common-sessionpliku w katalogu /etc/pam.d.

Zauważ, że loginy, które nie używają pam (takie jak te, które używają gettylub loginbędą miały ustawione umask poprzez login.defs.

Charles Addis
źródło
0

Podczas instalacji Fedory 29 z Gnome odkryłem, że programy uruchomione z programu uruchamiającego Gnome pozostawiły inne pliki do odczytu, 0022. Pam najwyraźniej odsyła do /etc/login.defs, jak wspomniano powyżej. Jednak edycja tamtej maski, 0077, nie zmieniła zachowania Gnome. Musiałem także edytować / etc / profile i do / etc / bashrc - oba ustawiały go z powrotem na 0022.

Byłoby miło, gdyby Fedora miał na to jedno miejsce, ale wpisy w / etc / profile i / etc / bashrc ustawiają maskę inaczej dla użytkowników z identyfikatorami powyżej lub poniżej 200, więc wydaje się, że jedna maska ​​nie pasuje do wszystkich.

Chociaż na razie jest to poprawka, problem nie został całkowicie rozwiązany, ponieważ użytkownik gnome nadal nie ma możliwości ustawienia własnego umask, ponieważ jest on stosowany do aplikacji uruchamianych z programu uruchamiającego gnome. Wydaje się, że Gnome powinien mieć opcję konfiguracji dla tego umask. (Może tak, ale nie znalazłem.)

użytkownik244488
źródło
0

Mam obejście przynajmniej w Fedorze 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/[email protected]
ExecStart=-/usr/local/bin/systemd-user
Charles
źródło