OpenVPN-ийн auth-user-pass-verify скрипт: гарах кодыг зөв болгох
Хукийн гарах төлөв нь шийдвэр, түүний лог мөр биш. Баталгаажуулагчийн үр дүнг 0, 1 эсвэл хойшлуулсан руу буулгаж, итгэмжлэлийн файлыг өгөгдөл болгон уншиж, алдаа гарвал хаалттайгаар бүтэлгүйтээрэй.
OpenVPN нэвтрэх скриптийн яг нэг гаралт дээр ажилладаг: гарах төлөв дээр. Скриптийн хийдэг бусад бүх зүйл чимэглэл юм. Хук зөв баталгаажуулагчдад хүрч, хариултыг шинжлээд, найрсаг мөр хэвлэж чаддаг ч зохиогчийн санаархсан зүйлийн эсрэг утгатай төлөв буцаадаг. Эхлээд гэрээг уншиж, түүнийг тойруулан адаптер бичээрэй, тэгвэл энэ бүх алдааны анги алга болно.
Гэрээ нь жижиг: илгээсэн бүртгэлийг тодорхойлж, зөвшөөрөгдсөн баталгаажуулагчаас зориудын асуултыг асууж, тухайн хүсэлтэд зөвхөн тэр баталгаажуулагчийн баримтжуулсан эерэг үр дүнг хүлээн авна. Бусад бүх зүйл дэд бүтэц юм.
Хук буцааж болох гурван төлөв
auth-user-pass-verify хувьд OpenVPN 2.6 гарын авлага гарах код 0-ийг хүлээн авалт, 1-ийг татгалзал, 2-ыг хойшлуулсан баталгаажуулалт гэж тодорхойлдог. Серверийн ойлгодог цорын ганц гурван хариулт эдгээр бөгөөд тус бүр холболтод өөр үр дагавартай. Сүүлийн командынхаа төлөвөөр гардаг скрипт нь үнэн хэрэгтээ лог дуудлага эсвэл цэвэрлэх алхамд санал өгөх боломж олгосон. Төлөвийг салбар бүрт тодорхой бичээрэй, баталгаажуулагч хүрч чадаагүй салбаруудыг оролцуулан.
HTTP-ийн амжилт ба баталгаажуулалтын амжилт нь тусдаа давхаргууд бөгөөд тэдгээрийг хольж хутгах нь энэ хук алдаа гаргах хамгийн түгээмэл арга юм. 202 хариу нь хүсэлтийг боловсруулахаар хүлээн авсан гэсэн үг бөгөөд нууц үг баталгаажсан гэсэн үг биш. Хүлээгдэж буй төлөв, хариуны хэлбэр, эцсийн дүгнэлтийг танд өгсөн API гэрээнээс тодорхойлж, үнэмшилтэй харагдаж байгаа учраас талбарын нэр зохиож болохгүй.
Хэрэв хариу үнэхээр дараа ирвэл энэ нь хойшлуулсан зам бөгөөд түүнийг яг тиймээр барих ёстой. Хэзээ ч дуусахгүй хойшлуулсан оролдлого нь хугацаа дуустал нөөцийг барьж байдаг.
Итгэмжлэлийн файлыг бичигдсэнээр нь уншаарай
Баримтжуулсан файлаар дамжуулах аргад сервер хэрэглэгчийн нэр, нууц үгийг түр файлын эхний хоёр мөр болгон бичиж, тэр замыг скриптэд дамжуулж, скрипт буцаж ирэхэд файлыг устгадаг. Тэр хоёр мөрийг өгөгдөл болгон уншаарай: файлыг хэзээ ч source-оор ажиллуулж болохгүй, хэзээ ч үнэлж болохгүй, мөн агуулгыг нь процессын хүснэгт харж болох командын мөрөнд хэзээ ч нааж болохгүй. Нууц үгийг байт байтаар хадгалаарай, учир нь хэрэглэгчийн нэрийг хэвийн болгох шиг үүнийг хэвийн болгох нь итгэмжлэлийг чимээгүй өөрчилдөг. Тэр түр файлын хавтас нь байршуулалтын шийдвэр тул түүний байгаа эсэх, хост дээрх хүн бүрт уншигдахгүй эсэхийг баталгаажуулаарай.
Баталгаажуулагчийн өөрийн итгэмжлэлийг хэрэглэгчийнхээс тусад нь хадгалаарай: энэ нь гарцын интеграцид хамаарах, платформын нууцын санд амьдардаг, зөвхөн баталгаажуулах зөвшөөрөл шаарддаг тул тодорхой хүн баталгаажсаны баримт биш юм. Хукийг хоёр дахь нууц үг баталгаажуулагч болохыг ч бүү зөвшөөр. Хэшийн харьцуулалтыг гараар дахин бичих нь давталтыг оновчтой болгосноор аюулгүй болохгүй, харин арчлагдаж буй баталгаажуулагч бүртгэлийн сангийн давслаг, үнэтэй схемийг аль хэдийн ойлгодог.
Ангилах боломжгүй хариултын утгыг шийдээрэй
Хугацаа хэтрэлт, тээврийн алдаа, гажигтай хариулт, хүртээмжгүй backend нь нэг шинжийг хуваалцдаг: тэдгээрийн аль нь ч эерэг баталгаажуулалт биш. Хук тус бүрийн хувьд хаалттайгаар бүтэлгүйтэж, оператор арга хэмжээ авах боломжтой шалтгааныг бүртгэх ёстой. Тэр шалтгаан нь хамгаалагдсан логт хамаарна, холбогдох гэж буй хүнд буцааж өгөх мессежид биш.
Баталгаажуулагч руу огт хүрдэггүй замуудын хувьд ч мөн адил болгоомжтой байгаарай. Дутуу тохиргооны утга, уншигдахгүй нууц эсвэл суулгагдаагүй хамаарал нь санамсаргүй хүлээн авалтын оронд ялгаатай үйл ажиллагааны тэмдэг бүхий татгалзал үүсгэх ёстой. Тэр салбаруудыг лабораторид хамаарлыг хасаж туршаарай, тэдний талаар бодохын оронд. Лог бичих алдаа гарах төлөвийг өөрчилж чадах газарт лог бичих нь шийдвэрийн хэсэг болсон тул түүнийг хор хөнөөлгүй болгох ёстой.
Серверийн тохиргоо энд ч чухал: хэрэглэгчийн тодорхойлсон скриптүүдийг ажиллаж буй тохиргоо шаардлагатай аюулгүй байдлын түвшинд зөвшөөрсөн тохиолдолд л хүндэтгэдэг бөгөөд тэр тохиргоо нь өсгөх ёстой анхдагч биш, санаатай сонголт юм.
Дүгнэлтийг шалгаарай, хэвлэсэн мөрийг биш
Гарах төлөвийг шууд шалгадаг тест байгуулаарай. Жишээ итгэмжлэлийн файл бичиж, хукийг түүн дээр мэдэгдэж сайн, мэдэгдэж муу бүртгэлээр ажиллуулж, скриптийн хэвлэсэн текстийг биш бүрхүүлийн мэдээлсэн төлөвийг уншаарай. Тэр ганц шалгалт нь үйлчлүүлэгч холбогдохоос өмнө ихэнх гэрээний алдааг барина.
Дараа нь мөн эдгээр тохиолдлуудыг бодит үйлчлүүлэгчээр үйлдвэрлэлийн бус сонсогч руу ажиллуулж, сервер юу бүртгэснийг баталгаажуулаарай: хүлээн авсан, татгалзсан эсвэл хойшлуулсан. Идэвхгүй болгосон бүртгэл, буруу нууц үг, гажигтай баталгаажуулагчийн хариу, хугацаа хэтрэлт, хүртээмжгүй баталгаажуулагчийг хамруулаарай. Аль нэг тохиолдол таны нэрлэж чадахгүй төлөвт орвол адаптер дуусаагүй байна.
баталгаажуулагчийн үр дүнгээс гарах төлөв рүү буулгах зураглалыг агуулахад скриптийн хажууд хадгалаарай, дараагийн инженер кодонд урвуу инженерчлэл хийхгүйгээр гэрээг уншиж чадахын тулд.