কোন openvpn বাইনারি চলছে? লঞ্চ পাথ যাচাই করুন
কমান্ডের নাম, সার্ভিসের পাথ আর প্যাকেজ ফাইল তিনটি আলাদা বস্তু হতে পারে। লঞ্চ পাথ যাচাই করুন, প্যাকেজ ফাইল যাচাই করুন, তারপর র্যাপার সরান।
একটি পুরোনো সমাধান OpenVPN-এর এক্সিকিউটেবল অন্য জায়গায় সরিয়ে মূল পাথটিতে একটি shell র্যাপার রেখে গিয়েছিল। কয়েক মাস পর একটি আপগ্রেড আসে, আর সেই সমাধানটি ফিরিয়ে নেওয়া কোন ফাইলটি আসলে ক্লায়েন্ট তা নিয়ে অনুমানের খেলা হয়ে যায়। কমান্ডের নাম, সার্ভিসে কনফিগার করা এক্সিকিউটেবল আর প্যাকেজের নিজস্ব ফাইল তালিকা সবই ভিন্ন ভিন্ন বস্তু দেখাতে পারে, আর অন্যগুলো ছাড়া একটিকে মেরামত করলে এমন হোস্ট তৈরি হয় যা ঠিকঠাক দেখায় কিন্তু আরও খারাপ আচরণ করে।
সার্ভিস যে পাথটি চালু করে সেখান থেকেই শুরু করুন
টার্মিনাল আর systemd ইউনিট এক্সিকিউটেবল একভাবে সমাধান করে না। shell PATH-এ খোঁজে; ইউনিট একটি পাথের নাম দেয়, আর drop-in ওভাররাইড আপনি যে ফাইল পড়ছেন তা না ছুঁয়েই তা বদলে দিতে পারে। এই পার্থক্যই এই কাজের বেশিরভাগ বিভ্রান্তির ব্যাখ্যা দেয়। এটি আরও ঠিক করে দেয় আপনার মেরামত কোন ফাইলকে লক্ষ্য করতে হবে।
ইউনিটকে জিজ্ঞাসা করুন এটি কী চালায়, সেটি বদলানো drop-in-গুলোসহ, আর আপনি যাকে প্রামাণিক ভাবছেন সেই অংশটির বদলে ফলাফল ExecStart লাইনটি পড়ুন। তারপর সেই পাথটি যেকোনো সিম্বলিক লিঙ্ক হয়ে চূড়ান্ত ফাইল পর্যন্ত অনুসরণ করুন। এমন র্যাপার যা লুকানো ডিরেক্টরিতে exec দিয়ে শেষ হয়, এই পুরোনো সমাধানগুলোর একটি সাধারণ বিন্যাস।
কিছু বদলানোর আগে সমাধান হওয়া পাথটি লিখে রাখুন।
systemctl cat [email protected] | grep -n 'ExecStart'
readlink -f "$(command -v openvpn)"কমান্ডের নামের সঙ্গে সার্ভিসের পাথ মিলিয়ে দেখুন
দুটি উত্তর প্রায়ই ভিন্ন হয়, আর সেই পার্থক্য নিজে থেকেই ত্রুটি নয়। NetworkManager প্লাগইন নিজের পাথ চালু করতে পারে, আর একটি কন্টেইনার আরেকটি মাউন্ট করতে পারে।
মূল কথা হলো কোন মালিক ট্রাফিক পরিবেশনকারী প্রক্রিয়াটি চালু করে তা জানা। যদি ইউনিট /usr/local/sbin/openvpn-wrapper চালায় আর আপনার shell /usr/sbin/openvpn সমাধান করে, তবে দ্বিতীয় ফাইলটি ঠিক করলে সার্ভিসে কিছুই বদলায় না।
প্রতিটি প্রার্থীর মালিক কোন প্যাকেজ তা জিজ্ঞাসা করুন, তারপর ঠিক করুন ফাইলটি প্যাকেজ-পরিচালিত না স্থানীয়ভাবে রাখা। কোনো মালিক প্যাকেজ নেই এমন ফাইল হলো কেউ সচেতনভাবে সেখানে রাখা ফাইল, আর তা মুছে ফেলার আগে তার একটি নাম, মালিক আর কারণ প্রাপ্য। উল্টো ভুলটিও সাধারণ: পুরোনো সংরক্ষিত বাইনারি দিয়ে প্যাকেজ ফাইল ওভাররাইট করা, কারণ একটি ফোরাম পোস্ট একই ডিরেক্টরি ব্যবহার করেছিল।
প্যাকেজ ফাইল নিয়ে প্যাকেজ ডেটাবেসকেই বলতে দিন
সফটওয়্যারটি যখন Debian প্যাকেজ থেকে এসেছে, প্যাকেজ ডেটাবেস আপনাকে বলতে পারে এর ফাইলগুলো এখনও ইনস্টল করা জিনিসের সঙ্গে মেলে কি না। এটি সংহতির একটি সংকীর্ণ প্রশ্ন, নিরাপত্তার রায় নয়, আর কী মেরামত করবেন তা ঠিক করার সময় এই পার্থক্য গুরুত্বপূর্ণ। অমিল মানে ফাইলটি ইনস্টলেশনের পর বদলেছে, যা আপনার পুরোনো সমাধান বা বৈধ স্থানীয় সম্পাদনা হতে পারে। ফলাফল কোনটি তা মীমাংসা করে না, তাই এটি সিদ্ধান্ত নয় বরং সংকেত হিসেবে পড়ুন।
যাচাই চালান আর খালি ফলাফলকে কোনো কিছুর প্রমাণ ভাবার বদলে ফলাফলটি পড়ুন।
dpkg -S /usr/sbin/openvpn
dpkg --verify openvpndpkg ম্যানুয়াল নথিভুক্ত করে যে যাচাই ইনস্টল করা ফাইলগুলোকে স্থানীয়ভাবে রেকর্ড করা মেটাডেটার সঙ্গে তুলনা করে, যেখানে আছে সেখানে সংরক্ষিত চেকসাম ব্যবহার করে। এটি বদলানো প্যাকেজ ফাইল লক্ষ করে, আর এটি আপনাকে বলতে পারে না এর বদলে অন্য কোনো বাইনারি চালু হচ্ছে কি না।
মেরামতের আগে অবস্থা লিখে রাখুন
সমাধান হওয়া লঞ্চ পাথ, ফাইলের প্যাকেজ সম্পর্ক, র্যাপারের অবস্থান আর এটি যেসব পরিবর্তন রেকর্ড থেকে এসেছে তা সংগ্রহ করুন। পরে কাজে লাগবে এমন ইন্টিগ্রেশন কাজ থাকলে র্যাপারটি সুরক্ষিত জায়গায় কপি করুন।
পড়ার আগে র্যাপারের বিষয়বস্তু সহায়তা থ্রেডে পেস্ট করবেন না, কারণ এই স্ক্রিপ্টগুলোতে মাঝে মাঝে শংসাপত্র বা গেটওয়ে বিবরণ থাকে।
কাজ করার সময় সার্ভিস কোন প্রোফাইল ব্যবহার করে আর কে সংযুক্ত আছে তা লিখে রাখুন, কারণ টানেল পুনরায় চালু করলে আপনি যে সেশন দিয়ে হোস্ট পরিচালনা করছেন তা বিচ্ছিন্ন হতে পারে।
লঞ্চ যাচাই করুন, তারপর র্যাপার সরান
মেরামতের পর সার্ভিস চালু করুন আর প্রক্রিয়াটি আপনার উদ্দিষ্ট পাথেই চলছে তা নিশ্চিত করুন। হাতে চালানো একটি সংস্করণ কোয়েরি প্রমাণ করে ফাইলটি কাজ করে; এটি প্রমাণ করে না ইউনিট সেটিই ব্যবহার করছে।
তারপর একটি ক্লায়েন্ট আবার সংযুক্ত করুন আর দেখুন প্রোফাইলটি এখনও প্রমাণীকরণ করে কি না, কারণ মূল অপশন উপেক্ষা করা বাইনারি বদল এমনভাবে ব্যর্থ হবে যা সার্টিফিকেট সমস্যার মতো দেখায়।
স্থানচ্যুত র্যাপারটি যে পরিবর্তন রেকর্ড এটি এনেছিল সেই একই রেকর্ডের মাধ্যমে সরান। সম্পূর্ণ মেরামত বলে দেয় কোন এক্সিকিউটেবল চলে, কেন, আর কোন ফাইল সরানো হয়েছে; ফাইলের নাম ফিরিয়ে আশা করা একই জিনিস নয়।