Bagaimana cara mengatur `umask` untuk seluruh sesi gnome?

10

Menggunakan Gnome 3.18. Saya berbagi file antara anggota keluarga lainnya, tetapi umask default pada distro saya (archlinux) adalah 0022. Jadi setiap file / direktori yang dibuat tidak dapat ditulis untuk grup umum kami.

Saya mencoba untuk menempatkan umask 0002di /etc/profiletetapi sesi gnome masih menggunakan 0022. Ini bekerja untuk shell bash login.

Saya juga mencoba menambahkan baris ini di /etc/pam.d/system-auth: session required pam_umask.so umask=0002 Ini memiliki efek yang sama dengan yang ada di /etc/profile. Saya mencoba

Jika saya mengubah umask secara manual di shell terminal-gnome, maka saya meluncurkan aplikasi darinya, katakan gedit, maka file yang dibuat olehnya memiliki izin yang diinginkan. Jika saya meluncurkan gedit dari menu gnome, itu tidak. Jadi masalah saya adalah mengatur umask untuk sesi gnome, dan saya tidak bisa menemukan tempat untuk melakukannya.

EDIT (untuk menjawab komentar Gilles): Saya menggunakan gdm 3.18 sebagai DM. Saya juga mencoba menambahkan baris pam_umask ke /etc/pam.d/gdm-launch-environment. Semua gdm-*file lain berisi termasuk dari sessiondari system-authfile, jadi mereka tidak perlu lagi. Itu tidak mengubah apa pun.

/etc/login.defsberisi UMASK 077tetapi juga USERGROUPS_ENAB yesyang harus mengatur umaskuntuk salah satu 0077atau 0007untuk pengguna yang grup utamanya adalah nama pengguna.

Satu-satunya file yang berisi 022untuk umask /etcadalah /etc/profiletetapi itu adalah percobaan pertama saya.

Adapun /etc/Xsession.d, saya tidak punya direktori ini. Selain itu, karena wayland sekarang adalah server tampilan default, saya tidak yakin umask harus ditetapkan sebagai bagian dari inisialisasi X, bahkan jika saya masih menggunakannya sendiri.

Christophe Drevet-Droguet
sumber
Manajer tampilan apa yang Anda gunakan? (Itu program tempat Anda memasukkan nama pengguna dan kata sandi Anda.) Gdm, lightdm, slim, xdm, kdm, ...? Bergantung pada bagaimana Arch dan DM Anda diatur, coba tambahkan file /etc/Xsession.d, atau file lain di /etc/pam.d(Saya berasumsi Anda ingin mengatur seluruh sistem ini). Atau mungkin /etc/login.defs.
Gilles 'SANGAT berhenti menjadi jahat'
Kedua jawaban itu valid untuk ttyatau sshmasuk, dan mereka pada dasarnya sama, sungguh (menggunakan pam_umask). Mereka tidak bekerja dengan sesi gnome saya. Jadi saya tidak bisa memberikan hadiah kepada siapa pun. Saya tidak tahu apakah ini khusus untuk gnome di Xorg di archlinux. Saya akan menguji dengan distribusi lain ketika saya punya waktu.
Christophe Drevet-Droguet
1
Ada utas serupa di forum archlinux yang menangani masalah ini: bbs.archlinux.org/viewtopic.php?id=207753 Sepertinya ada bug di gdm ...
Saya akhirnya menggunakan ACL, yang merupakan cara yang jauh lebih baik untuk mengontrol izin. Tidak perlu mengubah topeng izin aman standar.
Christophe Drevet-Droguet

Jawaban:

6

Beberapa aplikasi Gnome diluncurkan oleh systemd --user, dalam hal ini umask diatur oleh systemd untuk 0022terlepas dari nilai yang dikonfigurasi untuk pam_umask . Saya tidak mengetahui adanya solusi, tetapi saya membuka masalah pada systemd github masalah pelacak. Masalah ini juga dilaporkan di Gnome bugzilla .

Penggunaan Umask diatur pam_umaskberfungsi seperti yang diharapkan untuk aplikasi yang tidak diluncurkan oleh systemd --user.

Satu solusi disarankan pada Ubuntu bugzilla  untuk menempatkan penggantian layanan systemd ke semua aplikasi yang terpengaruh.


Untuk menyelidiki ini sendiri

