কম্পিউটার টিউটোরিয়াল

su, sudo su, sudo -s এবং sudo -i-এর পার্থক্য: রুট অ্যাক্সেসের পূর্ণ গাইড

লিনাক্স টার্মিনালে রুট (root) সেশন পাওয়ার অনেক ভিন্ন ভিন্ন উপায় আছে। এটি কিছু বিভ্রান্তি সৃষ্টি করতে পারে, কারণ রুট প্রিভিলেজ (root privileges) পেতে চাওয়া অধিকাংশ নতুন ব্যবহারকারী প্রতিটি কমান্ড কীভাবে রুট অ্যাক্সেস দেয়, এগুলো কীভাবে ভিন্ন, এবং এই পার্থক্যগুলো কখন মায়নেস করে সেটা সম্পর্কে পরিচিত নাও হতে পারে। এখানে আমরা রুট অ্যাক্সেস পাওয়ার জন্য ব্যবহৃত অনেক কমান্ডকে ভাগ করে ফেলব, ব্যাখ্যা করব কীভাবে তারা রুট পায়, কখন ব্যবহার করব, এবং এর মাঝপথের সব কিছু।

su

su কমান্ড শেলে সিস্টেম যে করেন্ট ইউজার (current user) ব্যবহার করছে সেটাকে সাবস্টিটিউট (substitute) করে।

su, sudo su, sudo -s এবং sudo -i-এর পার্থক্য: রুট অ্যাক্সেসের পূর্ণ গাইড

আপনি su লিখে পরে ইউজারনেম দিয়ে যেকোনো ইউজারে স্যুইচ (switch) করতে পারেন। এটি সিস্টেমকে বর্তমান ইউজার থেকে লগ আউট (log out) করে নির্দিষ্ট ইউজারের সাথেই লগ ইন করবে। অথবা, su কমান্ড কিছুই স্পেসিফাই না করে (without specifying anything) চালালে রুট অ্যাক্সেস পাওয়া যায়।

"su" সবচেয়ে ভালো ব্যবহার করা হয় যখন একজন ব্যবহারকারী সিস্টেমের রুট অ্যাকাউন্টে ডিরেক্ট (direct) অ্যাক্সেস চায়। এটি sudo বা 그와 যেন কোনো জিনিসের মাধ্যমে যাবে না। বরং আপনাকে রুট ইউজারের পাসওয়ার্ড এন্টার করতে বলা হবে কারণ আপনি শाब্দিকভাবে (literally) সেটাতে লগ ইন করছেন।Moreover, রুট অ্যাক্সেস পাওয়ার অন্যান্য উপায়গুলো রুট হোম ডিরেক্টরি এবং রুট এনভায়রনমেন্ট (root environment)-এ অ্যাক্সেস দেয় না।

sudo su

এই কমান্ড রুট পাসওয়ার্ডের বদলে করেন্ট ইউজারের পাসওয়ার্ড চায়।

su, sudo su, sudo -s এবং sudo -i-এর পার্থক্য: রুট অ্যাক্সেসের পূর্ণ গাইড

এটি শেলে শুধু su চালানোর মতোই, একটি ক্রুশিয়াল (crucial) পার্থক্য ছাড়া। সিস্টেমকে সরাসরি "স্যুইচ ইউজার" (switch user) বলার বদলে, আপনি সিস্টেমকে "su" কমান্ডটি রুট হিসেবে চালানোর জন্য বলছেন। sudo su রান করলে ".profile", ".bashrc" এবং "/etc/profile" স্টার্ট হবে, ঠিক su (বা su root) চালালের মতো। যেকোনো কমান্ড sudo দিয়ে রান করলে সেটাকে রুট প্রিভিলেজ (root privileges) मिलে।

যদিও "sudo su" এবং "su"-র মধ্যে বড় ডাইভারজেন্স (divergence) নেই, sudo su সবসময় একটি খুব গুরুত্বপূর্ণ কারণের জন্য খুব উপযোগী: যখন একজন ব্যবহারকারী রুট অ্যাক্সেস পেতে "su" রান করে, তখন তারা রুট পাসওয়ার্ড জানতে বাধ্য। sudo su দিয়ে রুট পাওয়া যায় করেন্ট ইউজারের পাসওয়ার্ড চেয়ে। এটাতে রুট পাসওয়ার্ড জানা ছাড়াই রুট অ্যাক্সেস পাওয়া যায়, যা সিকিউরিটি বাড়ায়।

