Պե՞տք է հրաժարվել chroot-ից, թե՞ iproute2-ը պատճենել բանտում։
Թերի բանտը ձախողվում է մեկնարկից հետո, ոչ թե բեռնման պահին։ Ընտրեք կարծրացման թուլացման և երկուական ֆայլերի ու գրադարանների նոր արմատ պատճենելու միջև։
Ծառայությունը մեկնարկում է, հաճախորդը միանում է, և սերվերի կողմում երբեք երթուղի չի հայտնվում։ Կամ դեմոնը հրաժարվում է մեկնարկել և նշում է հրաման, որը չի կարողացել կատարել։ Երկու ելքերն էլ հետևում են նույն երեք տողերին, որոնք սովորաբար միասին պատճենվում են կարծրացման ուղեցույցից՝ անցում չարտոնված հաշվի, խմբից հրաժարում և ֆայլային համակարգի արմատի փոփոխություն։ Երեքից միայն մեկն է թաքցնում ֆայլեր, և միայն մեկն է վերցնում երթուղային աղյուսակը փոխելու իրավունքը։ Դրանք առանձնացնելը հենց այն ձևն է, որով իմանում ես, թե որ տողն ես իրականում ուզում։
Ինչ է վերցնում բանտը, ինչ դեմոնին դեռ պետք է
Արմատի փոփոխությունը տեղի է ունենում մեկնարկից հետո, ուստի դեմոնը պահպանում է այն ամենը, ինչ արդեն բացել է, և կորցնում է այն ամենը, ինչ կբացեր ավելի ուշ։ Ցանկացած օգնական, որը կապը գործարկում է այդ պահից հետո, պետք է գոյություն ունենա նոր արմատի ներսում՝ իր բեռնած ընդհանուր գրադարանների հետ միասին։ Կազմաձևման ֆայլից և վկայագրից կառուցված բանտը ոչ մեկն ունի, ոչ մյուսը։
Չարտոնված հաշվի անցումը առանձին սահմանափակում է։ Գործընթացը, որը հրաժարվել է root-ից, կարող է չկարողանալ փոխել երթուղիները կամ բարձրացնել ինտերֆեյսը նույնիսկ այն ժամանակ, երբ երկուական ֆայլը հենց այնտեղ է, ուստի երկու խափանումները պետք է ախտորոշվեն առանձին։
Որ ուղղումն է պետք, դա որոշում են երեք պայման
Առաջին պայմանն այն է, թե ինչպես է ձեր կառուցումը տեղադրում երթուղիները։ Նոր OpenVPN թողարկումները կազմաձևում են ինտերֆեյսը և երթուղային աղյուսակը գործընթացի ներսում, մինչդեռ հին փաթեթներն ու սեփական կարգավորումները հենվում են արտաքին գործիքների կամ up և down սկրիպտների վրա։ Եթե մատյանը նշում է հրաման, ներգրավված է արտաքին գործիք, և բանտը թաքցնում է այն։ Եթե մատյանը փոխարենը ցույց է տալիս թույլտվության սխալ, խնդիրը հաշվի մեջ է։
Երկրորդը սպասարկումն է։ Պատճենված երկուական ֆայլերով բանտը պետք է նորոգվի ամեն անգամ, երբ դրանք մատակարարող փաթեթը թարմացվում է, այլապես առաջին թարմացումը հետևում կթողնի կոտրված թունել։ Երրորդն այն է, թե արդյոք կոնկրետ վերահսկողությունը իսկապես պահանջում է chroot, եթե պահանջը իրականում արտոնությունների տարանջատման մասին է, ապա հաշվի փոփոխությունը մենակ կարող է բավարար լինել։
| Signal in the log | Other side of the boundary | Repair direction |
|---|---|---|
| Command not found after startup | Binary and its libraries absent inside the new root | Populate the jail, or drop the chroot line |
| Operation not permitted | Account lost the privilege to edit routes | Keep the account privileged, or pre-create routes elsewhere |
| No such device | Jail lacks the tun device node | Create the node inside, or open it before the root change |
Ինչ պետք է պարունակի աշխատող բանտը
Հրամաններ գործարկող բանտին պետք է երկուական ֆայլը, յուրաքանչյուր գրադարանը, որի հետ կապվում է, և ցանկացած սարքի հանգույց, որը դեմոնը բացում է ուշ։ Պատճենեք մասերը և փորձարկեք դրանք առանց VPN-ի նկարում՝
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Առաջին հրամանը թվարկում է կախվածությունները, և հենց այն է, որ մարդիկ բաց թողնում են։ Պատճենված երկուական ֆայլը, որը չի գտնում գրադարան, ձախողվում է այլ հաղորդագրությամբ, քան բացակայող երկուական ֆայլը, և երկուսն էլ OpenVPN-ի խափանում են թվում հաճախորդի կողմից կարդալիս։ Հրամանը ձեռքով բանտի ներսում գործարկելը վերարտադրում է խափանումը առանց ծառայությունը վերագործարկելու։
Պատճենեք նաև կազմաձևը, վկայագրերը և ցանկացած CRL բանտում, որովհետև այն ֆայլը, որը դեմոնը ակնկալում է նորից կարդալ մեկնարկից հետո, չի գտնվի արմատը փոխվելուց հետո։ Գրառեք՝ ինչ եք պատճենել, քանի որ ցանցային փաթեթի հաջորդ թարմացումը կփոխարինի բնօրինակները և բանտը կթողնի հին պատճենի վրա։
Փոխարենը փոքրացրեք կարծրացումը
Եթե բանտը գոյություն ունի միայն այն պատճառով, որ ուղեցույցն այդպես է ասել, ապա այդ մեկ տողը հեռացնելը՝ հաշվի սահմանափակումները պահպանելով, պաշտպանելի արդյունք է։ Դեմոնը պահպանում է իր տեսքը ֆայլային համակարգի վրա և կորցնում է խնդիրը, իսկ արտոնությունների իջեցումը դեռ վերցնում է root-ը երկարատև գործընթացից։
Գրառեք, թե ինչ է մնում և ինչու։ Կազմաձևը, որը լուռ կորցրել է վերահսկողություն՝ առանց գրառման, հենց այդպես է կարծրացումը շեղվում, և հաջորդ աուդիտը կհարցնի՝ ինչու տողը անհետացավ։
Նախքան ընտրելը բաժանեք երեք տողերը
Պատճենեք կազմաձևը, անջատեք բոլոր երեք հրահանգները և հաստատեք, որ հաճախորդը միանում է, և սպասվող երթուղիները հայտնվում են։ Ապա նորից միացրեք միայն հաշվի տողերը, ապա միայն chroot-ը։ Այն քայլը, որտեղ թունելը կոտրվում է, նշում է սահմանը, և դուք խուսափում եք վերակառուցել բանտ, որը երբեք պատճառ չի եղել։
Երբ այն նորից երթուղավորում է, գործարկեք մեկ հաճախորդի սեսիա ավելի բարձր մանրամասնությամբ և կարդացեք այն տողը, որը նշում է հրամանը կամ ձախողված թույլտվությունը։ Այդ տողն արժե ավելի, քան ժամկետը, որը հաճախորդը վերջում հաղորդում է։