Anda dapat membuat daftar proses yang berjalan di sistem Anda dalam format pohon (proses induk / anak) menggunakan:

pstree -Tapu

Temukan PID untuk: (1) instance systemd --user sesi Anda ; (2) aplikasi yang diluncurkan olehnya , seperti gedit, yang akan ditampilkan sebagai proses anak ke systemd --user ; dan (3) proses di sesi Anda tidak diluncurkan oleh systemd --user .

Bandingkan payung yang dilaporkan dalam proksi :

grep Umask /proc/<pid>/status

systemd --user itu sendiri (1) dan proses yang tidak diluncurkan olehnya (3) harus memiliki umask yang benar yang ditetapkan oleh pam_umask . Proses yang diluncurkan oleh systemd --user (2) akan memiliki umask dari 0022.

sebasth
sumber
3

Masalahnya adalah yang disebutkan oleh Sebasth. Saya mencoba banyak hal, tetapi kemudian saya menemukan solusi yang terdiri dari menimpa UMask (per-pengguna) dari dbus:

$ systemctl --user edit dbus

Dalam file yang dibuka, cukup tulis:

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

File akan disimpan dalam .config / systemd / user / dbus.service.d / override.conf dan menimpa umask default dbus, yang saya anggap diwarisi dari systemd --user, karena dbus diluncurkan olehnya. Cukup keluar dan masuk lagi dan aplikasi gnome harus menggunakan umask yang ditentukan. Hanya solusi, tetapi berhasil untuk saya.

egdoc
sumber
2

Alih-alih mengubah umaskAnda bisa menggunakan usergroupsopsi untuk pam_umask, dengan pengguna dan grup ini memiliki izin yang sama, seperti cara unix klasik untuk berbagi folder.

# /etc/pam.d/login or
# /etc/pam.d/common-session or system-auth
session optional pam_umask.so usergroups
xae
sumber
1
Jika pengguna bukan root dan nama pengguna sama dengan nama grup utama , bit grup umask ditetapkan sama dengan bit pemilik (contoh: 022 -> 002, 077 -> 007).
Christophe Drevet-Droguet
Saya menggunakan grup utama sebagai grup berbagi. Dengan grup pengguna, file akan dibuat dengan grup pengguna ini secara default, dan tidak dapat diedit oleh pengguna lain.
Christophe Drevet-Droguet
1
Saya melihat caranya: saya dapat menggunakan grup pengguna, dan grup sekunder umum, dan kemudian, pada bagan bersama, tambahkan bit "set group" untuk memaksa grup umum ini pada semua file dan folder yang dibuat. Bagaimanapun, saya akan mencoba di PC saya nanti. Saya tidak yakin gnome akan peduli tentang itu, karena selalu mengambil 0022 sebagai umask, tidak peduli apa yang bekerja untuk sesi tty.
Christophe Drevet-Droguet
1

Untuk mengatur umask default sistem Anda harus mengaktifkannya, yang dijelaskan di sini:

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

Tautan di atas adalah untuk debian dan ubuntu tetapi sama untuk semua sistem linux lainnya.

Untuk mengaktifkannya umask (yang mungkin sudah ada di tempat) Anda perlu menambahkan baris ke /etc/pam.d/common-session:

session optional pam_umask.so

Setelah diaktifkan, Anda dapat mengaturnya di:

/etc/login.defs

Saya melihat Anda sudah menemukan file ini sehingga yang perlu Anda lakukan hanyalah mengatur:

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

Dan aturlah UMASK ke 0002 atau apa pun yang Anda inginkan.

Ini akan mengatur seluruh nilai default sistem, yang berarti semua pengguna akan mengambil umask dari sana kecuali mereka tidak secara khusus mengatur lain di .profile atau .bashrc mereka

