chroot-dan imtina etməli, yoxsa iproute2-ni həbsxanaya köçürməli?
Natamam həbsxana yükləmədə deyil, işə salındıqdan sonra uğursuz olur. Sərtləşdirməni yumşaltmaqla ikili faylları və kitabxanaları yeni kökə köçürmək arasında seçin.
Xidmət işə düşür, müştəri qoşulur və server tərəfində heç vaxt marşrut görünmür. Ya da demon işə düşməkdən imtina edir və icra edə bilmədiyi əmri adlandırır. Hər iki nəticə eyni üç sətri izləyir, hansı ki adətən sərtləşdirmə təlimatından birlikdə köçürülür: imtiyazsız hesaba keçmək, qrupdan imtina etmək və fayl sisteminin kökünü dəyişmək. Üçündən yalnız biri faylları gizlədir və yalnız biri marşrutlaşdırma cədvəlini dəyişmək imtiyazını götürür. Onları ayırmaq həqiqətən hansı sətri istədiyinizi öyrənməyin yoludur.
Həbsxananın götürdüyü, amma demonun hələ ehtiyac duyduğu şeylər
Kök dəyişikliyi işə salındıqdan sonra baş verir, buna görə demon artıq açdığı hər şeyi saxlayır və sonra aça biləcəyi hər şeyi itirir. Bağlantının bu nöqtədən sonra işlətdiyi hər köməkçi, yüklədiyi paylaşılan kitabxanalarla birlikdə yeni kökün içində mövcud olmalıdır. Konfiqurasiya faylından və sertifikatdan qurulmuş həbsxanada heç biri yoxdur.
İmtiyazsız hesaba keçmək ayrı bir məhdudiyyətdir. Root-dan imtina etmiş proses, ikili fayl tam orada olsa belə marşrutları dəyişə və ya interfeysi qaldıra bilməyə bilər, buna görə iki nasazlıq ayrı-ayrılıqda diaqnostika edilməlidir.
Hansı düzəlişə ehtiyacınız olduğunu üç şərt həll edir
Birinci şərt qurğunuzun marşrutları necə quraşdırmasıdır. Yeni OpenVPN versiyaları interfeysi və marşrutlaşdırma cədvəlini proses daxilində konfiqurasiya edir, köhnə paketlər və fərdi quraşdırmalar isə xarici alətlərə və ya up və down skriptlərinə güvənir. Jurnal bir əmr adlandırırsa, işdə xarici alət var və həbsxana onu gizlədir. Jurnal bunun əvəzinə icazə xətası göstərirsə, problem hesabdır.
İkincisi texniki xidmətdir. Kopyalanmış ikili faylları olan həbsxana, onları təmin edən paket hər yeniləndikdə təzələnməlidir, əks halda ilk yeniləmə arxasında qırıq tunel qoyur. Üçüncüsü, müəyyən bir nəzarətin həqiqətən chroot tələb edib-etməməsidir; tələb əslində imtiyazların ayrılması ilə bağlıdırsa, hesab dəyişikliyi tək başına kifayət edə bilər.
| 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 |
İşləyən həbsxananın tərkibində nə olmalıdır
Əmr icra edən həbsxanaya ikili fayl, bağlandığı hər kitabxana və demonun gec açdığı hər cihaz düyünü lazımdır. Parçaları köçürün və VPN olmadan sınayın:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
Birinci əmr asılılıqları sadalayır və insanların atladığı da elə budur. Kitabxana tapa bilməyən kopyalanmış ikili fayl, çatışmayan ikili fayldan fərqli mesajla uğursuz olur və hər ikisi müştəri tərəfindən oxunduqda OpenVPN nasazlığı kimi görünür. Əmri həbsxana içində əl ilə icra etmək, xidməti yenidən başlatmadan nasazlığı təkrar yaradır.
Konfiqurasiyanı, sertifikatları və varsa CRL-ni də həbsxanaya köçürün, çünki demonun işə salındıqdan sonra yenidən oxumağı gözlədiyi fayl, kök dəyişdikdən sonra tapılmayacaq. Nə köçürdüyünüzü qeyd edin, çünki şəbəkə paketinin növbəti yenilənməsi orijinalları əvəz edir və həbsxananı köhnə surətdə qoyur.
Əvəzində sərtləşdirməni kiçildin
Həbsxana yalnız təlimat belə dediyi üçün varsa, o bir sətri götürüb hesab məhdudiyyətlərini saxlamaq müdafiə oluna bilən nəticədir. Demon fayl sistemi görünüşünü saxlayır və problemdən qurtulur, imtiyaz enişi isə uzunömürlü prosesdən root-u hələ də çıxarır.
Nəyin qaldığını və niyə qaldığını yazın. Nəzarəti qeyd olmadan sakitcə itirən konfiqurasiya, sərtləşdirmənin sürüşdüyü yoldur və növbəti audit sətrin niyə yox olduğunu soruşacaq.
Seçməzdən əvvəl üç sətri ikiyə bölün
Konfiqurasiyanı köçürün, hər üç direktivi söndürün və müştərinin qoşulduğunu və gözlənilən marşrutların göründüyünü təsdiqləyin. Sonra yalnız hesab sətirlərini, ardınca yalnız chroot-u yenidən aktivləşdirin. Tunelin qırıldığı addım sərhədi göstərir, və heç vaxt səbəb olmayan bir həbsxananı yenidən qurmaqdan qaçınırsınız.
Yenidən marşrutlaşdırdıqda, daha yüksək təfərrüat səviyyəsi ilə bir müştəri sessiyası işlədin və əmri və ya uğursuz olan icazəni adlandıran sətri oxuyun. O sətir, müştərinin sonda bildirdiyi fasilədən daha dəyərlidir.