sudo -i

sudo -i ব্যবহার করা ভার্চুয়ালি (virtually) sudo su কমান্ডের মতোই, একটি এক্সসেপশন (exception) ছাড়া: এটি সরাসরি রুট ইউজারের সাথে ইন্টারঅ্যাক্ট (interact) করে না।

su, sudo su, sudo -s এবং sudo -i-এর পার্থক্য: রুট অ্যাক্সেসের পূর্ণ গাইড

sudo su-এর মতোই, -i ফ্ল্যাগ একটি ব্যবহারকারীকে রুট এনভায়রনমেন্ট (root environment) পেতে দেয় রুট অ্যাকাউন্ট পাসওয়ার্ড জানার প্রয়োজন ছাড়া। sudo -i খুব সাদৃশ্য sudo su-এর সাথে, কারণ এটি সকল এনভায়রনমেন্টাল ফাইল (.profile, ইত্যাদি) পড়ে এবং শেলের ভিতরে এনভায়রনমেন্ট সেট করে।

যেখানে এটি "sudo su"-থেকে আলাদা: sudo -i রুট অ্যাক্সেস এবং রুট এনভায়রনমেন্ট পাওয়ার একটি অনেক ক্লিনার (cleaner) উপায় রুট ইউজারের সাথে সরাসরি ইন্টারঅ্যাক্ট ছাড়া। স্পষ্ট করতে: sudo su-এ আপনি পেছনে একাধিক রুট setuid কমান্ড ব্যবহার করছেন। এটি বুঝতে অনেক চ্যালেঞ্জিং (challenging) করে তোলে কী এনভায়রনমেন্টাল ভেরিয়েবল (environmental variables) রাখা হবে এবং কী গুলো চেঞ্জ হবে (রুট এনভায়রনমেন্ট-এ সওয়াপ করার সময়)। sudo -i-এ এটা সত্য নয়। এই কারণে অধিকাংশ লোক এটি রুট পাওয়ার প্রিফার্ড (preferred) মেথড বলে মনে করেন ডিরেক্টলি লগ ইন না করে।

sudo -s

এই কমান্ড আপনার $SHELL ভেরিয়েবল দিয়ে একটি শেল আহ্বান (summon) করে।

su, sudo su, sudo -s এবং sudo -i-এর পার্থক্য: রুট অ্যাক্সেসের পূর্ণ গাইড

"sudo" কমান্ডের -s সুইচ (switch) করেন্ট ইউজারের $SHELL ভেরিয়েবল পড়ে যেটি কমান্ড এক্সিকিউট করছে। এই কমান্ডটি যেন ইউজার sudo /bin/bash রান করছে সেরকম কাজ করে। sudo -s একটি "non-login" স্টাইল শেল (non-login style shell)। sudo -i বা sudo su-এর মত কমান্ডের বিপরীতে, সিস্টেম যেকোনো এনভায়রনমেন্টাল ফাইল পড়বে না। যখন একজন ব্যবহারকারী শেলকে sudo -s চালাতে বলে, এটি রুট পায় কিন্তু ইউজার বা ইউজার এনভায়রনমেন্ট চেঞ্জ করে না। আপনার হোম (home) রুট হোম (root home) হবে না, ইত্যাদি।

su, sudo su, sudo -s এবং sudo -i-এর পার্থক্য: রুট অ্যাক্সেসের পূর্ণ গাইড

এই কমান্ড সবচেয়ে ভালো ব্যবহার করা হয় যখন ব্যবহারকারী রুট-এ স্যুইচওভার (switchover) করতে চায় না কিন্তু তার $SHELL এনভায়রনমেন্ট ভ্যালু (environment value) সহ একটি ইন্টারঅ্যাক্টিভ শেল (interactive shell) চায়। উপরে আলোচনা করা অন্যান্য কমান্ডগুলো রুট অ্যাক্সেস দেয় কিন্তু রুট এনভায়রনমেন্টাল ফাইলগুলো স্পর্শ করে এবং ব্যবহারকারীদের রুট-এ ফুলার অ্যাক্সেস (fuller access) দেয় (যেটা একটি সিকিউরিটি ইস্যু হতে পারে)।

প্রশ্নোত্তর (FAQ)

১. আমি কোন কমান্ডটি ব্যবহার করব?

