Saya menulis proses daemon untuk sistem Debian C
yang menggunakan Socket Unix Domain .
Jika direktori kerja proses daemon adalah direktori root, apakah ada direktori idiomatik untuk menempatkan soket pada sistem file?
debian
directory-structure
daemon
socket
recursion.ninja
sumber
sumber
Jawaban:
Mereka umumnya ditemukan di
/tmp
atau subdirektori daripadanya. Perhatikan bahwa semua yang ada di/tmp
dalamnya dapat dihapus saat shutdown - bukan berarti itu terhapus, hanya perlu diperhatikan , jadi jika Anda menggunakannya, periksa apakah Anda harus membuat subdirektori setiap kali. Anda akan ingin menggunakan subdirektori jika Anda ingin membatasi akses melalui izin, karena/tmp
dapat dibaca dunia./run
dan/var/run
(yang dapat dihubungkan secara simultan) digunakan dengan cara yang serupa, tetapi mereka umumnya dipasang sebagai sistem file tmpfs - artinya mereka dibuat saat boot dan berada di memori , bukan pada disk (jadi jangan gunakan itu sebagai tempat untuk membuang jumlah data yang banyak). Untuk soket runtime, itu mungkin pilihan yang baik.Perhatikan bahwa
/run
, dan semua direktori lain yang disebutkan di sini kecuali/tmp
, hanya dapat ditulis oleh root. Untuk proses sistem, ini baik-baik saja, tetapi jika aplikasi dapat dijalankan oleh pengguna yang tidak memiliki hak istimewa, Anda ingin menggunakan/tmp
atau membuat direktori permanen di suatu tempat dan menetapkan izin untuk itu, atau menggunakan lokasi di $ HOME pengguna.Dimungkinkan untuk membuat direktori di
/usr/share
(atau/usr/local/share
) selama instalasi. Direktori dan konten di sana tidak berpotensi menuai sepatu bot karena akan berada di/tmp
atau/run
. Namun, seperti yang ditunjukkan jordanm dalam komentar,/usr
dapat dipasang hanya-baca dan pedoman hierarki sistem file linux mencerminkan hal ini . Tentu saja, itu tidak dapat dibaca-saja ketika aplikasi Anda diinstal, jadi jika Anda merasa nyaman membuat soket di sana, Anda dapat meninggalkannya dan menggunakannya nanti (Anda masih dapat menulis ke soket meskipun file hanya baca).Jika Anda menginginkan tempat yang persisten di seluruh boot yang tidak bisa dipasang hanya baca,
/etc
adalah taruhan yang cukup aman, karena ini sering digunakan untuk konfigurasi dan konfigurasi ulang di seluruh sistem. OTOH, adalah mungkin untuk memiliki sistem di mana perangkat yang mendasari seluruh sistem file root adalah read-only (misalnya, embedded system), dengan / tmp dan / dijalankan pada perangkat lain (mungkin: tmpfs dalam memori). Jadi dua strategi yang paling kuat tampaknya:Pasang soket ke lokasi permanen saat aplikasi diinstal.
Buat direktori di dalam
/run
atau/var/run
saat runtime dan masukkan soket di sana.Lakukan hal yang sama hanya di
/tmp
.Keuntungan yang pertama adalah bahwa apa pun yang terjadi, setelah aplikasi diinstal, Anda akan memiliki soket untuk digunakan. Keuntungan dari yang kedua adalah bahwa itu mungkin lebih kondusif untuk pemrograman waras. Keuntungan yang ketiga adalah tidak membutuhkan hak superuser. Seharusnya mudah untuk beralih dari satu implementasi ke implementasi lainnya jika Anda berubah pikiran nanti.
Akhirnya, ketika BatchyX muncul, Anda setidaknya harus menawarkan opsi konfigurasi untuk ini, kembali ke pilihan default Anda.
sumber
/run
atau/var/run
juga sering digunakan untuk proses root./tmp
. Saya akan mengeditnya./usr
dapat dipasang sebagai hanya baca. File tidak boleh dibuat di sana saat runtime. Saran lainnya bagus./tmp/.APPNAME/.APPSOCK
karena daemon tidak memerlukan data persisten./tmp
dan/run
, adalah bahwa hanya root yang memiliki izin menulis/run
.