মূল content-এ যাও

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 executeProgram হিসেবে চালানোভেতরে ঢোকা (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
main.py
Modeকোথায়
644সাধারণ file (code, config)
755Script, 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-এও একই কাজ করা যায়:

main.py

(0o600-এ 0o মানে Python-এ octal সংখ্যা।)

⚠️ chmod 777: প্রায় সবসময় ভুল

"Permission denied" এলে অনেকে chmod 777 দিয়ে দেয়। এতে সমস্যা চলে যায়, কিন্তু যে কেউ file-টা বদলাতে পারে। Web server-এ এটা মানে একজন আক্রমণকারী তোমার code বদলে দিতে পারে। নিয়মটা হলো: যতটুকু দরকার, শুধু ততটুকু অনুমতি (principle of least privilege)।

Exercise

Exercise

সংখ্যা থেকে rwx

+20 XP

octal_to_rwx(mode) লেখো। ৩ অঙ্কের একটা string (যেমন "755") থেকে ৯ অক্ষরের permission string দেবে (যেমন "rwxr-xr-x")।

প্রতিটা অঙ্ক হলো r = 4, w = 2, x = 1-এর যোগফল। যে permission নেই, তার জায়গায় -।

solution.py

Quiz

  1. Q1rw-r--r-- (644) মানে কী?
  2. Q2একটা script ./deploy.sh চালাতে গেলে Permission denied আসে। সাধারণ সমাধান কী?
  3. Q3SSH private key (~/.ssh/id_ed25519)-এর permission কী হওয়া উচিত?
0/3 answered

Challenge

Challenge

নিজের chmod

+50 XP

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" (বাঁ থেকে ডানে প্রয়োগ হবে)।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

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-এ x permission না থাকলে কী হয়? r আছে কিন্তু x নেই, তখন?
  • Advanced: Principle of least privilege কী? Container আর CI-তে কীভাবে প্রয়োগ করবে?

এরপর কী?

Terminal-এর আসল শক্তি হলো ছোট ছোট command জুড়ে বড় কাজ করা: grep, sort, uniq, আর মাঝে | pipe। পরের lesson: Pipes আর text processing।