Խմբագրված mac.py-ը, որը ոչինչ չի փոխում, սովորական առաջին ախտանիշն է։ Սկավառակի վրա եղած ֆայլը այն չէ, ինչ կատարում է Access Server-ը. նույնականացման ծառայությունը սկրիպտը բեռնում է սերվերի կոնֆիգուրացիայի տվյալների բազայից, և հենց այդ պահված պատճենն է որոշում մուտքը։ Քանի դեռ պահված արժեքը չի փոխարինվել, յուրաքանչյուր փորձ ապացուցում է միայն, որ հին սկրիպտը դեռ աշխատում է։

Աշխատանքը որոշում են երեք պայման. արժեքը երբևէ դրվե՞լ է կոնֆիգուրացիայի տվյալների բազայում, ծառայությունը հրահանգ ստացե՞լ է այն նորից բեռնելու, և ձեր փոխած կոդն իսկապե՞ս կատարվում է յուրաքանչյուր կապակցման ժամանակ։ Յուրաքանչյուրն ունի տարբեր ախտանիշ, և սխալը շտկելը վատնում է սպասարկման պատուհանը։

Ֆայլը աղբյուր է, ոչ թե աշխատող պատճենը

Access Server-ը post-auth սկրիպտը պահում է auth.module.post_auth_script բանալու տակ։ Ֆայլը խմբագրելը թարմացնում է միայն ձեր աշխատանքային պատճենը։ Դեմոնը կարդում է պահված արժեքը, ուստի փոփոխությունը մնում է անտեսանելի, մինչև չջնջեք հին գրառումը և նոր ֆայլը չդնեք նրա տեղը։ Այդ պահված արժեքը միակ պատճենն է, որին դիմում է նույնականացման ծառայությունը։

Կարդացեք այն փոխելուց առաջ։ Եթե այն արդեն համընկնում է ձեր խմբագրած ֆայլի հետ, խնդիրը պահոցում չէ, և անցեք ծավալի հարցին։ Եթե այն ցույց է տալիս ավելի հին տարբերակ, փոփոխությունը ծառայություն չի հասել։

./sacli -k auth.module.post_auth_script ConfigGet

Փոխարինեք պահված պատճենը, ապա կիրառեք այն

Գրելուց առաջ ջնջելը զարդարանք չէ։ ConfigPut-ը --value_file-ի հետ փոխարինում է արժեքը մեկ քայլով, իսկ սկզբում ConfigDel անելը անհնարին է դարձնում հնացած կամ վնասված գրառման մնալը։ Նախքան սկսելը պահեք աշխատող սկրիպտի պատճենը սկրիպտների պանակից դուրս։

./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-ը կիրառում է փոփոխված կոնֆիգուրացիան ներքին ծառայությունների վրա, և հենց դա է նոր սկրիպտին ուժի մեջ դնում։ Սա նույնը չէ, ինչ ամբողջ մեքենան կամ դեմոնը վերագործարկելը, և չպետք է փոխարինվի դրանով, եթե ձեր փոփոխությունը դա չի պահանջում։

Արժեքի ֆայլի համար օգտագործեք բացարձակ ուղի և հաստատեք, որ root-ը կարող է կարդալ այն։ Ուղին, որը լուծվում է ձեր shell-ից, բայց ոչ ծառայության հաշվից, ստեղծում է պահված արժեք, որը ConfigGet-ում ճիշտ է թվում և ձախողվում է առաջին մուտքի ժամանակ։ Ստուգեք պահված արդյունքը ևս մեկ անգամ sacli start-ից հետո, ոչ թե առաջ։

Մոդուլի ծավալ, թե յուրաքանչյուր կապակցման համար. որտեղ պետք է լինի հարցումը

