sudo, &, -b বা --daemon: OpenVPN ক্লায়েন্টকে ব্যাকগ্রাউন্ডে চালানোর উপায়
অ্যাম্পারস্যান্ড টার্মিনাল মুক্ত করে, লগইন নয়। sudo -b, --daemon ও একটি সার্ভিস ইনস্ট্যান্স তুলনা করুন—প্রসেসের মালিক কে আর প্রম্পটের উত্তর কে দেয়।
‘ব্যাকগ্রাউন্ডে চালাও’ বাক্যাংশের ভেতরে দুটি প্রশ্ন লুকিয়ে আছে। প্রথমটি হলো এই ব্যবহারকারী আদৌ একটি বিশেষাধিকারপ্রাপ্ত প্রসেস শুরু করতে পারেন কি না; দ্বিতীয়টি হলো কেউ টার্মিনালে টাইপ না করেও সেশন চলতে পারে কি না। শেলের অ্যাম্পারস্যান্ড কোনোটিরই উত্তর দেয় না, আর sudo পাসওয়ার্ড একটি ভেরিয়েবলে রাখা স্ক্রিপ্ট প্রথমটির খারাপ উত্তর দেয় এবং দ্বিতীয়টিকে অক্ষত রাখে। এগুলো আলাদা করুন, তাহলে বিকল্পগুলো তুলনা করা সহজ হয়ে যাবে।
তিনটি প্রার্থীকে সুবিধা নয়, মালিকানা দিয়ে তুলনা করুন।
টার্মিনাল ছাড়ার তিনটি উপায়, তিনজন ভিন্ন মালিক
কোনো কমান্ডের শেষে অ্যাম্পারস্যান্ড যোগ করলে শেল সেটিকে ব্যাকগ্রাউন্ড জব হিসেবে চালায়, আর জবটি সেই শেলেরই থাকে। প্রোগ্রাম শুরুর আগেই sudo প্রম্পট দিতে পারে, আর OpenVPN পরে কী পাসফ্রেজ বা লগইনের জন্য প্রম্পট দিতে পারে। ইনপুট প্রত্যাশা করে এমন কমান্ড ব্যাকগ্রাউন্ডে পাঠালে এমন একটি প্রসেস তৈরি হয় যা এমন টার্মিনালের অপেক্ষায় থাকে যা কেউ দেখছে না। টার্মিনাল মুক্ত হয়; মিথস্ক্রিয়া নয়।
এটি সবচেয়ে সস্তা বিকল্প এবং সবচেয়ে বিভ্রান্তিকরভাবে ব্যর্থ হয়, কারণ প্রম্পটটি এমন জায়গায় দেখা যায় যা অপারেটর ইতিমধ্যে ছেড়ে গেছে।
sudo -b ক্রেডেনশিয়াল হ্যান্ডলার নয়
sudo -b sudo-এর নিজের দৃষ্টিকোণ থেকে কমান্ডটি ব্যাকগ্রাউন্ডে চালায়, যা শুনতে অনুপস্থিত ফিচারের মতো, কিন্তু তা নয়। sudo ম্যানুয়াল অনুসারে, ইন্টারঅ্যাকটিভ কমান্ড সাধারণত ওই মোডে খারাপ আচরণ করে, আর শেল জব কন্ট্রোল তার তৈরি প্রসেসগুলো পরিচালনা করতে পারে না। এটি প্রসেসটিকে সরায়, কিন্তু প্রশ্নের উত্তর দেওয়ার কোনো উপায় দেয় না। এতে ব্যক্তিগত কী-এর পাসফ্রেজ বা গেটওয়ে লগইন কিছুই সরবরাহ হয় না।
সংযোগে ইন্টারঅ্যাকশন দরকার হলে সমাধান হলো একটি সমর্থিত নন-ইন্টারঅ্যাকটিভ প্রমাণীকরণ ব্যবস্থা, একই প্রম্পট চালু করার ভিন্ন উপায় নয়।
--daemon প্রোগ্রাম বদলায়, লগইন নয়
--daemon OpenVPN-কেই ইনিশিয়ালাইজেশনের পর বিচ্ছিন্ন হতে বলে। 2.6 ম্যানুয়াল লক্ষ করে যে syslog পুনর্নির্দেশনা অপশনটি পার্স করার সময়ই ঘটে, যদিও বিচ্ছিন্নতা পরে ঘটে, তাই বার্তাগুলো প্রত্যাশার চেয়ে আগেই টার্মিনালে দেখা বন্ধ করতে পারে। ওই বিন্দুর পরের নীরবতা টানেল সম্পর্কে কিছুই প্রমাণ করে না। স্পষ্টভাবে --log বা --log-append যোগ করুন যাতে আউটপুট এমন জায়গায় পৌঁছায় যা আপনি পড়তে পারেন।
ডেমন মোড কনসোলটিও স্থায়ীভাবে সরিয়ে দেয়। সুরক্ষিত ব্যক্তিগত কী-এর জন্য ওই মোডে askpass দরকার, আর কনসোল থেকে দেওয়া ক্রেডেনশিয়াল ক্যাশিং অপশনের সঙ্গে মিলে পরবর্তী পুনঃপ্রমাণীকরণকে প্রশ্ন করার জায়গা ছাড়া রেখে দিতে পারে। ব্যাকগ্রাউন্ড শুরু প্রথম কী পুনর্নবীকরণ টিকবে বলে ধরে নেওয়ার আগে ইনস্টল করা সংস্করণের সঙ্গে প্রমাণীকরণ মডেল মিলিয়ে দেখুন।
sudo যাচাই কী দেয় আর কী দেয় না
sudo -v ক্যাশ করা স্থানীয় ক্রেডেনশিয়াল যাচাই বা রিফ্রেশ করে, নীতি চাইলে প্রমাণীকরণ করে। এটি OpenVPN শুরু করে না, গেটওয়েতে প্রমাণীকরণ করে না, এবং স্ক্রিপ্টের পরবর্তী কমান্ড অনুমোদিত হবে তার নিশ্চয়তা দেয় না। sudo -n এর বিপরীত বোঝায়: প্রম্পট দেবেন না, বরং ব্যর্থ হোন। এটি স্থানীয় অনুমোদন ব্যর্থতাকে স্পষ্ট করে, যা কাজে লাগে, আর OpenVPN পরে কী চাইবে সে সম্পর্কে কিছুই বলে না।
কোনো বিকল্পই সবাইকে পাসওয়ার্ডহীন কমান্ড দেওয়া বা অ্যাডমিনিস্ট্রেটর পাসওয়ার্ড স্ক্রিপ্টে পাঠানোর কারণ নয়।
যে মালিককে পর্যবেক্ষণ করা যায় তাকেই বেছে নিন
মেশিনের মালিকানাধীন টানেলের জন্য ডিস্ট্রিবিউশন যে সার্ভিস ইনস্ট্যান্স সমর্থন করে তা ব্যবহার করুন। সেই মালিক শুরু, বন্ধ, স্ট্যাটাস ও লগ দেয়, আর আপনার সেশন শেষ হলেও টিকে থাকে। শেল ব্যাকগ্রাউন্ডিং, ডেমনাইজেশন আর রিস্টার্ট লুপ একে অপরের চারপাশে সাজালে এক টানেলের জন্য তিনজন মালিক তৈরি হয় এবং কোনটি চলছে তার স্পষ্ট উত্তর থাকে না।
যাই বেছে নিন, টানেলটি যে রিসোর্সের জন্য আছে তা যাচাই করুন। সফল শুরু করার অনুরোধ একটি প্রসেস ইভেন্ট, কাজ করা সংযোগের প্রমাণ নয়।