DevOps/Linux ও Command Line/Lesson 02
File permissions
rwxr-xr-x মানে কী? Owner, group আর others; read, write আর execute; chmod-এর সংখ্যা (755, 644) আর অক্ষরের রূপ (u+x)। আর কেন chmod 777 প্রায় সবসময় ভুল।
- সময়
- 22 মিনিট
- Exercise
- 1
- Challenge
- 1
- Quiz
- 3 প্রশ্ন
সহজ ভাষায়
Linux-এ একই computer অনেক user আর program ব্যবহার করে। তাই প্রতিটা file-এর তিন ধরনের মানুষের জন্য তিনটা অনুমতি থাকে:
$ ls -l
-rwxr-xr-x 1 riya devs 2048 Oct 6 10:00 deploy.sh
-rw-r--r-- 1 riya devs 512 Oct 6 10:00 README.md
-rw------- 1 riya devs 128 Oct 6 10:00 .env
- rwx r-x r-x
│ │ │ └── others (বাকি সবাই)
│ │ └────── group (devs group-এর সদস্যরা)
│ └────────── owner (riya)
└───────────── ধরন: - file, d folder
| অক্ষর | File-এ মানে | Folder-এ মানে |
|---|---|---|
r read | পড়া | ভেতরের তালিকা দেখা (ls) |
w write | বদলানো | ভেতরে file বানানো বা মোছা |
x execute | Program হিসেবে চালানো | ভেতরে ঢোকা (cd) |
কেন দরকার?
- নিরাপত্তা:
.env-এ API key থাকে, তাই শুধু তুমি পড়তে পারবে, আর কেউ না - "Permission denied": DevOps-এ সবচেয়ে সাধারণ error-গুলোর একটা। কারণ বুঝলে মুহূর্তে সমাধান হয়।
- Docker আর server: Container-এর ভেতরে কোন user কোন file লিখতে পারবে, deploy-এর সময় এটা প্রায়ই সমস্যা হয়
সংখ্যায় permission: 755, 644
প্রতিটা অনুমতির একটা মান: r = 4, w = 2, x = 1। যোগ করলে একটা অঙ্ক:
rwx = 4+2+1 = 7 r-x = 4+0+1 = 5 r-- = 4 rw- = 6
| Mode | কোথায় |
|---|---|
644 | সাধারণ file (code, config) |
755 | Script, program, folder |
600 | গোপন file: SSH key, .env |
700 | ব্যক্তিগত folder (~/.ssh) |
chmod: অনুমতি বদলানো
chmod 755 deploy.sh # সংখ্যায়: পুরোটা একবারে
chmod u+x deploy.sh # অক্ষরে: owner-কে execute যোগ
chmod go-w config.yaml # group আর others থেকে write বাদ
chmod 600 .env # শুধু আমি পড়তে ও লিখতে পারব
chown riya:devs app.log # owner আর group বদলানো (সাধারণত sudo লাগে)
Python-এও একই কাজ করা যায়:
(0o600-এ 0o মানে Python-এ octal সংখ্যা।)
⚠️ chmod 777: প্রায় সবসময় ভুল
"Permission denied" এলে অনেকে chmod 777 দিয়ে দেয়। এতে সমস্যা চলে যায়, কিন্তু যে কেউ file-টা বদলাতে পারে। Web server-এ এটা মানে একজন আক্রমণকারী তোমার code বদলে দিতে পারে। নিয়মটা হলো: যতটুকু দরকার, শুধু ততটুকু অনুমতি (principle of least privilege)।
Exercise
Exercise
সংখ্যা থেকে rwx
octal_to_rwx(mode) লেখো। ৩ অঙ্কের একটা string (যেমন "755") থেকে ৯ অক্ষরের permission string দেবে (যেমন "rwxr-xr-x")।
প্রতিটা অঙ্ক হলো r = 4, w = 2, x = 1-এর যোগফল। যে permission নেই, তার জায়গায় -।
Quiz
Challenge
Challenge
নিজের chmod
chmod(mode, spec) লেখো। এখানে mode বর্তমান permission (৩ অঙ্কের string, যেমন "644"), আর spec হলো chmod-এর অক্ষরের রূপ। Return করবে নতুন ৩ অঙ্কের string।
spec-এর গঠন: কে + চিহ্ন + কী, যেমন u+x, go-w, a=r, ug+rw
- কে: u (owner), g (group), o (others), a (তিনটাই), একাধিক অক্ষর হতে পারে
- চিহ্ন: + (যোগ), - (বাদ), = (ঠিক এটাই, বাকি সব বাদ)
- কী: r, w, x-এর যেকোনো combination (=-এর ক্ষেত্রে ফাঁকাও হতে পারে, যেমন o=)
কমা দিয়ে একাধিক নির্দেশ: "u+x,go-w" (বাঁ থেকে ডানে প্রয়োগ হবে)।
বাস্তবে কোথায় ব্যবহার হয়?
Production Dockerfile-এ container-কে root হিসেবে না চালিয়ে একটা সাধারণ user হিসেবে চালানো একটা ভালো অভ্যাস:
FROM python:3.12-slim
RUN useradd --create-home appuser
WORKDIR /home/appuser/app
COPY --chown=appuser:appuser . .
USER appuser
CMD ["python", "serve.py"]
এতে কেউ app-এর দুর্বলতা দিয়ে ঢুকলেও পুরো system-এর ক্ষমতা পায় না। Containers module-এ এটা বিস্তারিত আসবে।
Interview প্রশ্ন
- Beginner:
chmod 755আরchmod 644-এর পার্থক্য কী? - Intermediate: একটা folder-এ
xpermission না থাকলে কী হয়?rআছে কিন্তুxনেই, তখন? - Advanced: Principle of least privilege কী? Container আর CI-তে কীভাবে প্রয়োগ করবে?
এরপর কী?
Terminal-এর আসল শক্তি হলো ছোট ছোট command জুড়ে বড় কাজ করা: grep, sort, uniq, আর মাঝে | pipe। পরের lesson: Pipes আর text processing।