Skip to Content

Users & Groups

Linux-কে একটা অফিস বিল্ডিং মনে করো। প্রতিটি কর্মী হলো একজন user — তার নিজের desk (home directory) আছে, নির্দিষ্ট room-এ access আছে। Groups হলো দল বা বিভাগ (department) — একই দলের সবাই একই resource access পায়। আর root হলো building manager — তার সব কিছুতে access আছে, কোনো restriction নেই।

How It Works

Linux মূলত একটা multi-user operating system। একই machine-এ একাধিক user থাকতে পারে — প্রত্যেকের আলাদা files, আলাদা permissions, আলাদা environment।

কিন্তু Linux আসলে “omar” বা “the-king” নাম দিয়ে চেনে না। OS শুধু number দিয়ে চেনে — এই number-কে বলে UID (User ID)

UID Rangeকারা
0সবসময় root — পুরো system-এর মালিক
1 – 999System users — কোনো real মানুষ নয়, services চালাতে OS নিজে তৈরি করে
1000+Real users — তুমি, তোমার teammates

তোমার নিজের UID দেখতে:

Terminal
id # uid=1000(omar) gid=1000(omar) groups=1000(omar),4(adm),27(sudo),1001(docker)

এই output-এ:

  • uid — তোমার user ID
  • gid — তোমার primary group ID
  • groups — তুমি আর কোন কোন group-এর member

তুমি omar নামে login করলেও OS কিন্তু তোমাকে UID 1000 হিসেবে চেনে। সব permission check, file ownership — সব কিছু এই number দিয়ে হয়।

/etc/passwd

এই file-টি Linux-এর user registry — system-এর প্রতিটি program যখন জানতে চায় “এই UID 1000 কে?”, তখন এই file-টি পড়ে।

এটি সব user পড়তে পারে (-rw-r--r--), কারণ অনেক program-কে এই information দরকার।

Terminal
cat /etc/passwd

প্রতিটি line-এর format:

omar:x:1000:1000:Omar,,,:/home/omar:/bin/bash │ │ │ │ │ │ └── Default shell │ │ │ │ │ └── Home directory │ │ │ │ └── Comment (full name) │ │ │ └── GID (Primary group ID) │ │ └── UID (User ID) │ └── Password field — x মানে password /etc/shadow-এ আছে └── Username

কেন password field-এ x আছে?

আগে (Linux-এর শুরুতে) password এখানেই stored থাকত — কিন্তু এই file সবাই পড়তে পারে। তার মানে যে কেউ password hash দেখতে পারত এবং offline-এ crack করার চেষ্টা করতে পারত। এটা বিশাল security hole ছিল। তাই password আলাদা একটি restricted file-এ সরিয়ে দেওয়া হয়েছে — /etc/shadow

/etc/shadow

এই file-টিতে actual password information থাকে। শুধু root read করতে পারে — অন্য কেউ না।

Terminal
sudo cat /etc/shadow

Password hash কী?

Hash হলো password-এর একটি mathematical fingerprint। তুমি যখন password দাও, Linux সেটাকে hash করে এবং stored hash-এর সাথে মেলায়। Original password কোথাও store হয় না। কিন্তু যদি কেউ hash পেয়ে যায়, সে offline-এ লক্ষ লক্ষ combination try করে password বের করার চেষ্টা করতে পারে — এটাকে বলে password cracking

Format:

omar:$6$salt$hashedpassword:19000:0:99999:7::: │ │ │ │ └── Warning days before expiry │ │ │ └── Maximum password age (days) │ │ └── Minimum days between password changes │ └── Last password change (days since Jan 1, 1970) └── Hash algorithm ($6$ = SHA-512)

CyberSec connection: /etc/shadow access পাওয়া মানে offline password cracking সম্ভব। john বা hashcat দিয়ে hash crack করা হয়। তাই এই file-এর permission (640 বা 000) অত্যন্ত গুরুত্বপূর্ণ।

User Management

Linux server-এ নতুন developer যোগ দিলে, কাউকে নির্দিষ্ট server access দিতে, বা কেউ চলে গেলে — এই commands কাজে লাগে।

Creating Users

Terminal
# নতুন user তৈরি করো sudo useradd -m -s /bin/bash newuser

এখানে:

  • -m — home directory তৈরি করো (/home/newuser)। এটা না দিলে user-এর কোনো home folder থাকবে না।
  • -s /bin/bash — default shell set করো। না দিলে user login করতে পারবে না।

