PrivateTmp: hook menulis fail itu, tetapi ke mana ia pergi?
Ruang nama sementara persendirian menyembunyikan fail itu dan bukannya memadamnya. Periksa akar proses sebelum mengubah unit, kemudian beri data kongsi laluan yang sebenar.
Hook melaporkan kejayaan, dan laluan yang sama masih kelihatan kosong dari shell. Kedua-dua kenyataan boleh benar serentak, kerana perkhidmatan systemd boleh hidup dalam ruang nama mount sendiri dengan direktori sementara persendirian. Setelah itu difahami, persoalan menarik ialah sama ada penulisan itu berjaya sama sekali.
Dua direktori sementara, satu laluan
Tetapan pengasingan memberi unit pandangan persendirian terhadap direktori sementara dan bukannya menjadikannya baca sahaja. Proses di luar unit tidak dapat melihat apa yang ditulisnya di sana, dan apa sahaja yang ditinggalkannya dibuang apabila unit berhenti. Jadi laluan yang dicetak oleh hook dan laluan yang diperiksa dari shell boleh merujuk kepada objek berbeza dengan nama yang sama.
Ini masalah keterlihatan, dan ia kelihatan seperti masalah kehilangan data. Tiada apa yang dipadamkan, kerana fail itu hanya berada dalam ruang nama yang shell bukan ahlinya. Perintah yang sama berkelakuan berbeza apabila dijalankan di dalam unit, dan pemerhatian itulah yang biasanya menyelesaikan perdebatan. Baca tetapan unit sebelum membuat sebarang kesimpulan tentang penulisan itu.
Pisahkan yang tidak kelihatan daripada yang tidak boleh ditulis
Penulisan berjaya dan pembukaan yang gagal menghasilkan bukti berbeza, dan perbezaan itulah yang menentukan pembaikan. Jika hook berkata fail telah dicipta tetapi pembaca luar tidak menjumpainya, anda mempunyai persoalan ruang nama. Jika hook melaporkan ralat kebenaran atau pembukaan yang gagal, fail itu tidak pernah ditulis dan tiada perubahan ruang nama akan membantu.
systemctl show [email protected] -p PrivateTmp -p User -p Group -p RuntimeDirectory
systemctl show [email protected] -p MainPID --value
sudo ls -l /proc/PID/root/tmp/client-stateLaluan akar proses mendedahkan pandangan sistem fail perkhidmatan itu sendiri, tertakluk kepada semakan kebenaran pada proses itu selagi ia masih berjalan. Baca jurnal unit dalam sesi yang sama, kerana ralat penulisan dan fail yang hilang mudah dikelirukan apabila seseorang sudah menetapkan puncanya.
Beri data kongsi lokasi yang jelas
Data yang hanya diperlukan oleh perkhidmatan itu terletak dalam direktori sementara persendiriannya. Data yang perlu dibaca oleh proses lain memerlukan laluan yang ditakrifkan untuk kedua-duanya, dengan pemilik, mod dan tamat tempoh yang dinyatakan. Tentukan yang mana antara dua kes itu anda miliki sebelum menyunting unit. Kebanyakan insiden ini datang daripada memperlakukan fail persendirian sebagai fail kongsi.
[Service]
RuntimeDirectory=openvpn-hook-office
RuntimeDirectoryMode=0750Direktori masa jalan meletakkan folder di bawah kawasan masa jalan sistem, menciptanya untuk pengguna dan kumpulan unit yang dikonfigurasikan, dan mengalihkannya apabila unit berhenti. Tambahkan melalui drop-in supaya unit pakej kekal utuh, kemudian muat semula pengurus dan mulakan semula instans itu, sambil menerima bahawa kliennya akan bersambung semula.
Kekalkan mana-mana direktori masa jalan yang sudah diperlukan oleh unit yang dipasang. Menggantikan senarai dan bukannya menambah padanya ialah cara biasa untuk merosakkan ciri tidak berkaitan yang tiada siapa kaitkan dengan perubahan itu.
Dua lapisan keistimewaan boleh tidak bersetuju
Pengurus perkhidmatan mencipta direktori untuk pengguna unit yang dikonfigurasikan, manakala daemon VPN boleh turun secara berasingan ke akaunnya sendiri sebelum menjalankan hook sambungan. Itu lapisan yang berbeza, dan ia boleh menamakan identiti yang berbeza.
Direktori milik root dengan mod ketat kelihatan sepenuhnya kepada daemon yang sudah melepaskan keistimewaannya, dan masih tidak boleh ditulis olehnya. Ralat itu kemudian dibaca sebagai masalah kebenaran walaupun laluan itu wujud tepat di tempat yang anda jangkakan. Bandingkan pemilik direktori dengan identiti yang dilaporkan oleh hook. Apabila kedua-duanya berbeza, mod itu tidak pernah menjadi persoalannya.
Periksa identiti yang sebenarnya digunakan oleh hook sebelum menukar pemilikan. Menukar pengguna pelaksanaan perkhidmatan untuk membaiki direktori boleh mengubah akses peranti dan keistimewaan rangkaian di tempat lain, dan itu harga yang mahal untuk masalah kecil.
Sahkan keseluruhan penyerahan
Sahkan empat perkara serentak: hook menulis dengan identiti sebenarnya, pembaca yang dimaksudkan boleh menggunakan fail itu, pengguna tidak berkaitan tidak boleh, dan menghentikan unit membersihkan seperti yang direka. Kemunculan fail dalam direktori sementara kongsi hos bukan keperluan, dan biasanya ia tanda bahawa pertukaran itu tidak pernah mendapat laluannya sendiri. Uji pembaca selepas mula semula, bukan hanya semasa larian pertama. Tingkah laku pembersihan ialah sebahagian daripada reka bentuk, jadi perhatikan dan jangan andaikan.
Keadaan berterusan tergolong di tempat yang hayatnya sepadan, kerana direktori masa jalan memang dimaksudkan untuk hilang. Pilih lokasi berdasarkan hayat dan bukan kemudahan. Tabiat itu menghalang versi seterusnya bagi penyiasatan yang sama.