Ada tiga cara normal untuk menyetel umask pengguna.
- Atur
UMASK
di/etc/login.defs
- Tambahkan
pam_umask.so
ke konfigurasi PAM Anda di/etc/pam.d
- Setel di file startup shell, mis.
/etc/profile
Tidak ada perbedaan antara pengguna sistem dan pengguna biasa dalam hal ini.
Tapi saya berasumsi Anda mencoba memulai daemon dengan umask khusus?
Masalahnya adalah:semua opsi di atas terjadi saat pengguna masuk. Jika Anda menjalankan daemon, ia tidak pernah masuk. Ini dimulai dengan init, lalu dijalankan sebagai root, atau memanggil setuid
untuk dijalankan sebagai pengguna sistem yang Anda tentukan.
Opsi utama Anda adalah:
- masukkan
umask
dalam skrip init Anda (lakukangrep umask /etc/init.d/*
sebagai contoh) - konfigurasikan init untuk memulai program dengan umask khusus (umask pemula systemd.exec)
- jika menggunakan
start-stop-daemon
, berikan opsi umask - modifikasi program itu sendiri untuk memanggil fungsi umask atau panggilan sistem
Pengguna sistem berbeda dari yang 'normal' dalam tiga hal:masa berlaku sandi, direktori beranda (pengguna sistem tidak memilikinya), dan UID (pengguna sistem biasanya di bawah ambang arbitrer).
Dalam kasus umum, Anda hampir seluruhnya kurang beruntung. Anda dapat menggunakan PAM untuk menyetel umask, tetapi PAM memilih perilaku berdasarkan hal-hal selain dari ketiga perbedaan ini.
Dengan kata lain, Anda tidak bisa membuat PAM membedakan antara pengguna 'sistem' dan 'non-sistem'. Ini memberi Anda dua opsi:
-
Entah Anda menggunakan PAM untuk menyetel umask untuk semua orang (misalnya, periksa
/etc/login.defs
), lalu atur umask secara eksplisit untuk pengguna non-sistem di/etc/bash.bashrc
(atau serupa); -
Atau Anda menulis modul PAM Anda sendiri untuk melakukan ini. Saya pikir ini akan disambut baik oleh banyak orang, karena menyetel umask adalah permintaan umum.
Silakan ambil jawaban ini dengan sedikit garam. Permintaan semacam ini cukup umum, dan saya tidak akan terkejut jika ada cara yang lebih baik/tepat sekarang.