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 পারে না:
# যেকোনো 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 চেনার উপায়:
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 চলে গেছেসাধারণ ব্যবহার:
# একটি 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 -iPassword caching: sudo একবার password নেওয়ার পর ১৫ মিনিট মনে রাখে। এই সময়ের মধ্যে আবার sudo চালালে password চাইবে না। Session শেষ হলে বা sudo -k দিলে cache মুছে যায়।
su
su এবং sudo এক জিনিস নয়।
sudo | su | |
|---|---|---|
| কাজ | একটি command root হিসেবে চালানো | পুরোপুরি অন্য user-এ switch করা |
| Password | তোমার নিজের password | যে user-এ যাবে তার password |
| Session | command শেষে ফিরে আসো | exit না দেওয়া পর্যন্ত থাকো |
| ব্যবহার | একটি কাজের জন্য | দীর্ঘ সময় অন্য user হিসেবে কাজ করতে |
su - (recommended)
# Root-এ switch করো — root এর পুরো environment load হয়
su -
# নির্দিষ্ট user-এ switch করো
su - omar- flag মানে সেই user-এর পুরো environment load করো — home directory, PATH, shell variables সব।
# 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 দিয়ে চালাতে পারবে।
# sudoers দেখো — কিন্তু সরাসরি edit করবে না
sudo cat /etc/sudoersSyntax বিশ্লেষণ:
omar ALL=(ALL:ALL) ALL
│ │ │ │ │
│ │ │ │ └── কোন commands — ALL মানে সব
│ │ │ └── কোন group হিসেবে চালাতে পারবে — ALL মানে যেকোনো
│ │ └── কোন user হিসেবে চালাতে পারবে — ALL মানে root সহ যেকোনো
│ └── কোন host-এ — ALL মানে যেকোনো machine
└── কার জন্য এই ruleবাস্তব উদাহরণ — restricted access:
# শুধু 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 করে।
sudo visudosudo -l
Pentest বা troubleshoot-এ সবার আগে এটা চালাও:
sudo -l# 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 হিসেবে চলবে।
# 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 বদলে দিলেই হলো:
# 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