Skip to Content

sudo & root

Linux-এ root হলো সেই user যার কাছে কোনো permission বাধা নেই। sudo হলো সাধারণ user-কে বিপজ্জনক root access না দিয়েও নির্দিষ্ট কাজ করানোর ব্যবস্থা। এই দুটো concept cybersecurity-র privilege escalation-এর কেন্দ্রে।

root User

আগে বোঝো root কী নয়:

root কোনো special account না যেটা password দিয়ে login করলেই পাওয়া যায়। root হলো Linux-এর একটি নির্দিষ্ট user যার UID (User ID) = 0

Linux প্রতিটি কাজের আগে check করে — “এই user-এর কি এটা করার permission আছে?” root-এর ক্ষেত্রে Linux এই check করেই না। UID 0 দেখলেই সব allow।

root কী করতে পারে যা সাধারণ user পারে না:

Terminal
# যেকোনো file পড়া — permission যাই হোক cat /etc/shadow # সব user এর password hash # যেকোনো file মুছে দেওয়া rm /etc/passwd # user database মুছে দাও — system ভেঙে পড়বে # যেকোনো process বন্ধ করা kill -9 1 # PID 1 = init/systemd, পুরো system crash # যেকোনো port bind করা # সাধারণ user 1024 এর নিচের port ব্যবহার করতে পারে না # root পারে — যেমন port 80 (HTTP), port 22 (SSH)

Terminal-এ root চেনার উপায়:

Terminal
root@ubuntu:~# # # চিহ্ন = root omar@ubuntu:~$ # $ চিহ্ন = সাধারণ user

কেন সরাসরি root হিসেবে কাজ করা বিপজ্জনক: root হিসেবে একটি ভুল command — যেমন rm -rf / — পুরো system মুছে দিতে পারে। কোনো confirmation চাইবে না। এই কারণেই sudo তৈরি হয়েছে।

sudo

sudo কেন তৈরি হলো:

ধরো তুমি একটি server manage করো এবং তোমার colleague the-queen-কে apt দিয়ে packages install করার permission দিতে চাও। কিন্তু the-queen-কে full root দিলে সে চাইলে system-এর যেকোনো file মুছে দিতে পারে, যেকোনো user-এর password বদলাতে পারে।

sudo এর সমাধান: the-queen-কে শুধু apt চালানোর permission দাও — root password না দিয়ে, full root access না দিয়ে।

sudo ঠিক কীভাবে কাজ করে:

তুমি লেখো: sudo apt update | sudo check করে: তোমার কি এই command চালানোর permission আছে? (এটা /etc/sudoers ফাইলে দেখা হয়) | হ্যাঁ আছে → তোমার নিজের password চাইবে (root এর না) | password সঠিক → command টি root হিসেবে চলবে | command শেষ → root access চলে গেছে

সাধারণ ব্যবহার:

Terminal
# একটি command root হিসেবে চালাও sudo apt update # নির্দিষ্ট user হিসেবে command চালাও # web server এর user হিসেবে একটি command চালানো sudo -u www-data whoami # তোমার কোন কোন sudo permission আছে দেখো sudo -l # Root shell খোলো (সব command root হিসেবে চলবে) sudo -i

Password caching: sudo একবার password নেওয়ার পর ১৫ মিনিট মনে রাখে। এই সময়ের মধ্যে আবার sudo চালালে password চাইবে না। Session শেষ হলে বা sudo -k দিলে cache মুছে যায়।

su

su এবং sudo এক জিনিস নয়।

sudosu
কাজএকটি command root হিসেবে চালানোপুরোপুরি অন্য user-এ switch করা
Passwordতোমার নিজের passwordযে user-এ যাবে তার password
Sessioncommand শেষে ফিরে আসোexit না দেওয়া পর্যন্ত থাকো
ব্যবহারএকটি কাজের জন্যদীর্ঘ সময় অন্য user হিসেবে কাজ করতে
Terminal
# Root-এ switch করো — root এর পুরো environment load হয় su - # নির্দিষ্ট user-এ switch করো su - omar

- flag মানে সেই user-এর পুরো environment load করো — home directory, PATH, shell variables সব।

Terminal
# su - ছাড়া root হলে PATH ঠিকমতো set হয় না su which python3 # /usr/bin/python3 — হয়তো খুঁজে পাবে না # su - দিয়ে root হলে root এর PATH পাবে su - which python3 # /usr/bin/python3 — ঠিকমতো কাজ করবে