Note: useradd -m শুধুমাত্র একটি বেসিক হোম ডিরেক্টরি তৈরি করে। তুমি যদি ভেতরে Documents, Downloads, বা Desktop ফোল্ডারগুলো না পাও, তবে ঘাবড়ানোর কিছু নেই। যখন তুমি প্রথমবার এই ইউজার দিয়ে গ্রাফিক্যাল ইন্টারফেসে (GUI) লগিন করবে, তখন সিস্টেম এই ফোল্ডারগুলো তৈরি করে দেবে। তবে সার্ভারের ক্ষেত্রে (CLI) এগুলো অটোমেটিক তৈরি হয় না; সেখানে তোমাকে mkdir দিয়ে ম্যানুয়ালি ফোল্ডার বানিয়ে নিতে হবে।

Terminal
# Password set করো sudo passwd newuser # User-এর info verify করো id newuser grep newuser /etc/passwd

How to Login?

  • লগিন স্ক্রিন (GUI): পুরো কম্পিউটার বা ডেক্সটপ প্রোফাইল পাল্টাতে চাইলে Log Out করে নতুন ইউজার দিয়ে লগিন করো।
  • টার্মিনাল (CLI): শুধুমাত্র বর্তমান টার্মিনাল উইন্ডোতে পরিচয় পাল্টাতে su (Switch User) ব্যবহার করো:
Terminal
su - newuser

(মনে রাখবে: su শুধুমাত্র ওই নির্দিষ্ট টার্মিনাল সেশনের জন্য কাজ করে, পুরো সিস্টেমের জন্য নয়।)

Modifying Users

Terminal
# Username বদলাও sudo usermod -l newname oldname # Home directory বদলাও sudo usermod -d /new/home -m username # Default shell বদলাও sudo usermod -s /bin/zsh username

Deleting Users

userdel -r user-এর home directory এবং সব files সহ delete করে — এটা irreversible। নিশ্চিত হয়ে নাও যে ওই files-এর backup আছে।

Terminal
# User delete করো (home directory রেখে) sudo userdel username # Home directory সহ delete — সব files চলে যাবে sudo userdel -r username

Groups

কেন groups দরকার? ধরো তোমার server-এ ১০ জন developer আছে — এদের সবাইকে /var/www/ folder-এ write access দিতে হবে। প্রত্যেককে আলাদাভাবে permission দেওয়া অনেক কষ্টের। Group তৈরি করে সবাইকে সেই group-এ রাখলে একবারেই হয়ে যায়।

Group Types

প্রতিটি user-এর একটা primary group থাকে — নতুন file তৈরি হলে সেই file automatically এই group-এর হয়। এর বাইরে user একাধিক secondary group-এরও member হতে পারে — এগুলো অতিরিক্ত access দেওয়ার জন্য।

লিনাক্সে যখন একটি নতুন ইউজার তৈরি করা হয়, তখন ঠিক একই নামে একটি গ্রুপও অটোমেটিক তৈরি হয় এবং সেটিই তার প্রাইমারি গ্রুপ হয়ে যায়। এই কারণে groups কমান্ড দিলে প্রথম গ্রুপের নামটি সবসময় ইউজারনেমের মতোই থাকে।

Terminal
# নতুন ইউজার the-queen — শুধু primary group আছে the-queen@linux:~$ groups the-queen # পুরনো admin ইউজার the-king — primary + অনেক secondary group the-king@linux:~$ groups the-king adm sudo docker # └── primary └── secondary groups
Terminal
# তোমার groups দেখো groups # omar adm sudo docker # নির্দিষ্ট user-এর groups groups omar

Group Operations

Terminal
# সব groups দেখো cat /etc/group # নতুন group তৈরি করো sudo groupadd developers # User-কে group-এ add করো sudo usermod -aG developers omar

Group change apply হতে logout করে আবার login করতে হয়। অথবা নিচের কমান্ডটি ব্যবহার করো:

Terminal
newgrp developers

সবচেয়ে common ভুল: -a (append) বাদ দিলে user তার সব existing groups থেকে remove হয়ে যাবে এবং শুধু নতুন group-এ থাকবে। যেমন sudo usermod -G developers omar দিলে omar-এর sudo access চলে যাবে। সবসময় -aG ব্যবহার করো।

Terminal
# Group থেকে remove করো sudo gpasswd -d omar developers # Group delete করো sudo groupdel developers

Group-কে কোনো ফাইল বা ডিরেক্টরিতে access দেওয়ার উপায়:

গ্রুপ তৈরি করার পর তুমি চাইলে সেই গ্রুপকে একটি নির্দিষ্ট ফোল্ডার বা ফাইলের মালিক বানিয়ে দিতে পারো। এরপর সেই গ্রুপের সব মেম্বার সেখানে কাজ করতে পারবে।

Terminal
# ফোল্ডারের group মালিক বানাও (: মানে শুধু group পরিবর্তন হবে) sudo chown :developers /var/www/project # g = group, r = read, w = write — developers গ্রুপকে read+write দাও sudo chmod g+rw /var/www/project # এখন developers গ্রুপের সব member এই ফোল্ডারে file তৈরি ও edit করতে পারবে

