Log terus bertambah tetapi tidak dapat dibuat ulang: periksa ACL direktori
Menambahkan isi ke berkas tidak memerlukan nama baru di direktorinya; membuat berkas baru memerlukannya. Bandingkan ACL akses dengan bawaan yang diwarisi sebelum memperluas apa pun.
Log yang terus tumbuh berhenti tumbuh pada saat sesuatu membuatnya ulang, dan galatnya mengatakan izin ditolak. Kesimpulan yang menggoda adalah berkas log itu sendiri perlu izin lebih banyak, padahal berkas itu mungkin sudah dapat ditulis oleh akun yang sama. Menambahkan ke nama yang sudah ada dan membuat nama baru adalah dua pemeriksaan yang berbeda, dan hanya yang kedua yang memeriksa direktori.
Menambahkan dan membuat adalah pemeriksaan berbeda
Membuka berkas yang sudah ada untuk ditambahi memerlukan akses tulis pada berkas itu ditambah akses pencarian di sepanjang setiap direktori pada jalurnya. Membuat berkas memerlukan akses tulis dan pencarian pada direktori yang memuatnya, karena operasi itu menambahkan nama ke dalamnya. Mengganti berkas melalui penggantian nama juga menyentuh kedua direktori dan aturan sticky-bit keduanya.
| Operation | What must permit it | Typical failure message |
|---|---|---|
| Append to an existing log | File write access, path traversal | Permission denied on the file |
| Create a missing log | Directory write and search access | Permission denied on the path |
| Rename a replacement into place | Both directories, plus sticky restrictions | Permission denied or operation not permitted |
Deskriptor yang sudah terbuka menambah kasus keempat. Suatu proses dapat memegang pegangan tulis yang dibuka sebelum ia melepaskan hak istimewa dan tetap gagal membuka ulang jalur yang sama di bawah identitasnya yang kemudian. Penambahan yang berhasil dan pembuatan yang gagal dapat keduanya benar, pada saat yang sama, untuk proses yang sama.
ACL bawaan diwarisi, bukan memberikan
Entri yang dimulai dengan prefiks bawaan menjelaskan apa yang diwarisi objek baru dari direktori. Entri itu tidak memberikan apa pun kepada direktori itu sendiri, dan tidak memperbaiki ACL berkas yang sudah ada.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Baca entri akses secara terpisah dari entri bawaan, dan baca mask-nya. Entri bernama yang mencantumkan hak penuh masih dapat dibatasi oleh mask, itulah sebabnya komentar efektif lebih penting daripada huruf-huruf pada baris pertama.
Gunakan jalur yang telah diresolusikan, bukan jalur dalam konfigurasi. Symlink, titik mount, atau direktori yang dirotasi dapat menempatkan berkas sebenarnya di tempat yang tidak pernah dicapai oleh izin yang Anda berikan. Telusuri jalur dengan alat nama terlebih dahulu, lalu bandingkan setiap tingkat dengan akun yang bersangkutan. Menebak direktori tingkat atas adalah cara sebuah perbaikan mendarat satu tingkat terlalu tinggi.
Kenali siapa yang menulis pada saat itu
Periksa unit layanan, drop-in-nya, dan pengaturan akun daemon itu sendiri sebelum mengubah apa pun. Proses yang menambahkan dan proses yang membuat ulang bisa berbeda: pembantu rotasi, penulis status, dan pembaca web jarang berbagi identitas.
Uji jalan dari shell root tidak mereproduksi layanan yang dibatasi, dan uji itu akan berhasil sementara layanan terus gagal. Reproduksikan operasi yang gagal di bawah unit yang sama, dengan akun yang sama dan pengaturan sandbox yang sama. Jika tidak bisa, jalankan unit dengan shell sementara dan periksa identitas yang dilaporkannya. Apa pun selain itu mengukur terminal Anda, bukan layanannya.
Jika pembuatan memang diperlukan, berikan akses penulis ke direktori log khusus dan pisahkan akses baca untuk konsumen. Menjadikan akun bersama atau seluruh pohon aplikasi dapat ditulis demi memenuhi satu panggilan pencatatan menukar masalah kecil dengan masalah besar.
Rotasi tanpa memunculkannya lagi
Siapa pun yang membuat ulang berkas menentukan pemilik dan modenya untuk siklus berikutnya, jadi selaraskan perbaikan dengan konfigurasi rotasi. Pengganti yang dibuat di bawah akun berbeda, atau dengan ACL baru, mengembalikan kegagalan setelah koreksi yang berhasil.
Tetapkan mode dan grup pada saat pembuatan, bukan sesudahnya, dan verifikasi rotasi berikutnya, bukan penambahan berikutnya. Penambahan hanya mengulang uji yang sudah lolos. Jika alat rotasi menawarkan pengaturan mode pembuatan, gunakan itu alih-alih chmod setelah pembuatan. Jeda antara pembuatan dan chmod justru adalah saat penulisan berikutnya dapat gagal.
Ketika pemotongan tetap gagal, berhenti menambah izin
Kegagalan memotong berkas yang dapat Anda tulis tidak dijelaskan oleh izin direktori, dan menambah izin itu tidak akan membantu. Lihatlah atribut dan pembatasannya: atribut append-only hanya mengizinkan penulisan dalam mode tambah, dan mount hanya-baca atau sandbox layanan dapat menolak operasi yang diizinkan ACL.
Periksa pembatasan sistem berkas unit dan opsi mount untuk jalur itu, lalu reproduksikan operasi persis yang gagal. Memperluas izin yang tidak pernah diperiksa hanya menyembunyikan pembatasan mana yang sebenarnya. Hapus satu pembatasan pada satu waktu di unit sementara, dan kembalikan sebelum mengubah apa pun yang permanen.