mac.py yang diedit tetapi tidak mengubah apa pun adalah gejala pertama yang biasa. File di disk bukan yang dijalankan Access Server; layanan autentikasi memuat skrip dari basis data konfigurasi server, dan salinan tersimpan itulah yang menentukan sebuah login. Sampai nilai tersimpan diganti, setiap uji hanya membuktikan bahwa skrip lama masih bekerja.

Tiga kondisi menentukan pekerjaannya: apakah nilainya pernah dimasukkan ke basis data konfigurasi, apakah layanan diperintahkan memuat ulang, dan apakah kode yang Anda ubah benar-benar berjalan pada setiap koneksi. Masing-masing punya gejala berbeda, dan memperbaiki yang salah membuang jendela pemeliharaan.

File adalah sumber, bukan salinan yang berjalan

Access Server menyimpan skrip post-auth di bawah kunci auth.module.post_auth_script. Mengedit file hanya memperbarui salinan kerja Anda. Daemon membaca nilai tersimpan, jadi perubahan tetap tak terlihat sampai Anda menghapus entri lama dan menempatkan file baru di tempatnya. Nilai tersimpan itu satu-satunya salinan yang diperiksa layanan autentikasi.

Bacalah sebelum mengubahnya. Jika sudah cocok dengan file yang Anda edit, masalahnya bukan di penyimpanan dan lanjutkan ke pertanyaan cakupan. Jika menunjukkan versi lebih lama, perubahan tidak pernah sampai ke layanan.

./sacli -k auth.module.post_auth_script ConfigGet

Ganti salinan tersimpan, lalu terapkan

Menghapus sebelum menulis bukan hiasan. ConfigPut dengan --value_file mengganti nilai dalam satu langkah, dan ConfigDel lebih dulu membuat entri usang atau rusak mustahil tertinggal. Simpan salinan skrip yang berfungsi di luar direktori skrip sebelum mulai.

./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 start

sacli start menerapkan konfigurasi yang berubah ke layanan internal, dan itulah yang membuat skrip baru berlaku. Ini bukan hal yang sama dengan memulai ulang seluruh mesin atau daemon, dan tidak boleh digantikan olehnya kecuali perubahan Anda memerlukannya.

Gunakan jalur absolut untuk file nilai dan pastikan root dapat membacanya. Jalur yang terurai dari shell Anda tetapi tidak dari akun layanan menghasilkan nilai tersimpan yang tampak benar di ConfigGet dan gagal pada login pertama. Periksa hasil tersimpan sekali lagi setelah sacli start, bukan sebelumnya.

Cakupan modul atau per koneksi: di mana kueri seharusnya berada

Python menjalankan pernyataan tingkat modul satu kali, saat skrip dimuat. Karena itu kueri basis data yang ditulis di bagian atas file membaca tabel pada waktu pemuatan dan menyimpan jawaban itu untuk setiap koneksi berikutnya. Inilah alasan kedua sebuah editan tampak tidak melakukan apa pun: kode berjalan, tetapi tidak saat Anda mengharapkannya.

Letakkan kueri di dalam penangan post_auth agar dijalankan untuk setiap autentikasi. Pertahankan tanda tangan yang didokumentasikan, sesuaikan hasil autentikasi yang diterima penangan, dan kembalikan objek yang sama alih-alih angka telanjang.

Pertahankan juga penanganan koneksi di dalam penangan. Koneksi yang dibuka saat impor bisa ditutup server sebelum pengguna pertama masuk, dan galat yang muncul tampak seperti kredensial ditolak, bukan skrip rusak.

Dua jalur penolakan, satu pemilik

Jika keputusannya kueri lokal, penangan Python memiliki hasilnya. Jika itu pemeriksaan HTTP eksternal, biarkan status keluar perintah membawa jawabannya: pembungkus yang keluar dengan kode bukan nol menolak login, dan status perintah terakhir menjadi status skrip tanpa exit eksplisit.

Jauhkan rahasia dari daftar proses. File yang dapat dibaca root atau nilai lingkungan yang diteruskan layanan lebih aman daripada argumen yang dapat dibaca pengguna lokal mana pun dari ps. Kunci titik akhir dalam variabel sebelum panggilan, agar salah ketik gagal saat konfigurasi, bukan saat seseorang login. Putar rahasia itu seperti kredensial lain.

Pilih satu pemilik per pemeriksaan. Skrip yang menanyakan basis data sekaligus memanggil layanan HTTP memerlukan aturan prioritas yang dinyatakan untuk kasus keduanya berbeda, jika tidak alasan penolakan di log tidak akan cocok dengan yang dikatakan kepada pengguna.

Terapkan tanpa mengunci administrator

Dua pengaman membuat perubahan dapat dibalik: akun admin kedua yang tidak bergantung pada skrip, dan salinan baik yang diketahui disimpan di luar direktori skrip. Terapkan perubahan di jendela pemeliharaan, lalu amati satu login uji dan satu penolakan yang disengaja sebelum memutuskan koneksi. Jika log menunjukkan galat sintaks alih-alih keputusan autentikasi, skrip tersimpan rusak dan setiap login akan gagal.

Dua kondisi mengatakan tunggu: Anda tidak dapat membaca file nilai sebagai root, atau tidak punya jalan kedua ke antarmuka admin. Keduanya mengubah perubahan kecil menjadi terkunci di luar, dan tidak ada yang layak diuji di server produksi pada akhir hari. Dokumentasi Access Server mencakup antarmuka post-auth dan bidang yang didukungnya.

Artikel terkait