آیا 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 را تنها. گامی که تونل در آن میشکند مرز را مشخص میکند، و از بازسازی زندانی که هرگز علت نبود پرهیز میکنید.
وقتی دوباره مسیریابی کرد، یک نشست کلاینت با سطح جزئیات بالاتر اجرا کنید و خطی را بخوانید که فرمان یا مجوز شکستخورده را نام میبرد. آن خط ارزشمندتر از مهلتی است که کلاینت در نهایت گزارش میکند.