ostendali
sumber
Terima kasih atas jawaban Anda. Saya harus mencobanya. Saya tidak terlalu optimis karena saya sudah mencoba modul PAM ini dengan parameter inline "umask = 0002" dan tidak berfungsi (untuk Gnome, itu memang berhasil untuk shell login lain, walaupun). Saya akan mencoba saran Anda.
Christophe Drevet-Droguet
Anda mencoba modul pam untuk sistem-auth bukan common-auth :-)
ostendali
3
Ini hanya soal pilihan distribusi nama file. Saya tahu penggunaan debian common-*untuk pengaturan umum. Arch, seperti RedHat, menggunakan system-authfile untuk ini. Lagi pula, saya mencoba saran Anda untuk menambahkan session optional pam_umask.sodan UMASK 002ke /etc/login.defsSeperti yang saya harapkan, dan seperti halnya pam_umask.so umask=0002, itu berhasil untuk loginsesi tty (atau melalui SSH) tetapi Gnome menetapkan 0022umask seperti biasa. Gnome harus menggunakan pengaturan umask internal, atau archlinux menggunakan ... Saya akan mencoba distribusi lain untuk melihat apakah masalah muncul juga.
Christophe Drevet-Droguet
1

Untuk sesi login: tambahkan umask 0002ke $HOME/.profile(atau /etc/profile) Anda.

Untuk sesi Gnome: tambahkan umask 0002ke$HOME/.gnomerc

ctruta
sumber
1

EDIT: Untuk mendapatkan systemd untuk mengatur umask sesi gnome, saya membuat file umask.conf di bawah /etc/systemd/system/display-manager.service.d/ dengan baris berikut:


[Service]
UMask=0002

Setelah me-reboot mesin, ini sekarang memungkinkan semua proses di bawah user.sliceuntuk menyesuaikan dengan umask yang Anda inginkan. Keluar tidak cukup untuk perubahan terjadi sehingga saya akan menyarankan untuk me-reboot mesin Anda sebelum melakukan tes pada proses umasks.

Info Tambahan:

  • OS: CentOS7.4
  • DE: Gnome3
jamalm
sumber
3
Jika itu berfungsi, maka file seperti /etc/systemd/system/gdm.service.d/umask.confmengandung hanya [Service]\nUMask=0002cukup.
Christophe Drevet-Droguet
Dan memang benar! baru saja mengujinya di sana. / etc / systemd / system / folder saya berisi symlink ke gdm.service jadi saya membuat display-manager.service.d / umask.conf dan menambahkan baris, ini berfungsi dengan baik, akan memperbarui jawaban untuk memasukkannya. Terima kasih you @ ChristopheDrevet-Droguet
jamalm
0

Hanya ingin menambahkan bahwa halaman pam_umaskmanual memberikan beberapa informasi yang cukup bagus untuk membantu Anda mengetahui dari mana umask Anda berasal. Secara khusus:

pam_umask adalah modul PAM untuk mengatur topeng mode pembuatan file dari lingkungan saat ini. Umask memengaruhi izin default yang ditetapkan untuk file yang baru dibuat.

Modul PAM mencoba untuk mendapatkan nilai umask dari tempat-tempat berikut dalam urutan berikut:

·   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

Seperti yang dinyatakan seseorang, Anda harus mengatur ini di common-sessionfile di direktori /etc/pam.d.

Perhatikan bahwa login yang tidak menggunakan pam (seperti yang menggunakan gettyatau loginakan mengatur umask mereka login.defs.

Charles Addis
sumber
0

Pada pemasangan Fedora 29 dengan Gnome saya menemukan bahwa, program yang diluncurkan dari peluncur Gnome meninggalkan file lain yang dapat dibaca, 0022. Pam tampaknya mengurung ke /etc/login.defs seperti yang disebutkan di atas. Namun, mengedit topeng di sana, 0077, tidak mengubah perilaku Gnome. Saya juga harus mengedit / etc / profile, dan ke / etc / bashrc - keduanya mengaturnya kembali ke 0022.

Akan lebih baik jika Fedora memiliki satu tempat untuk ini, tetapi entri di / etc / profile dan / etc / bashrc menetapkan mask berbeda untuk pengguna dengan ID di atas atau di bawah 200, jadi sepertinya satu mask tidak cocok untuk semua.

Meskipun ini adalah perbaikan untuk saat ini, masalahnya tidak sepenuhnya terpecahkan, karena pengguna gnome masih tidak memiliki cara untuk mengatur umasknya sendiri karena diterapkan pada aplikasi yang dijalankan dari peluncur gnome. Sepertinya Gnome harus memiliki opsi konfigurasi untuk umask itu. (Mungkin iya, tapi saya tidak menemukannya.)

pengguna244488
sumber
0

Saya punya solusinya setidaknya pada 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/[email protected]
ExecStart=-/usr/local/bin/systemd-user
Charles
sumber