প্রতিটি কমান্ডের তার নিজস্ব ইউজ-কেস (use-case) আছে। এখানে গুরুত্বপূর্ণ বিষয় হলো প্রতিটি কমান্ড কী করে এবং কখন ব্যবহার করব সেটা বুঝা। বর্তমান অবস্থায়, sudo -i রুট এনভায়রনমেন্ট পাওয়ার সবচেয়ে প্র্যাক্টিক্যাল (practical), ক্লিন (clean) উপায়। অন্যদিকে, sudo -s ব্যবহারকারীরা পাবেন যে তারা রুট শেল (root shell) পাচ্ছে কিন্তু রুট এনভায়রনমেন্ট স্পর্শ (touch) করার ক্ষমতা পাচ্ছে না, যেটার অ্যাডেড সিকিউরিটি বেনিফিট (added security benefits) আছে।

২. রুট অ্যাক্সেস কি আমার সিস্টেমকে ক্ষতি পৌঁছাতে পারে?

কিছু কেসে, হ্যাঁ। আপনি যদি একদম নিশ্চিত না হন যে একটি নির্দিষ্ট টার্মিনাল সেশনে সব কিছুর জন্য রুট অ্যাক্সেস দরকার, তবে প্রায়শই ভালো হলো শুধু sudo এবং след করে কমান্ডটি টাইপ করা যদি আপনি সেটি রুট হিসেবে রান করতে চান। উদাহরণস্বরূপ, যেকোনো ডেবিয়ান-ভিত্তিক লিনাক্সে sudo apt install vlc টাইপ করলে অপারেটিং সিস্টেমকে বলবে শুধু APT প্যাকেজ ম্যানেজার চালাতে রুট অ্যাক্সেস নাও।

এখানে একটা খুব গুরুত্বপূর্ণ ক্যাভিয়াট (caveat): sudo -i বা আগে আলোচনা করা অন্য কোনো ভেরিয়েন্ট রান করা (বনাম প্রতিটি কমান্ডের আগে sudo টাইপ করা) — প্রথমটি আপনার কমান্ড হিস্টরি /var/log/auth.log-এ লগ (log) করে না। আপনি যদি গডগড (mess up) করেন, তবে আপনি পেছনে ফিরে চেক করতে পারবেন না আপনি কী করলেন যাতে সেটা ঠিক করতে পারেন। আপনাকে মেমরি (memory) থেকে অপারেট করতে হবে, কারণ রুট সেশনগুলো রেকর্ড (recorded) হয় না।

৩. আমি যখন একটি কমান্ডের আগে "sudo" টাইপ করি, তখন আমি "sudo su"-র কোন ভারিয়েন্ট রান করছি?

একই লাইনে কমান্ড এক্সিকিউট করার জন্য sudo টাইপ করলে (অর্থাৎ, আপনি যে কমান্ডটি রান করতে চান সেটার সেম লাইনে টাইপ করছেন), আপনি মূলত একটি ইন্টারঅ্যাক্টিভ রুট শেল (interactive root shell) আন্ডারে সেটি রান করছেন। এটি স্ট্যান্ডঅ্যালোন (standalone) sudo -s কমান্ডটি যা করে।

উপসংহার

এই লিস্টে কোনো একক কমান্ড ১০০% সেরা (best) নয়। ব্যবহারকারীরা কমান্ড লাইনের সাথে বেশি কমফোর্টেবল (comfortable) হলে, তারা রুট পাওয়ার প্রতিটি উপায় (যেখানে অনেক আছে) একাউন্ট (account) করতে হবে এবং প্রস-কনস (pros and cons) জোর দিয়ে অনুযায়ী একশন (act accordingly) নিতে হবে। আশা করি এই আর্টিকেলের সাহায্যে এই সিদ্ধান্তগুলো নেওয়া সহজ হবে। কমান্ড সম্পর্কে আরও শিখতে চাইলে লিনাক্সে ডিরেক্টরির কন্টেন্ট লিস্ট করার উপযোগী কমান্ড এই আর্টিকেল পড়ুন।

  1. Unix বনাম Linux: পার্থক্য এবং কেন এটি গুরুত্বপূর্ণ

  2. ওয়াই-ফাই ৬ এবং ৫জি নেটওয়ার্কের মধ্যে পার্থক্য কী?

  3. বিটকয়িন এবং ইথারিয়ামের পার্থক্য

  4. উইন্ডোজ ১০ বনাম উইন্ডোজ ১১: মূল পার্থক্য ও আপনার জন্য কোনটি সঠিক