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.

OperationWhat must permit itTypical failure message
Append to an existing logFile write access, path traversalPermission denied on the file
Create a missing logDirectory write and search accessPermission denied on the path
Rename a replacement into placeBoth directories, plus sticky restrictionsPermission 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.

Artikel berkaitan