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 একা। যে ধাপে টানেল ভাঙে তা সীমা চিহ্নিত করে এবং আপনি এমন জেল পুনর্নির্মাণ এড়িয়ে যান যা কখনো কারণ ছিল না।
যখন আবার রুট করে, তখন বেশি বিস্তারসহ একটি ক্লায়েন্ট সেশন চালান এবং যে লাইনটি কমান্ড বা ব্যর্থ অনুমতির নাম দেয় তা পড়ুন। ওই লাইনটি ক্লায়েন্ট শেষে যে টাইমআউট জানায় তার চেয়ে বেশি মূল্যবান।