- sudo আপনাকে রুট অথবা অন্যান্য ব্যবহারকারী হিসেবে কমান্ড চালানোর সুযোগ দেয় এবং এর মাধ্যমে অনুমতিকে সূক্ষ্মভাবে নিয়ন্ত্রণ করা যায়।
- /etc/sudoers এবং /etc/sudoers.d ফাইলগুলো নির্ধারণ করে দেয় যে কারা sudo ব্যবহার করতে পারবে এবং কোন কোন কমান্ডের জন্য।
- Visudo হলো sudoers সম্পাদনা করার একটি নিরাপদ উপায়, যা সিস্টেমকে অচল করে দেয় এমন ত্রুটি এড়িয়ে চলে।
- কমান্ড গ্রুপ এবং অ্যালিয়াস আপনাকে সম্পূর্ণ অ্যাক্সেস না দিয়েই প্রশাসনিক কাজ অর্পণ করার সুযোগ দেয়।
আপনি যদি প্রতিদিন লিনাক্স ব্যবহার করেন, তাহলে আজ হোক বা কাল হোক `sudo` কমান্ডের সম্মুখীন হবেনই । এটি হলো সেই প্রিফিক্স যা অনেক গুরুত্বপূর্ণ কমান্ডের আগে দেখা যায় এবং এর সাথে প্রায় সবসময়ই একটি পাসওয়ার্ড প্রম্পট থাকে। এটি কী করে, কীভাবে কাজ করে এবং এর থেকে কী কী ঝুঁকি রয়েছে, তা বোঝা আপনার সিস্টেমকে ভুলবশত নষ্ট হওয়া থেকে বাঁচানোর জন্য... এবং বারবার রুটে সুইচ না করে স্বাচ্ছন্দ্যে কাজ করার জন্য অত্যন্ত গুরুত্বপূর্ণ।
সরাসরি সুপারইউজার হিসেবে লগ ইন করার পরিবর্তে, প্রচলিত (এবং প্রস্তাবিত) পদ্ধতি হলো আপনার সাধারণ ইউজার অ্যাকাউন্টটি চালু রাখা এবং শুধুমাত্র প্রয়োজনের সময়, ঘামের মাধ্যমে সাময়িকভাবে সুযোগ-সুবিধা বৃদ্ধি করুনঐ সাধারণ অঙ্গভঙ্গিটির আড়ালে ফাইলটির মধ্যে থাকা অনুমতি, সময়, গ্রুপ এবং নিয়মকানুন নিয়ন্ত্রণের একটি সম্পূর্ণ ব্যবস্থা রয়েছে। /etc/sudoers যা কিছুটা বিস্তারিতভাবে জেনে রাখা ভালো, বিশেষ করে যদি আপনি একাধিক ব্যবহারকারী বা সার্ভার পরিচালনা করেন।
লিনাক্সে sudo বলতে ঠিক কী বোঝায়?
`sudo` কমান্ড হলো এমন একটি টুল যা একজন ব্যবহারকারীকে অন্য কোনো সিস্টেম ব্যবহারকারীর মতো প্রোগ্রাম চালানোর সুযোগ দেয়, সাধারণত রুট (সুপারইউজার) হিসেবে, তবে যথাযথভাবে কনফিগার করা থাকলে অন্য যেকোনো অ্যাকাউন্ট হিসেবেও এটি ব্যবহার করা যায়। যদিও সাধারণভাবে বলা হয় এর অর্থ হলো "সুপারইউজার যা করে", অনেক ডকুমেন্টেশন সোর্সে "ব্যবহারকারী বদলে দেওয়া" ধারণাটির কথাও উল্লেখ করা হয় : অর্থাৎ, যে ব্যবহারকারীর অধীনে কোনো কমান্ড চালানো হয়, তাকে সাময়িকভাবে প্রতিস্থাপন করা।
যেকোনো আধুনিক ডিস্ট্রিবিউশনে (ডেবিয়ান, উবুন্টু, এর ডেরিভেটিভস, অনেক SUSE-ভিত্তিক ডিস্ট্রিবিউশন ইত্যাদি) sudo আগে থেকেই ইনস্টল করা থাকে এবং এটি সাধারণ অ্যাডমিনিস্ট্রেশন ওয়ার্কফ্লোর একটি অংশ; এ বিষয়ে আরও তথ্যের জন্য আপনি লিনাক্স সফটওয়্যার টিপস অ্যান্ড ট্রিকস দেখতে পারেন । একজন সাধারণ ব্যবহারকারী সীমিত অনুমতি নিয়ে কাজ করে, অন্যদিকে রুট অ্যাকাউন্টের সিস্টেমের উপর সম্পূর্ণ নিয়ন্ত্রণ থাকে। Sudo একটি ভারসাম্য বজায় রাখে: নির্দিষ্ট ব্যবহারকারীরা রুট হিসেবে লগ ইন না করেই প্রশাসনিক কাজ করতে পারে , যা ঝুঁকি কমায় এবং তাদের কাজের একটি সুস্পষ্ট রেকর্ড রাখে।
একটি গুরুত্বপূর্ণ বিষয় হলো, যদিও sudo আপনাকে root হিসেবে কমান্ড চালানোর সুযোগ দেয়, এর মানে এই নয় যে আপনি বিশ্বব্যাপী root-এর সমস্ত সুবিধা পেয়ে যাবেন । বরং, এটি কনফিগারেশন ফাইলে সংজ্ঞায়িত নিয়ম অনুসরণ করে প্রতিটি নির্দিষ্ট এক্সিকিউশনের জন্য সুবিধা প্রদান করে। এর ফলে প্রতিটি ব্যবহারকারী sudo দিয়ে কী করতে পারবে, তার উপর উল্লেখযোগ্য সীমাবদ্ধতা আরোপ করা যায়।
সবসময় রুট হিসেবে কাজ না করার এই নীতিটি নিরাপত্তার জন্য অপরিহার্য। আপনি যত কম সময় পূর্ণ অধিকার নিয়ে কাটাবেন, আপনার দ্বারা কোনো কিছু ভেঙে যাওয়ার বা ম্যালওয়্যারের দ্বারা আপনার সেশনকে কাজে লাগানোর সম্ভাবনা তত কম থাকবে । একারণেই যেকোনো লিনাক্স অ্যাডমিন বা অ্যাডভান্সড ইউজারের দৈনন্দিন কাজে sudo অত্যন্ত গুরুত্বপূর্ণ।
বাস্তবিক স্তরে sudo কীভাবে কাজ করে
এর মৌলিক ব্যবহার খুবই সহজ: আপনি রাখেন sudo উচ্চতর বিশেষাধিকার সহ কার্যকর করতে চান এমন কমান্ডের সামনে। উদাহরণস্বরূপ, একটি সাধারণ অ্যাকাউন্ট থেকে একজন ব্যবহারকারী তৈরি করতে, আপনি এই ধরনের কিছু ব্যবহার করবেন। sudo useradd nombreযদি তুমি ছুঁড়ে ফেলার চেষ্টা করতে useradd sudo ছাড়া, আপনি সম্ভবত একটি অনুমতি সংক্রান্ত ত্রুটি বা "অনুমতি অস্বীকার করা হয়েছে" বার্তা পাবেন।
যখন আপনি আহ্বান করেন উবুন্টু টার্মিনাল সেশনে প্রথমবারের জন্য, সিস্টেম আপনাকে জিজ্ঞাসা করবে আপনি যে ব্যবহারকারী দিয়ে লগ ইন করেছেন তার পাসওয়ার্ডরুট পাসওয়ার্ড নয় (কিছু ডিস্ট্রিবিউশনের বিশেষ কনফিগারেশন ছাড়া)। যদি আপনি এটি সঠিকভাবে প্রবেশ করান এবং অনুমোদিত হন /etc/sudoerssudo নিয়ম দ্বারা নির্দিষ্ট বিশেষাধিকার সহকারে কমান্ডটি কার্যকর করা হয়।
ডিফল্টরূপে, sudo অথেনটিকেশনের একটি সীমিত মেয়াদ থাকে, যা সাধারণত প্রায় ১৫ মিনিট । যতক্ষণ আপনি টার্মিনাল সেশনটি বন্ধ না করেন এবং এই সময়টি পার না হয়, ততক্ষণ আপনি প্রতিটি কমান্ডের জন্য পাসওয়ার্ড চাওয়া ছাড়াই sudo ব্যবহার চালিয়ে যেতে পারেন। সময়সীমা শেষ হয়ে গেলে, পরবর্তী sudo কমান্ডের জন্য আবার পাসওয়ার্ডের প্রয়োজন হবে।
এই সমস্ত আচরণ ফাইলটিতে সংজ্ঞায়িত ও নিয়ন্ত্রিত হয়। /etc/sudoers এবং অন্তর্ভুক্ত ফাইলগুলিতে /etc/sudoers.d/. শুধুমাত্র সেখানে তালিকাভুক্ত যথাযথ অনুমতিপ্রাপ্ত ব্যবহারকারী এবং গ্রুপগুলোই sudo চালাতে পারে।এর ফলে খুব সূক্ষ্মভাবে নিয়ন্ত্রণ করা যায় যে, কে কী করতে পারবে, কোন মেশিনে এবং কী কমান্ডের অধীনে।
sudo কমান্ডের সাধারণ সিনট্যাক্স এবং প্রধান অপশনসমূহ
sudo ব্যবহার করার সবচেয়ে সাধারণ উপায়টি খুবই সহজ:
sudo comando
অভ্যন্তরীণভাবে, sudo বেশ কিছু অপশন গ্রহণ করে, যা দিয়ে আপনি প্রিভিলেজ চেক করতে, ভার্সন দেখতে, পাসওয়ার্ড চেক বাধ্যতামূলক করতে এবং আরও অনেক কিছু করতে পারেন। অনেক ডিস্ট্রিবিউশনে সবচেয়ে প্রচলিত কয়েকটি অপশন হলো:
- -h: sudo-তে উপলব্ধ সিনট্যাক্স এবং প্রধান অপশনগুলোসহ একটি সংক্ষিপ্ত সাহায্য বার্তা প্রদর্শন করে।
- -Vsudo প্রোগ্রামটির সংস্করণ এবং কম্পাইলেশনের বিবরণ প্রদর্শন করে।
- -vপ্রমাণীকরণ “টিকিট” নবায়ন করে, বৈধতার মেয়াদ বাড়ানো কোনো বিশেষাধিকারপ্রাপ্ত কমান্ড সরাসরি কার্যকর করার প্রয়োজন ছাড়াই।
- -kএটি বর্তমান sudo ব্যবহারের অধিকার বাতিল করে দেয়, ফলে পরের বার ব্যবহার করার সময় এটি আপনার পাসওয়ার্ড চাইবেই।
- -l: তালিকা বর্তমান ব্যবহারকারীর কী কী অধিকার আছে? sudoers কনফিগারেশনের উপর নির্ভর করে (যেমন এটি কোন কমান্ড চালাতে পারবে, কোন হোস্টে, কোন ব্যবহারকারী হিসেবে, ইত্যাদি)।
এখান থেকে, আপনি অ্যাডমিনিস্ট্রেটর প্রিভিলেজ প্রয়োজন এমন প্রায় যেকোনো কমান্ডের সাথে sudo ব্যবহার করতে পারেন: প্যাকেজ ম্যানেজার, নেটওয়ার্ক টুল, সিস্টেম সার্ভিস, ইউজার অ্যাকাউন্ট ইউটিলিটি, ফাইলের মালিকানা পরিবর্তন … এই তালিকাটি কার্যত অন্তহীন।
sudo ব্যবহারের বাস্তব উদাহরণ
সবচেয়ে সাধারণ অপারেশনগুলোর মধ্যে একটি যার জন্য উচ্চতর বিশেষাধিকার প্রয়োজন হয় তা হলো সফটওয়্যার প্যাকেজ পরিচালনা করুনSUSE-ভিত্তিক ডিস্ট্রিবিউশনগুলিতে এটি সাধারণত ব্যবহৃত হয় zypperতথাপি ডেবিয়ান/উবুন্টুতে নিম্নলিখিতটি ব্যবহৃত হয় aptউভয় ক্ষেত্রেই, যখন কোনো অপারেশন সিস্টেমে পরিবর্তন আনে (যেমন ইনস্টল, আপডেট, রিমুভ), তখন sudo প্রয়োজন হয়।
উদাহরণস্বরূপ, zypper দিয়ে একটি প্যাকেজ ইনস্টল করতে আপনি এই ধরনের কিছু ব্যবহার করবেন। sudo zypper install nombre-paqueteএবং উপযুক্ত কিছুর মতো sudo apt-get update দ্বারা অনুসরণ sudo apt-get upgradeআপনি sudo ছাড়া আপডেট করার চেষ্টা করলে সিস্টেম ফাইল লক বা পারমিশন সংক্রান্ত ত্রুটি দেখতে পাবেন, কারণ শুধুমাত্র উপযুক্ত অধিকার সম্পন্ন ব্যবহারকারীই ওই ডিরেক্টরিগুলোতে প্রবেশ করতে পারে।
আরেকটি খুব সাধারণ সংমিশ্রণ হলো ঘামের সাথে systemctlsystemd চালিত সিস্টেমে সার্ভিসগুলো পরিচালনা করার টুল। উদাহরণস্বরূপ, Apache-এর মতো কোনো সার্ভিস চালু বা পুনরায় চালু করতে, আপনাকে এই ধরনের কিছু ব্যবহার করতে হবে। sudo systemctl restart apache2তবে, কোনো সার্ভিসের অবস্থা পরীক্ষা করা, যাতে কোনো পরিবর্তন জড়িত থাকে না, তা প্রায়শই sudo ছাড়াই করা যায়: systemctl status NetworkManager সাধারণত সাধারণ অনুমতি দিয়েই এটি ব্যবহার করা যায়।
যখন ব্যবহারকারী অ্যাকাউন্ট পরিবর্তন করার প্রয়োজন হয়, তখন প্রচলিত কমান্ডটি হলো usermodহ্যাঁ, সবসময় ঘামের নিচে। উদাহরণস্বরূপ, আপনি পারেন পাসওয়ার্ডের মেয়াদ শেষ হওয়ার পর দিনের সংখ্যা নির্ধারণ করুন একটি অ্যাকাউন্ট নিষ্ক্রিয় করার আগে, একটি নির্দিষ্ট ধরনের অর্ডারের মাধ্যমে sudo usermod -f 30 nombreusuarioযেখানে ৩০ হবে মার্জিন দিন।
দক্ষিণাঞ্চলের সাথে ঘনিষ্ঠভাবে যুক্ত আরেকটি এলাকা হলো `chown` ব্যবহার করে ফাইল ও ডিরেক্টরির মালিকানা পরিবর্তন করুন।যদি আপনি চান কোনো নির্দিষ্ট ব্যবহারকারী একটি সম্পূর্ণ ট্রি-এর মালিক হোক /home/test/tux-filesআপনি এরকম কিছু চালু করবেন sudo chown -R tux /home/test/tux-filesতারপর, আপনি একটি দিয়ে ফলাফলটি যাচাই করতে পারেন ls -l সম্পত্তিটি সঠিকভাবে হালনাগাদ করা হয়েছে কিনা তা যাচাই করতে।
sudo (-u, -s, -i) ব্যবহার করে অন্যান্য ব্যবহারকারীদের মতো কমান্ড চালান।
রুট হিসেবে কমান্ড চালানোর পাশাপাশি, sudo আপনাকে অন্যান্য নির্দিষ্ট ব্যবহারকারী হিসেবেও কমান্ড চালানোর সুযোগ দেয় । এটি -u অপশন ব্যবহার করে করা হয় । একটি সহজ উদাহরণ হলো, কোনো কমান্ড প্রকৃতপক্ষে কোন ব্যবহারকারী চালাচ্ছে তা যাচাই করা:
whoami আপনার বর্তমান ব্যবহারকারীকে ফেরত দেয়, যখন sudo -u pedro whoami আপনার কনফিগারেশন যদি আপনাকে সেই ব্যবহারকারী হিসাবে কাজ করার অনুমতি দেয়, তবে এটি 'পেড্রো' দেখাবে। সেই অ্যাকাউন্টে সম্পূর্ণভাবে লগ ইন না করেই অনুমতি, পাথ বা পরিবেশ পরীক্ষা করার জন্য এই পদ্ধতিটি খুবই কার্যকর।
যখন আপনি চান ইন্টারেক্টিভ শেল উচ্চ সুযোগ-সুবিধা থাকলে, দুটি খুব সাধারণ ধরন কার্যকর হয়: sudo -s y sudo -iপ্রথমটি টার্গেট ব্যবহারকারী হিসেবে একটি শেল খোলে, কিন্তু বর্তমান ব্যবহারকারীর পরিবেশ উত্তরাধিকার সূত্রে গ্রহণ করা (ভেরিয়েবল, বর্তমান ডিরেক্টরি, ইত্যাদি)। দ্বিতীয়টি টার্গেট ব্যবহারকারীর লগইন শেলের অনুকরণ করে, এর স্টার্টআপ স্ক্রিপ্ট লোড করা এবং এর $HOME ডিরেক্টরি ব্যবহার করা.
উদাহরণস্বরূপ, যদি আপনি দৌড়ান sudo -s -u tuxআপনি টাক্সের মতো একটি শেল নিয়ে উপস্থিত হবেন, কিন্তু আগের ডিরেক্টরি থেকেই, এবং আপনার পরিবেশের বেশিরভাগই অক্ষত থাকবে। এর বিপরীতে, sudo -i -u tux আপনি এমন একটি সেশনে প্রবেশ করবেন, যা অনেকটা টাক্স সরাসরি তার প্রোফাইলগুলো দিয়ে লগ ইন করলে যেমন হতো, ঠিক তেমন।.profile, .bash_profile, ইত্যাদি) লোড করা হয়েছে।
উভয় ক্ষেত্রেই, সম্পাদিত কমান্ডগুলো হিস্ট্রিতে রেকর্ড করা হয় , যা ট্রেসেবিলিটির দৃষ্টিকোণ থেকে আকর্ষণীয়: আপনি সর্বদা পর্যালোচনা করতে পারেন যে উচ্চতর প্রিভিলেজ ব্যবহার করে কী করা হয়েছিল, কে তা করেছিল এবং কখন।
ঘাম এবং তার মধ্যে পার্থক্য
লিনাক্সে, `su` এবং ` sudo` উভয়ই আপনাকে অন্য ব্যবহারকারীর, বেশিরভাগ ক্ষেত্রে রুটের, বিশেষাধিকার নিয়ে কমান্ড চালানোর সুযোগ দেয়, কিন্তু এগুলোর প্রত্যেকটি ব্যবহারের পদ্ধতি বেশ আলাদা। এই পার্থক্যটি বুঝতে পারলে কখন কোনটি ব্যবহার করতে হবে, তা সিদ্ধান্ত নিতে সুবিধা হয়।
কমান্ড su (বিকল্প ব্যবহারকারী) এর জন্য ব্যবহৃত হয় একই টার্মিনালের মধ্যে ব্যবহারকারীদের পরিবর্তন করুনযদি আপনি করেন su pedroআপনাকে পেড্রোর পাসওয়ার্ড জিজ্ঞাসা করা হবে; সেটি প্রবেশ করালে, আপনার শেলটি সেই অ্যাকাউন্টের অধীনে চলে যাবে। মূল ব্যবহারকারীর সেশনটি অদৃশ্য হয় না; এটি নতুনটির "নিচে" থেকে যায়। যখন আপনি টাইপ করেন exitআপনি পেড্রোর সেশন থেকে বেরিয়ে আগেরটিতে ফিরে যান।
আপনি ব্যবহার করেন su ব্যবহারকারীকে নির্দিষ্ট না করে, ডিফল্টরূপে রুটে স্যুইচ করার চেষ্টা করুনরুট পাসওয়ার্ড চাওয়া হয়। এর একটি উল্লেখযোগ্য বাস্তব প্রভাব রয়েছে: অনেকেই এর সাথে জড়িত সমস্ত ঝুঁকি সত্ত্বেও দীর্ঘ সময়ের জন্য রুট হিসেবে কাজ করে, শুধুমাত্র এই কারণে যে এটি ক্রমাগত `sudo` টাইপ করার চেয়ে বেশি সুবিধাজনক।
এর বিপরীতে, sudo একটি ভিন্ন পদ্ধতি প্রদান করে: আপনি স্থায়ীভাবে সেশন বা ব্যবহারকারী পরিবর্তন করেন না , বরং শুধুমাত্র নির্দিষ্ট কমান্ডের (বা একটি নির্দিষ্ট শেলের) জন্য আপনার বিশেষাধিকার বৃদ্ধি করেন। প্রমাণীকরণ আপনার নিজের পাসওয়ার্ড দিয়ে করা হয়, এবং কে কী করতে পারবে তার নিয়ন্ত্রণ sudoers-এ কেন্দ্রীয়ভাবে পরিচালিত হয়।
অতএব, যেসব পরিবেশে নিরাপত্তা একটি অগ্রাধিকার, সেখানে সরাসরি রুট হিসেবে লগ ইন করা বা সর্বদা `su` ব্যবহার করার পরামর্শ দেওয়া হয় না, এবং নিয়মতান্ত্রিকভাবে `sudo` ব্যবহার করাই শ্রেয় । এইভাবে, প্রতিটি বিশেষাধিকারপ্রাপ্ত কার্যকলাপ নিরীক্ষিত হয়, যা একটি ত্রুটিপূর্ণভাবে সম্পাদিত কমান্ড বা কোনো এক্সপ্লয়েট থেকে সম্ভাব্য ক্ষতি হ্রাস করে।
/etc/sudoers ফাইল: sudo কনফিগারেশনের মূল কেন্দ্র
sudo-এর সমস্ত আচরণ (যেমন কোন ব্যবহারকারী, কোন হোস্টে এবং কোন কমান্ডের সাথে এটি ব্যবহার করতে পারবে) ফাইলটিতে সংজ্ঞায়িত করা থাকে। /etc/sudoers এবং সেখান থেকে অন্তর্ভুক্ত ফাইলগুলিতে, সাধারণত এই ধরণের একটি নির্দেশনার মাধ্যমে #includedir /etc/sudoers.dএটি একটি খুব সংবেদনশীল ফাইল: সিনট্যাক্স ত্রুটির কারণে আপনি sudo ব্যবহার করতে পারবেন না।তাই এটি যত্ন সহকারে পরিচালনা করা উচিত।
sudoers-এ আপনি সাধারণত যে ধরনের কন্টেন্ট দেখতে পাবেন তার একটি উদাহরণ হলো এই ধরনের একটি লাইন। root ALL=(ALL:ALL) ALLএর মানে হলো, রুট ব্যবহারকারী অন্য যেকোনো ব্যবহারকারী ও গ্রুপের মতোই যেকোনো মেশিনে যেকোনো কমান্ড চালাতে পারে। গ্রুপ-ভিত্তিক নিয়মও প্রচলিত, যেমন— %sudo ALL=(ALL:ALL) ALL o %admin ALL=(ALL) ALL, যেখানে উপসর্গ % এটি নির্দেশ করে যে এটি সিস্টেমের অন্তর্ভুক্ত একটি গ্রুপ।
মূল ধারণাটি হলো , sudo বা admin গ্রুপের অন্তর্ভুক্ত সকল ব্যবহারকারী sudo ব্যবহারের বিশেষাধিকার লাভ করেন। তাই, উবুন্টুতে ইনস্টলেশনের সময় তৈরি হওয়া প্রথম ব্যবহারকারী সাধারণত স্বয়ংক্রিয়ভাবে sudo গ্রুপে যুক্ত হয়ে যায় এবং সরাসরি রুট অ্যাকাউন্ট ব্যবহার না করেই সম্পূর্ণ প্রশাসনিক অনুমতি পেয়ে যায়।
আরেকটি প্রচলিত পদ্ধতি হলো মূল ফাইলটিতে খুব বেশি হাত না দেওয়া এবং এর পরিবর্তে এর মধ্যে নির্দিষ্ট ফাইল তৈরি করুন /etc/sudoers.d/লাইনটিকে ধন্যবাদ #includedir /etc/sudoers.dওই ডিরেক্টরির মধ্যে থাকা যেকোনো বৈধ ফাইল সম্পূর্ণ sudoers কনফিগারেশনের অংশ হিসেবে লোড হয়, ফলে সার্ভিস, ডিপার্টমেন্ট, প্রজেক্ট ইত্যাদি অনুযায়ী নিয়মগুলো সাজানো সহজ হয়।
Visudo ব্যবহার করে কীভাবে নিরাপদে sudoers সম্পাদনা করবেন
sudoers পরিবর্তন করতে হলে, আপনি শুধু আপনার পছন্দের এডিটর দিয়ে এটি খুলতে পারবেন না, কারণ সিনট্যাক্স ত্রুটির কারণে sudo ব্লক হয়ে যেতে পারে। এবং আপনাকে সত্যিকারের ঝামেলায় ফেলে দেবে। সঠিক উপায় হলো সর্বদা কমান্ডটি ব্যবহার করা। visudoযেটি একটি এডিটরে (vi, nano, বা আপনার কনফিগার করা অন্য যেকোনো কিছু) ফাইলটি খোলার এবং সেভ করার সময় পরিবর্তনগুলো প্রয়োগ করার আগে সিনট্যাক্স সঠিক আছে কিনা তা পরীক্ষা করার দায়িত্বে থাকে।
আপনি যদি মূল ফাইলটি সম্পাদনা করতে চান, তবে কেবল চালু করুন sudo visudoআপনার যদি এর মধ্যে একটি নির্দিষ্ট ফাইল তৈরি বা পরিবর্তন করার প্রয়োজন হয় /etc/sudoers.d/আপনি বিকল্পটির মাধ্যমে এটি নির্দেশ করতে পারেন। -fউদাহরণস্বরূপ, sudo visudo -f /etc/sudoers.d/networkingএর ফলে ফাইলটি সামগ্রিকভাবে পরিচ্ছন্ন থাকে এবং এতে কোনো কিছু নষ্ট হয়ে যাওয়ার ঝুঁকি কমে যায়।
যখন আপনি sudoers পর্যালোচনা করবেন, তখন আপনি এমন অনেক মন্তব্য করা লাইন দেখতে পাবেন যা দিয়ে শুরু হয় #সেগুলো হলো ব্যাখ্যা বা নিয়ম নিষ্ক্রিয় করা হয়েছেবিশেষ করে একটি প্রায়শই বিভিন্ন বিন্যাসে আকর্ষণীয় হয়: যেটি শুরু হয় %wheelযদি আপনি সরিয়ে দেন # ওই লাইন থেকে, এবং যদি আপনি 'wheel' গ্রুপে ব্যবহারকারী যুক্ত করেন, তাহলে সেই নিয়ম অনুযায়ী আপনি তাদের 'sudo' অধিকার প্রদান করবেন।
একটি পরামর্শ হলো, sudo ব্যবহার করার সময় কোনো সমস্যা হলে, সবসময় আরেকটি রুট সেশন বা শর্টকাটসহ একটি কনসোল খুলে রাখা ভালো। এটি ঠিক করার কোনো বিকল্প উপায় না থাকলে sudo অকার্যকর হয়ে যেতে পারে, যার ফলে আপনি আপনার সাধারণ ইউজার অ্যাকাউন্ট থেকে উন্নত বিশেষাধিকার ব্যবহার করতে পারবেন না এবং আপনাকে রেসকিউ মোডের সাহায্য নিতে বাধ্য হতে হবে।
sudo কার কাছে থাকবে তা পরিচালনা করুন: গ্রুপ এবং ব্যবহারকারীদের
দৈনন্দিন চর্চায়, কে পূর্ণ ক্ষমতাসহ সুডো ব্যবহার করতে পারবে তা নির্ধারণ করার সবচেয়ে সুবিধাজনক উপায় হলো সাধারণত এর মাধ্যমে প্রশাসনিক গোষ্ঠীযেমনটি উল্লেখ করা হয়েছে, এমন একটি গোষ্ঠী থাকা খুবই সাধারণ যাকে বলা হয় sudo o admin o wheel, যার sudoers-এর নিয়মাবলী এর সদস্যদের ব্যাপক সুবিধা প্রদান করে।
একটি সাধারণ সিস্টেমে sudo গ্রুপে কারা আছে তা দেখতে, আপনি একটি ব্যবহার করতে পারেন grep উপর /etc/group: উদাহরণস্বরূপ, grep 'sudo' /etc/group এটি বর্তমানে সেই গ্রুপে থাকা ব্যবহারকারীদের তালিকা দেখাবে। কার কার sudo ব্যবহারের সম্ভাব্য সুযোগ আছে, তা দেখার এটি একটি দ্রুত উপায়।
যদি আপনি কোনো নির্দিষ্ট ব্যবহারকারীকে চান, ধরা যাক বিলআপনার যদি sudo ব্যবহারের অনুমতি থাকে, তাহলে একটি উপায় হলো এই ধরনের কমান্ড ব্যবহার করে এটিকে সংশ্লিষ্ট গ্রুপে যুক্ত করা। adduser bill sudo অথবা আপনার ডিস্ট্রোতে এর সমতুল্য সংস্করণ। সেই মুহূর্ত থেকে, এবং সেই গ্রুপের sudoers নিয়ম অনুসারে, বিল বাকি অ্যাডমিনিস্ট্রেটরদের মতো sudo ব্যবহার করতে পারবে।
একইভাবে, যদি কোনো সময়ে আপনার সেই অনুমতিগুলো প্রত্যাহার করার প্রয়োজন হয়, তাহলে আপনি তাকে গ্রুপ থেকে সরিয়ে দিতে পারেন, উদাহরণস্বরূপ এর মাধ্যমে deluser bill sudoএকবার সেই অপারেশনটি সম্পন্ন হলে, বিল আর sudo-এর প্রয়োজন হয় এমন কোনো কাজ করতে পারবে না, যদি না sudoers-এ তার জন্য কোনো অতিরিক্ত নির্দিষ্ট নিয়ম থাকে।
গ্রুপের কাছে sudo নিয়ন্ত্রণ অর্পণ করার এই পদ্ধতিটি একাধিক ব্যবহারকারী বা একটি কর্মদল পরিচালনা করার ক্ষেত্রে খুবই কার্যকর , কারণ এর মাধ্যমে প্রতিটি নামের জন্য আলাদাভাবে sudoers ফাইলটি ক্রমাগত সম্পাদনা না করেই কেন্দ্রীয়ভাবে অনুমতি প্রদান ও প্রত্যাহার করা যায়।
sudoers-এর মাধ্যমে নির্দিষ্ট অনুমতি প্রদান করুন (তবে অবাধ ক্ষমতা দেবেন না)
কখনও কখনও আপনি চান না যে কোনো ব্যবহারকারী সম্পূর্ণ রুট অ্যাক্সেস পাক , বরং শুধু সীমিত সংখ্যক কমান্ড ব্যবহারের সুযোগ পাক। এখানেই sudoers বিশেষভাবে শক্তিশালী হয়ে ওঠে, কারণ এটি আপনাকে কমান্ডের উপনাম (alias) এবং বিভিন্ন গ্রুপ বা ব্যবহারকারীর জন্য অত্যন্ত সুনির্দিষ্ট নিয়ম নির্ধারণ করার সুযোগ দেয় ।
উদাহরণস্বরূপ, ধরুন আপনি একটি গ্রুপ তৈরি করতে চান। netadmin, যার সদস্যরা নির্দিষ্ট নেটওয়ার্ক কমান্ড কার্যকর করতে পারে (যেমন tcpdump অথবা ওয়েব সার্ভার পরিচালনার জন্য বিশেষাধিকার, কিন্তু এর বেশি কিছু নয়। আপনি একটি ফাইলে কমান্ড অ্যালিয়াস সংজ্ঞায়িত করতে পারতেন। /etc/sudoers.d/ এই ধরনের, ভিসুডো ব্যবহার করে এটি সম্পাদনা করা হয়েছে।
সেই ফাইলের মধ্যে, উপনামগুলি এভাবে ঘোষণা করা যেতে পারে Cmnd_Alias CAPTURE = /usr/sbin/tcpdump ট্র্যাফিক ক্যাপচার বা একটি উপনামের জন্য Cmnd_Alias SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd ওয়েব সার্ভার এবং সংশ্লিষ্ট পাসওয়ার্ডগুলো পরিচালনা করতে। তারপর, আরও সাধারণ একটি অ্যালিয়াস যেমন NETALL = CAPTURE, SERVERS এটি উভয়কেই একত্রিত করে।
সেখান থেকে, নিয়মটি %netadmin ALL=NETALL এর মানে হলো, netadmin গ্রুপের যেকোনো ব্যবহারকারী sudo ব্যবহার করে NETALL-এর অন্তর্ভুক্ত সমস্ত কমান্ড (অর্থাৎ, CAPTURE এবং SERVERS-এর কমান্ডগুলো) চালাতে পারবে। পরবর্তী ধাপ হবে bill-কে netadmin গ্রুপে যুক্ত করা, যেমন— sudo adduser bill netadmin, এবং প্রস্তুত।
মূল বিষয়টি হলো যে শুধুমাত্র সেই নির্দিষ্ট কমান্ডগুলোই বিশেষাধিকার সহ কার্যকর করা হবে । বিল যদি NETALL-এর আওতাভুক্ত নয় এমন কিছুর জন্য sudo ব্যবহার করার চেষ্টা করে, তবে সিস্টেম তা প্রত্যাখ্যান করবে। সম্পূর্ণ অ্যাডমিনিস্ট্রেটর অ্যাক্সেস না দিয়ে প্রযুক্তিগত দায়িত্ব বন্টন করতে চাইলে এই পদ্ধতিটি অত্যন্ত সুপারিশযোগ্য।
খুবই নির্দিষ্ট কিছু ক্ষেত্রে পাসওয়ার্ড ছাড়াই sudo ব্যবহারের অনুমতি দিন।
আরেকটি সাধারণ পরিস্থিতি হলো, ব্যবহারকারী যেন পাসওয়ার্ড না দিয়েই `sudo` ব্যবহার করে একটিমাত্র কমান্ড চালাতে পারেন । এটি এমন নির্দিষ্ট স্ক্রিপ্ট বা ইউটিলিটির ক্ষেত্রে উপযোগী হতে পারে, যেগুলো ঘন ঘন চালানো হয় এবং যেখানে বারবার প্রমাণীকরণের পুনরাবৃত্তি করাটা যুক্তিযুক্ত নয়।
এর জন্য সবচেয়ে নিরাপদ উপায় হলো ওই কমান্ডটিকে একটির মধ্যে আবদ্ধ করা। রুটের মালিকানাধীন স্ক্রিপ্ট, সীমিত অনুমতি সহউদাহরণস্বরূপ আপনি একটি তৈরি করেন comando.shএবং তারপরে আপনি এর মালিক এবং অনুমতিগুলি এইরকম কিছু দিয়ে সামঞ্জস্য করেন। sudo chown root:root comando.sh y sudo chmod 700 comando.shএতে করে, শুধুমাত্র রুট ব্যবহারকারীই এটি পরিবর্তন ও চালাতে পারবে।
তারপর, sudoers-এ আপনি একটি নিয়ম নির্ধারণ করেন যাতে সংশ্লিষ্ট ব্যবহারকারী এক্সিকিউট করতে পারে। comando.sh কোনো পাসওয়ার্ড নেই। অনেকটা এইরকম nombredeusuario ALL=(ALL) NOPASSWD: /home/nombredeusuario/comando.sh এর ফলে ওই ব্যবহারকারী পাসওয়ার্ড না চেয়েই sudo-এর সাহায্যে স্ক্রিপ্টটি চালু করতে পারবেন।
এটা জোর দিয়ে বলা গুরুত্বপূর্ণ যে NOPASSWD নিয়মগুলো যেন অতিরিক্ত ব্যবহার করা না হয় । প্রতিবার যখন আপনি পাসওয়ার্ড ছাড়া `sudo` ব্যবহারের অনুমতি দেন, তখন আপনি এমন একটি দরজা খুলে দেন যা কাজে লাগানো যেতে পারে, যদি কেউ ব্যবহারকারীর অ্যাক্সেস পেয়ে যায় অথবা কমান্ডটি কার্যকর করার প্রেক্ষাপটকে পরিবর্তন করে ফেলে। এগুলো শুধুমাত্র খুব নির্দিষ্ট এবং নিরীক্ষিত ক্ষেত্রেই ব্যবহার করা সবচেয়ে ভালো।
তা সত্ত্বেও, পুনরাবৃত্তিমূলক ও স্বয়ংক্রিয় কাজ, অথবা নির্দিষ্ট কিছু অত্যন্ত নিয়ন্ত্রিত কমান্ডের জন্য এই কৌশলটি অত্যন্ত কার্যকরী। এর মূল চাবিকাঠি হলো এর পরিধি সীমিত রাখা: একটি সম্পূর্ণ কমান্ড ইন্টারপ্রেটারকে অনুমতি দেওয়ার চেয়ে, পাসওয়ার্ড ছাড়া শুধুমাত্র একটি নির্দিষ্ট কমান্ডকে `sudo` ব্যবহারের অনুমতি দেওয়া শ্রেয় ।
sudo-এর বিকল্প ও পরিপূরক: doas এবং অন্যান্য পদ্ধতি
কিছু পরিবেশে, sudo-এর একটি হালকা বিকল্প হিসেবে doas জনপ্রিয় হয়ে উঠছে । এর মূলনীতি একই (অন্য ব্যবহারকারীর বিশেষাধিকার নিয়ে কমান্ড চালানোর অনুমতি দেওয়া), কিন্তু এর কনফিগারেশন আরও সরল এবং বাইনারি ফাইলটি খুব ছোট হওয়ায় এটি মিনিমালিস্ট সিস্টেমের জন্য বিশেষভাবে উপযুক্ত।
DOAS সাধারণত ডিফল্টভাবে ইনস্টল করা থাকে না, তাই আপনাকে প্যাকেজ ম্যানেজার থেকে এটি যোগ করতে হবে এবং তারপর কনফিগারেশন ফাইলটি তৈরি করতে হবে। /etc/doas.confনিয়মের একটি সহজ উদাহরণ এইরকম হবে: permit nopass manzযা ব্যবহারকারী manz-কে পাসওয়ার্ড ছাড়াই doas ব্যবহার করে অ্যাডমিনিস্ট্রেটর পদে উন্নীত হওয়ার অনুমোদন দেয়।
sudoers-এর মতো নয়, যেখানে আপনি অ্যালিয়াস এবং বেশ জটিল নিয়মকানুন নির্ধারণ করতে পারেন, doas সরলতাকে অগ্রাধিকার দিয়ে অল্প কিছু নির্দেশাবলী ব্যবহার করে । আপনি নির্দিষ্ট অনুমতি সেট করতে পারেন, স্পষ্টভাবে অস্বীকার করতে পারেন, কমান্ড সীমিত করতে পারেন, ইত্যাদি, কিন্তু sudo-এর মতো এতটা বহুমুখী ব্যবহারের সুযোগ এখানে নেই।
চূড়ান্তভাবে একটি অন্যটির চেয়ে ভালো, এমনটা নয়, বরং কিছু ক্ষেত্রে doas যথেষ্ট ও বেশি সুবিধাজনক হতে পারে , আবার বৃহৎ বা অত্যন্ত সূক্ষ্মভাবে নিয়ন্ত্রিত পরিবেশে sudo সবচেয়ে নমনীয় এবং সুপরিচিত বিকল্প হিসেবেই থেকে যায়।
যে টুলই বেছে নেওয়া হোক না কেন, মূল ধারণাটি একই: সব সময় রুট হিসেবে কাজ না করে , সুস্পষ্ট নিয়ম এবং সম্পাদিত কাজের লগ সহ নিয়ন্ত্রিত প্রিভিলেজ এসকেলেশন পদ্ধতি ব্যবহার করা।
এই সবকিছু মাথায় রাখলে এটা স্পষ্ট যে, `sudo` কমান্ডটি শুধুমাত্র "বিপজ্জনক" কমান্ডের একটি উপসর্গ নয়, বরং এটি লিনাক্সের নিরাপত্তা এবং দৈনন্দিন ব্যবস্থাপনার একটি কেন্দ্রীয় উপাদান । এর অপশনগুলো বোঝা, `sudoers` ফাইলটি আয়ত্ত করা, কখন `sudo` ব্যবহার করতে হবে তা জানা, নির্দিষ্ট কমান্ড সীমাবদ্ধ করা এবং কখন পাসওয়ার্ডবিহীন ব্যতিক্রমের অনুমতি দিতে হবে—এই সবকিছু আপনাকে আপনার সিস্টেম এবং অন্যান্য ব্যবহারকারীরা এতে কী করতে পারবে তার উপর আরও সূক্ষ্ম নিয়ন্ত্রণ দেয়।
