Saya menulis proses daemon untuk sistem Debian Cyang menggunakan Socket Unix Domain .
Jika direktori kerja proses daemon adalah direktori root, apakah ada direktori idiomatik untuk menempatkan soket pada sistem file?
Saya menulis proses daemon untuk sistem Debian Cyang menggunakan Socket Unix Domain .
Jika direktori kerja proses daemon adalah direktori root, apakah ada direktori idiomatik untuk menempatkan soket pada sistem file?
Jawaban:
Mereka umumnya ditemukan di /tmpatau subdirektori daripadanya. Perhatikan bahwa semua yang ada di /tmpdalamnya 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 /tmpdapat dibaca dunia.
/rundan /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 /tmpatau 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 /tmpatau /run. Namun, seperti yang ditunjukkan jordanm dalam komentar, /usrdapat 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, /etcadalah 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 /runatau /var/runsaat 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.
/runatau /var/runjuga sering digunakan untuk proses root.
/tmp. Saya akan mengeditnya.
/usrdapat dipasang sebagai hanya baca. File tidak boleh dibuat di sana saat runtime. Saran lainnya bagus.
/tmp/.APPNAME/.APPSOCKkarena daemon tidak memerlukan data persisten.
/tmpdan /run, adalah bahwa hanya root yang memiliki izin menulis /run.