Log terus bertambah tetapi tidak dapat dicipta semula: periksa ACL direktori
Menambah pada fail tidak memerlukan nama baharu dalam direktorinya; mencipta memerlukannya. Bandingkan ACL akses dengan nilai lalai yang diwarisi sebelum meluaskan apa-apa.
Log yang terus membesar berhenti membesar pada saat sesuatu menciptanya semula, dan ralat itu menyatakan kebenaran ditolak. Kesimpulan yang menggoda ialah fail log itu sendiri memerlukan lebih banyak kebenaran, namun fail itu mungkin sudah boleh ditulis oleh akaun yang sama. Menambah pada nama sedia ada dan mencipta nama baharu ialah dua pemeriksaan berbeza, dan hanya yang kedua merujuk direktori.
Menambah dan mencipta ialah pemeriksaan berbeza
Membuka fail sedia ada untuk menambah memerlukan akses tulis pada fail itu serta akses cari sepanjang setiap direktori dalam laluannya. Mencipta fail memerlukan tulis dan cari pada direktori yang memuatkannya, kerana operasi itu menambah nama padanya. Mengganti fail melalui penamaan semula menyentuh kedua-dua direktori dan peraturan bit lekatnya juga.
| 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 kes keempat. Sesuatu proses boleh memegang pemegang tulis yang dibuka sebelum ia melepaskan keistimewaan dan masih gagal membuka semula laluan yang sama di bawah identitinya yang kemudian. Penambahan yang berjaya dan penciptaan yang gagal boleh kedua-duanya benar, pada saat yang sama, bagi proses yang sama.
ACL lalai diwarisi, ia tidak memberi
Entri yang bermula dengan awalan lalai menerangkan apa yang diwarisi objek baharu daripada direktori. Ia tidak memberi apa-apa kepada direktori itu sendiri, dan ia tidak membaiki ACL fail yang sudah wujud.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Baca entri akses secara berasingan daripada entri lalai, dan baca topengnya. Entri bernama yang menyenaraikan hak penuh masih boleh dihadkan oleh topeng, sebab itu komen berkesan lebih penting daripada huruf pada baris pertama.
Gunakan laluan yang telah diselesaikan dan bukan laluan dalam konfigurasi. Pautan simbolik, titik lekap atau direktori yang diputar boleh meletakkan fail sebenar di tempat yang tidak pernah dicapai oleh kebenaran yang anda berikan. Jalani laluan dengan alat nama dahulu, kemudian bandingkan setiap aras dengan akaun berkenaan. Meneka direktori aras atas ialah cara pembetulan mendarat satu aras terlalu tinggi.
Kenal pasti siapa yang menulis pada saat itu
Periksa unit perkhidmatan, drop-in-nya dan tetapan akaun daemon itu sendiri sebelum mengubah apa-apa. Proses yang menambah dan proses yang mencipta semula mungkin berbeza: pembantu putaran, penulis status dan pembaca web jarang berkongsi identiti.
Ujian yang dijalankan daripada shell root tidak menghasilkan semula perkhidmatan terhad, dan ia akan berjaya sementara perkhidmatan terus gagal. Hasilkan semula operasi yang gagal di bawah unit yang sama, dengan akaun yang sama dan tetapan sandbox yang sama. Jika anda tidak boleh, mulakan unit dengan shell sementara dan periksa identiti yang dilaporkannya. Apa-apa yang lain mengukur terminal anda, bukan perkhidmatan.
Jika penciptaan benar-benar diperlukan, berikan akses penulis kepada direktori log khusus dan asingkan akses baca untuk pengguna. Menjadikan akaun kongsi atau seluruh pokok aplikasi boleh ditulis untuk memenuhi satu panggilan pengelogan menukar masalah kecil dengan masalah besar.
Putar tanpa memperkenalkannya semula
Sesiapa yang mencipta semula fail itu menentukan pemilik dan modnya untuk kitaran seterusnya, jadi selaraskan pembetulan dengan konfigurasi putaran. Pengganti yang dicipta di bawah akaun lain, atau dengan ACL baharu, mengembalikan kegagalan selepas pembetulan yang berjaya.
Tetapkan mod dan kumpulan pada penciptaan, bukan selepasnya, dan sahkan putaran seterusnya dan bukan penambahan seterusnya. Penambahan hanya mengulangi ujian yang sudah lulus. Jika alat putaran menawarkan tetapan mod cipta, gunakannya dan bukan chmod selepas penciptaan. Jurang antara penciptaan dan chmod ialah tepat saat tulisan seterusnya boleh gagal.
Apabila pemangkasan tetap gagal, berhenti menambah kebenaran
Kegagalan memangkas fail yang anda boleh tulis tidak dijelaskan oleh kebenaran direktori, dan menambah lebih banyak daripadanya tidak akan membantu. Lihat atribut dan sekatan sebaliknya: atribut append-only membenarkan tulisan hanya dalam mod tambah, dan lekap baca sahaja atau sandbox perkhidmatan boleh menolak operasi yang dibenarkan oleh ACL.
Periksa sekatan sistem fail unit dan pilihan lekap untuk laluan itu, kemudian hasilkan semula operasi tepat yang gagal. Meluaskan kebenaran yang tidak pernah dirujuk hanya menyembunyikan sekatan mana yang sebenar. Buang satu sekatan pada satu masa dalam unit sekali guna, dan pulihkannya sebelum mengubah apa-apa yang kekal.