sudoers File

/etc/sudoers ফাইলে define করা আছে — কোন user কোন command sudo দিয়ে চালাতে পারবে।

Terminal
# sudoers দেখো — কিন্তু সরাসরি edit করবে না sudo cat /etc/sudoers

Syntax বিশ্লেষণ:

omar ALL=(ALL:ALL) ALL │ │ │ │ │ │ │ │ │ └── কোন commands — ALL মানে সব │ │ │ └── কোন group হিসেবে চালাতে পারবে — ALL মানে যেকোনো │ │ └── কোন user হিসেবে চালাতে পারবে — ALL মানে root সহ যেকোনো │ └── কোন host-এ — ALL মানে যেকোনো machine └── কার জন্য এই rule

বাস্তব উদাহরণ — restricted access:

Terminal
# শুধু apt চালাতে পারবে, password দিয়ে the-queen ALL=(root) /usr/bin/apt # শুধু apt চালাতে পারবে, password ছাড়া the-queen ALL=(root) NOPASSWD: /usr/bin/apt # sudo group এর সব user সব কিছু করতে পারবে %sudo ALL=(ALL:ALL) ALL # % মানে এটা user নয়, group

সরাসরি /etc/sudoers edit করবে না। ভুল syntax হলে sudo কাজ করা বন্ধ করে দিতে পারে। তখন root access হারিয়ে যেতে পারে। সবসময় visudo ব্যবহার করো — এটা save করার আগে syntax check করে।

Terminal
sudo visudo

sudo -l

Pentest বা troubleshoot-এ সবার আগে এটা চালাও:

Terminal
sudo -l
Terminal
# Output example: User omar may run the following commands on ubuntu: (ALL : ALL) ALL # সব commands — full sudo access (root) NOPASSWD: /usr/bin/apt # password ছাড়া শুধু apt (root) /usr/bin/python3 /opt/run.py # শুধু এই একটি script

এই output দেখলেই বোঝা যায় — কোথায় misconfiguration আছে, কোথায় পথ আছে।

CyberSec Note

sudo misconfiguration — privilege escalation-এর সবচেয়ে common path:

NOPASSWD misconfiguration:

omar ALL=(ALL) NOPASSWD: /usr/bin/vim

এই line মানে omar password ছাড়াই vim root হিসেবে চালাতে পারে।

কেন এটা exploit হয়: vim হলো একটি text editor — কিন্তু vim থেকে সরাসরি shell চালানো যায়। যেহেতু vim root হিসেবে চলছে, সেই shell-ও root হিসেবে চলবে।

Terminal
# vim root হিসেবে চালাও sudo vim # vim এর ভেতরে এই command দাও (Escape চেপে) :!bash # এখন তুমি root shell-এ আছো root@ubuntu:~#

Wildcard abuse:

omar ALL=(ALL) /usr/bin/python3 /opt/script.py

মনে হচ্ছে শুধু একটি নির্দিষ্ট script চালানোর permission। কিন্তু যদি /opt/script.py file-টি writable হয় — তাহলে content বদলে দিলেই হলো:

Terminal
# script এর ভেতরে root shell চালু করার code লেখো echo 'import os; os.system("/bin/bash")' > /opt/script.py # এখন sudo দিয়ে চালাও sudo /usr/bin/python3 /opt/script.py # root shell পেয়ে যাবে

GTFOBins (gtfobins.github.io) — sudo দিয়ে যেকোনো binary exploit করা যায় কিনা সেটার সম্পূর্ণ list। Pentest-এ sudo -l এর output দেখে GTFOBins-এ খোঁজো।

Quick Check

  • root user-এর UID কত এবং এটা কেন গুরুত্বপূর্ণ?
  • sudo command আর su - — কোনটায় কী হয়?
  • su আর su - এর পার্থক্য কী?
  • sudoers-এ NOPASSWD কী করে?
  • sudo -l চালালে কী দেখা যায় এবং pentest-এ এটা কেন প্রথম চালাও?
  • sudo vim কেন root shell দিতে পারে?

পরবর্তী → SSH

Search Keywords: linux sudo su root bangla, sudoers file explanation, sudo -l privilege escalation, GTFOBins sudo exploit, linux root access bengali, sudo NOPASSWD exploit, su vs sudo difference

Last updated on