Cara mengatur umask di Ubuntu untuk proses daemon

8

Saya memiliki proses server daemon http (frambusia) yang ingin saya buat server menulis file baru dengan umask 002, sehingga pengguna lain dalam grup yang sama dapat memodifikasi, memindahkan, atau menghapus file yang dibuat oleh proses daemon. Ini ada di Ubuntu 10.04.

Tidak seperti Apache, frambusia tidak memiliki opsi konfigurasi untuk umask, jadi metode apa yang ada untuk mengatur umask dari setiap proses daemon?

Saya menemukan jawaban ini tentang mengubah skrip init untuk ditambahkan umask 002. Ini berhasil, tapi saya tidak yakin mengedit skrip init adalah cara terbaik untuk membuatnya mudah didokumentasikan dan dikonfigurasikan pada banyak mesin.

Saya juga menemukan referensi ke modul pam_umask di sini . Sepertinya ini memungkinkan per pengaturan pengguna umask untuk dikonfigurasikan di bidang GECOS dari / etc / passwd.

Apakah ada cara lain untuk mengatur umask untuk proses daemon? Dan apa yang akan menjadi cara yang disarankan?

mp3foley
sumber

Jawaban:

2

Buat .profilefile di direktori home daemon:

#!/bin/sh
umask 002

Anda dapat menemukan direktori home daemon dengan menjalankan:

getent passwd daemon | awk -F':' '{ print $6; }'

Jika itu tidak berhasil, satu-satunya solusi lain yang dapat saya pikirkan adalah mengedit /etc/init.dskrip.

Zaz
sumber
2
getent passwd daemon | awk -F ':' {print $ 6; } berfungsi juga.
Janne Pikkarainen
1
Tidak perlu digunakan sudountuk membaca /etc/passwd. Atau catdalam hal ini ( grepakan menerima nama file sebagai argumen atau hanya menggunakan getentseperti yang ditunjukkan Janne).
Dijeda sampai pemberitahuan lebih lanjut.
Ini tidak berfungsi di bawah Ubuntu 10.04. Ini mungkin karena / bin / sh terhubung ke / bin / dash, tapi saya mengubah shell default daemon ke / bin / bash dan masih tidak berfungsi. Saya pikir ini karena $ HOME / .profile tidak dapat dibaca oleh bash atau dash shell non-interaktif dan non-login. Saya tidak dapat menemukan cara mudah untuk menunjukkan ini dari baris perintah. Shell umask interaktif dapat ditampilkan dengan sudo -u daemon bash -c umask. Saya menguji non-interaktif dengan mengubah pengaturan dan me-restart daemon dan melihat izin pada file yang dibuatnya.
mp3foley
@ mp3foley: Saya tidak terbiasa dengan dash, tetapi umaskharus bekerja di dalamnya.
Zaz
Saya juga mengajukan pertanyaan pada milis daemon (frambusia). Cara terbaik adalah menambahkan pengaturan umask di skrip startup daemon di /etc/init.d/. Seseorang bahkan menambal kode sumber daemon.
mp3foley
5

Pada Ubuntu 10,04, pengaturan umask default global dapat dikontrol dengan modul pam_umask.

Beberapa detail ditemukan di blog ini yang terkait dengan Debian secara umum: http://muzso.hu/2008/01/22/default-permissions-with-libpam-umask

Modul pam_umask diinstal secara default di Ubuntu 10.04, tetapi perlu dikonfigurasi.

Edit /etc/pam.d/common-session, tambahkan baris:

session optional pam_umask.so umask=022

Kemudian per pengaturan pengguna dapat diubah dengan menjalankan perintah:

sudo chfn -o "umask=002" daemon_username

untuk menambahkan pengaturan umask ke bidang GECOS di / etc / passwd.

Ini hanya berfungsi untuk shell non-interaktif, non-login seperti ketika skrip startup daemon dijalankan saat boot.

Untuk shell login, pengaturan umask perlu dihapus dari file konfigurasi shell lain seperti / etc / profile, /etc/login.defs, atau direktori home pengguna .profile, .bashrc, dll. Jika tidak, pengaturan pam_umask ditimpa. Lihat halaman manual pam_umask untuk urutan konfigurasi.

mp3foley
sumber
1

Jika layanan dimulai melalui alat "start-stop-daemon" umask dapat ditentukan pada tingkat baris perintah dengan parameter "--umask" mis:

log_daemon_msg "Starting $DESC" "$NAME"
if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion --umask 002 ; then
        log_end_msg 0
    else
        log_end_msg 1
        RET=1
    fi

Menyesuaikan skrip awal untuk membaca detail seperti itu dari file konfigurasi mungkin lebih transparan daripada menambahkan pengaturan berbasis pengguna - ini tentu saja tergantung pada prosedur startup yang digunakan untuk daemon.

Informasi lebih lanjut dapat diambil dari man-Page: man start-stop-daemon

Beladau
sumber