File permission system নিয়ে বিস্তারিত জানতে পরবর্তী পেজটি দেখো।

System Users

Linux install হওয়ার সময় অনেক user automatically তৈরি হয় — এরা কোনো real মানুষ নয়, বরং specific services চালানোর জন্য OS নিজে তৈরি করে।

কেন services-এর আলাদা user দরকার? Security isolation। যদি একটা service hack হয়, attacker সেই service-এর user-এর access পায় — root-এর নয়। এটা damage limitation বা blast radius reduction

Terminal
# সব system users দেখো (UID < 1000) awk -F: '$3 < 1000 {print $1, $3}' /etc/passwd
UserUIDকাজ
root0Super admin — সব permission, কোনো restriction নেই
daemon1Background service processes চালায়
www-data33Nginx/Apache এই user হিসেবে চলে — website hack হলে attacker এই limited user পায়, root নয়
nobody65534Minimal permission — untrusted processes এই user হিসেবে run করে
systemd-networkvariesNetwork management-এর জন্য isolated user

CyberSec Note

Target machine-এ প্রথমেই যা করবে:

Terminal
# কোন users login করতে পারে (bash shell আছে) cat /etc/passwd | grep "/bin/bash" # কোন users sudo access আছে grep -v "^#" /etc/sudoers 2>/dev/null cat /etc/group | grep sudo # কোন groups আছে — sudo বা admin group খোঁজো cat /etc/group # সম্প্রতি login করেছে কারা last lastlog # এই মুহূর্তে কে logged in who w

Lateral Movement:

একটা user compromise করার পর অন্য users-এর home folders check করো:

Terminal
ls -la /home/ cat /home/otheruser/.bash_history find /home -name "*.txt" -o -name "*.conf" 2>/dev/null

Privilege Escalation Path:

User যদি docker group-এর member হয়, সে root-level access পেতে পারে:

Terminal
# docker group membership check id | grep docker # docker দিয়ে root shell docker run -v /:/mnt --rm -it alpine chroot /mnt sh

Troubleshooting

ইউজার ম্যানেজমেন্টে কাজ করার সময় প্রায়ই কিছু কমন সমস্যার মুখোমুখি হতে হয়। বিশেষ করে নতুন ইউজার তৈরির পর সেটি লগিন স্ক্রিনে দেখা না গেলে নিচে দেওয়া কারণগুলো চেক করো:

Login Visibility

এর প্রধান দুটি কারণ থাকতে পারে:

১. ভুল শেল (Invalid/Missing Shell): তুমি যদি ইউজারকে এমন একটি শেল দাও যা সিস্টেমে নেই (যেমন: ইন্সটল না থাকা সত্ত্বেও /bin/zsh ব্যবহার করা), তবে লিনাক্স ওই ইউজারকে নিরাপদ মনে করে না এবং লগিন স্ক্রিনে দেখায় না। কারণ কাজ করার জন্য ইউজারের একটি সচল এবং কার্যকর শেল থাকা বাধ্যতামূলক।

২. পাসওয়ার্ড সেট না করা: শুধু ইউজার তৈরি করলেই হবে না, বরং sudo passwd username কমান্ড দিয়ে একটি পাসওয়ার্ড সেট করতে হবে। পাসওয়ার্ড সেট না করা থাকলেও ইউজার অ্যাকাউন্টটি “Locked” অবস্থায় থাকে এবং লগিন স্ক্রিনে আসে না।

সমাধান: শেলের সমস্যাটি ঠিক করার জন্য নিচের কমান্ড দিয়ে ইউজারের শেলটি আবার ডিফল্ট bash-এ ফিরিয়ে নাও:

Terminal
sudo usermod -s /bin/bash username

Quick Check

  • Linux কি “omar” নাম দিয়ে user চেনে, নাকি অন্য কিছু দিয়ে?
  • UID 0, UID 500, আর UID 1500 — কোনটা কে?
  • /etc/passwd সবাই পড়তে পারে — এটা কি security problem? কেন বা কেন নয়?
  • /etc/shadow কেন আলাদা file-এ রাখা হয়েছে? কে এটা read করতে পারে?
  • sudo usermod -G docker omar আর sudo usermod -aG docker omar — পার্থক্য কী এবং কোনটা বিপজ্জনক?
  • Primary group আর Secondary group-এর পার্থক্য কী?
  • www-data user কেন exist করে? এটা কীভাবে security-তে সাহায্য করে?
  • নতুন user তৈরিতে -m flag না দিলে কী সমস্যা হবে?

পরবর্তী → File Permissions

Search Keywords: linux users groups bangla, useradd passwd Bengali, /etc/passwd /etc/shadow explained, linux user management Bengali, UID GID linux, primary secondary group linux, user enumeration linux cybersecurity, lateral movement linux, www-data user, privilege escalation docker group

Last updated on