Access Server mengabaikan skrip post_auth yang anda edit pada cakera
Mengedit fail post_auth pada cakera tidak melakukan apa-apa: Access Server menjalankan salinan dalam pangkalan data konfigurasinya. Ikut laluan keputusan dan arahan sacli.
mac.py yang diedit tetapi tidak mengubah apa-apa ialah gejala pertama yang biasa. Fail pada cakera bukan yang dijalankan oleh Access Server; perkhidmatan pengesahan memuatkan skrip daripada pangkalan data konfigurasi pelayan, dan salinan tersimpan itulah yang menentukan log masuk. Sehingga nilai tersimpan diganti, setiap ujian hanya membuktikan skrip lama masih berfungsi.
Tiga syarat menentukan kerja: sama ada nilai itu pernah dimasukkan ke dalam pangkalan data konfigurasi, sama ada perkhidmatan diarahkan memuatkannya semula, dan sama ada kod yang anda ubah benar-benar berjalan pada setiap sambungan. Setiap satu mempunyai gejala berbeza, dan membaiki yang salah membazirkan tetingkap penyelenggaraan.
Fail ialah sumber, bukan salinan yang berjalan
Access Server menyimpan skrip post-auth di bawah kunci auth.module.post_auth_script. Mengedit fail hanya mengemas kini salinan kerja anda. Daemon membaca nilai tersimpan, jadi perubahan itu kekal tidak kelihatan sehingga anda memadam entri lama dan meletakkan fail baharu di tempatnya. Nilai tersimpan itu satu-satunya salinan yang dirujuk oleh perkhidmatan pengesahan.
Bacanya sebelum mengubahnya. Jika ia sudah sepadan dengan fail yang anda edit, masalahnya bukan pada penyimpanan dan teruskan ke soalan skop. Jika ia menunjukkan versi lebih lama, perubahan itu tidak pernah sampai kepada perkhidmatan.
./sacli -k auth.module.post_auth_script ConfigGetGanti salinan tersimpan, kemudian gunakannya
Memadam sebelum menulis bukan hiasan. ConfigPut dengan --value_file menggantikan nilai dalam satu langkah, dan ConfigDel dahulu menjadikan mustahil untuk meninggalkan entri usang atau rosak. Simpan salinan skrip yang berfungsi di luar direktori skrip sebelum bermula.
./sacli -k auth.module.post_auth_script ConfigDel
# store the file, then apply it
./sacli -k auth.module.post_auth_script --value_file=/root/post_auth.py ConfigPut
./sacli startsacli start menggunakan konfigurasi yang diubah pada perkhidmatan dalaman, dan itulah yang menjadikan skrip baharu berkuat kuasa. Ia tidak sama dengan memulakan semula seluruh mesin atau daemon, dan tidak sepatutnya diganti dengannya kecuali perubahan anda memerlukannya.
Gunakan laluan mutlak untuk fail nilai dan pastikan root boleh membacanya. Laluan yang diselesaikan daripada shell anda tetapi tidak daripada akaun perkhidmatan menghasilkan nilai tersimpan yang kelihatan betul dalam ConfigGet dan gagal pada log masuk pertama. Periksa hasil tersimpan sekali lagi selepas sacli start, bukan sebelumnya.
Skop modul atau setiap sambungan: di mana pertanyaan itu patut berada
Python menjalankan pernyataan peringkat modul sekali sahaja, apabila skrip dimuatkan. Oleh itu pertanyaan pangkalan data yang ditulis di bahagian atas fail membaca jadual semasa pemuatan dan menyimpan jawapan itu untuk setiap sambungan berikutnya. Inilah sebab kedua mengapa sesuatu editan kelihatan tidak melakukan apa-apa: kod berjalan, tetapi bukan pada masa yang anda jangkakan.
Letakkan pertanyaan di dalam pengendali post_auth supaya ia berjalan pada setiap pengesahan. Kekalkan tandatangan yang didokumenkan, laraskan hasil pengesahan yang diterima pengendali, dan kembalikan objek yang sama dan bukannya nombor kosong.
Kekalkan juga pengendalian sambungan di dalam pengendali. Sambungan yang dibuka semasa import boleh ditutup oleh pelayan sebelum pengguna pertama log masuk, dan ralat yang terhasil kelihatan seperti kelayakan ditolak dan bukan skrip rosak.
Dua laluan penolakan, satu pemilik
Jika keputusan itu pertanyaan tempatan, pengendali Python memiliki hasilnya. Jika ia pemeriksaan HTTP luaran, biarkan status keluar arahan membawa jawapannya: pembalut yang keluar dengan kod bukan sifar menolak log masuk, dan status arahan terakhir menjadi status skrip tanpa exit yang jelas.
Simpan rahsia di luar senarai proses. Fail yang boleh dibaca root atau nilai persekitaran yang dihantar oleh perkhidmatan lebih selamat daripada argumen yang boleh dibaca oleh mana-mana pengguna tempatan daripada ps. Tetapkan titik akhir dalam pemboleh ubah sebelum panggilan, supaya kesilapan menaip gagal semasa konfigurasi dan bukan semasa seseorang log masuk. Putarkan rahsia itu seperti mana-mana kelayakan lain.
Pilih satu pemilik bagi setiap pemeriksaan. Skrip yang menanyakan pangkalan data dan memanggil perkhidmatan HTTP memerlukan peraturan keutamaan yang diisytiharkan untuk kes kedua-duanya bercanggah, jika tidak sebab penolakan dalam log tidak akan sepadan dengan apa yang diberitahu kepada pengguna.
Gunakannya tanpa mengunci pentadbir
Dua langkah keselamatan menjadikan perubahan itu boleh diterbalikkan: akaun pentadbir kedua yang tidak bergantung pada skrip, dan salinan baik yang diketahui disimpan di luar direktori skrip. Gunakan perubahan dalam tetingkap penyelenggaraan, kemudian perhatikan satu log masuk ujian dan satu penolakan yang disengajakan sebelum memutuskan sambungan. Jika log menunjukkan ralat sintaks dan bukannya keputusan pengesahan, skrip tersimpan itu rosak dan setiap log masuk akan gagal.
Dua syarat berkata tunggu: anda tidak boleh membaca fail nilai sebagai root, atau anda tiada jalan kedua ke antara muka pentadbir. Kedua-duanya menjadikan perubahan kecil sebagai terkunci di luar, dan tiada satu pun patut diuji pada pelayan pengeluaran pada penghujung hari. Dokumentasi Access Server merangkumi antara muka post-auth dan medan yang disokongnya.