کیا آپ 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 اکیلا۔ جس مرحلے پر ٹنل ٹوٹتا ہے وہ حد بتاتا ہے، اور آپ ایسی جیل دوبارہ بنانے سے بچتے ہیں جو کبھی وجہ نہیں تھی۔
جب یہ دوبارہ روٹ کرے، تو زیادہ تفصیل کے ساتھ ایک کلائنٹ سیشن چلائیں اور وہ لائن پڑھیں جو کمانڈ یا ناکام اجازت کا نام لیتی ہے۔ وہ لائن اس ٹائم آؤٹ سے زیادہ قیمتی ہے جو کلائنٹ آخر میں بتاتا ہے۔