Python-ը մոդուլի մակարդակի հայտարարությունները կատարում է մեկ անգամ՝ սկրիպտը բեռնելիս։ Ուստի ֆայլի վերևում գրված տվյալների բազայի հարցումը բեռնման պահին կարդում է աղյուսակը և այդ պատասխանը պահում յուրաքանչյուր հաջորդ կապակցման համար։ Սա է երկրորդ պատճառը, թե ինչու փոփոխությունը թվում է, թե ոչինչ չի անում. կոդը կատարվում է, բայց ոչ այն պահին, երբ սպասում եք։

Տեղադրեք հարցումը post_auth մշակիչի ներսում, որպեսզի այն կատարվի յուրաքանչյուր նույնականացման համար։ Պահեք փաստաթղթավորված ստորագրությունը, հարմարեցրեք մշակիչի ստացած նույնականացման արդյունքը և վերադարձրեք նույն օբյեկտը՝ մերկ թվի փոխարեն։

Կապակցման կառավարումը նույնպես պահեք մշակիչի ներսում։ Ներմուծման ժամանակ բացված կապակցումը սերվերը կարող է փակել նախքան առաջին օգտվողի մուտքը, և առաջացած սխալը թվում է մերժված հավատարմագիր, ոչ թե կոտրված սկրիպտ։

Մերժման երկու ուղի, մեկ սեփականատեր

Եթե որոշումը տեղական հարցում է, արդյունքը պատկանում է Python մշակիչին։ Եթե դա արտաքին HTTP ստուգում է, թող հրամանի ելքի կարգավիճակը կրի պատասխանը. ոչ զրոյական կոդով դուրս եկող փաթաթան մերժում է մուտքը, և վերջին հրամանի կարգավիճակը դառնում է սկրիպտի կարգավիճակը՝ առանց բացահայտ exit-ի։

Գաղտնիքը պահեք գործընթացների ցանկից դուրս։ root-ի համար ընթեռնելի ֆայլը կամ ծառայության փոխանցած միջավայրի արժեքը ավելի անվտանգ է, քան արգումենտը, որը ցանկացած տեղական օգտվող կարող է կարդալ ps-ից։ Ամրացրեք վերջնակետը փոփոխականում մինչև կանչը, որպեսզի տառասխալը ձախողվի կարգավորման պահին, ոչ թե ինչ-որ մեկի մուտքի ժամանակ։ Պտտեք այդ գաղտնիքը ինչպես ցանկացած այլ հավատարմագիր։

Յուրաքանչյուր ստուգման համար ընտրեք մեկ սեփականատեր։ Սկրիպտը, որը և՛ հարցնում է տվյալների բազան, և՛ կանչում HTTP ծառայություն, պահանջում է հռչակված առաջնահերթության կանոն այն դեպքի համար, երբ երկուսը հակասում են, այլապես մատյանում մերժման պատճառը չի համընկնի օգտվողին ասվածի հետ։

Կիրառեք առանց ադմինիստրատորին արգելափակելու

Երկու պաշտպանություն փոփոխությունը դարձնում են հետադարձելի. երկրորդ ադմին հաշիվ, որը կախված չէ սկրիպտից, և հայտնի լավ պատճեն՝ պահված սկրիպտների պանակից դուրս։ Կիրառեք փոփոխությունը սպասարկման պատուհանում, ապա անջատվելուց առաջ դիտեք մեկ փորձնական մուտք և մեկ դիտավորյալ մերժում։ Եթե մատյանը նույնականացման որոշման փոխարեն ցույց է տալիս շարահյուսական սխալ, պահված սկրիպտը կոտրված է, և ամեն մուտք կձախողվի։

Երկու պայման ասում է սպասել. դուք չեք կարող կարդալ արժեքի ֆայլը որպես root, կամ չունեք երկրորդ ուղի դեպի ադմինիստրատորի միջերես։ Երկուսն էլ փոքր փոփոխությունը դարձնում են արգելափակում, և ոչ մեկը արժանի չէ փորձարկման արտադրական սերվերի վրա օրվա վերջում։ Access Server-ի փաստաթղթերը ընդգրկում են post-auth միջերեսը և նրա աջակցվող դաշտերը։

Առնչվող հոդվածներ