drwxr-xr-x-এর অর্থ কী? Linux permission 755 ব্যাখ্যা
drwxr-xr-x-এর 10টি অক্ষর একে একে পড়ে কীভাবে 755 হয় তা জানুন। directory-তে x কেন traverse বোঝায় এবং chmod 777 কেন সঠিক সমাধান নয়, দেখুন।
drwxr-xr-x-এর অর্থ
drwxr-xr-x এমন একটি directory বোঝায়, যা এর owner পরিবর্তন করতে পারেন এবং অন্য সব user কোনো কিছু পরিবর্তন না করেই পড়তে ও এর মধ্য দিয়ে প্রবেশ করতে পারেন। Octal-এ এই mode হলো 755। Linux-এর ls -l output-এর প্রতিটি line-এর শুরুতে এই দশটি character থাকে। এগুলোর অর্থ ও ক্রম সব সময় একই থাকে। তাই একটি string শিখলেই সবগুলো বোঝা যায়।
বাকি নিয়মের আগে একটি নিয়ম বুঝতে হবে। কারণ আপনার নিজের testing থেকে কোনো তথ্য পাওয়া যাবে কি না, এটি সেই বিষয়টি নির্ধারণ করে। root user permission bit উপেক্ষা করেন। Kernel root-কে CAP_DAC_OVERRIDE capability (discretionary access control override) দেয়। তাই mode-এ নিষেধ থাকলেও root file খুলতে পারেন। এই page-এর প্রতিটি example root user-এর ক্ষেত্রে সফল হবে, bit-এ যা-ই লেখা থাকুক। নিয়মগুলো কার্যকর হতে দেখতে চাইলে normal user হিসেবে login করুন।
দশটি অক্ষর, একবারে একটি
দেখার জন্য একটি directory এবং একটি file তৈরি করুন। এখানে নতুন directory-এর বাইরে কোনো কিছুর পরিবর্তন হবে না।
mkdir -p ~/permdemo/inner
printf 'hello\n' > ~/permdemo/inner/notes.txt
ls -ld ~/permdemo ~/permdemo/inner ~/permdemo/inner/notes.txtসাধারণ default umask 022 হলে, directory-এর দুটি লাইনের শুরু হয় drwxr-xr-x দিয়ে এবং file-এর লাইন শুরু হয় -rw-r--r-- দিয়ে।
Character 1 হলো file type, permission নয়। d হলো directory। - হলো regular file। l হলো symbolic link। c এবং b হলো character ও block device node। s হলো socket এবং p হলো named pipe। এটি octal value-এর বাইরে থাকে। তাই drwxr-xr-x-এর মান 755 হয়, d দিয়ে শুরু হয় না।
এর পরের নয়টি character তিনটি করে তিনটি group-এ বিভক্ত। এগুলোর ক্রম কখনো বদলায় না।
- Character 2 থেকে 4 হলো owner triad। এগুলো file-এর মালিক user-এর ক্ষেত্রে প্রযোজ্য bit।
- Character 5 থেকে 7 হলো group triad। এগুলো file-এর group-এর ক্ষেত্রে প্রযোজ্য bit।
- Character 8 থেকে 10 হলো other triad। এগুলো অন্য সব user-এর ক্ষেত্রে প্রযোজ্য bit।
একটি triad-এর slot-এর ক্রম সবসময় r, তারপর w, তারপর x। Dash থাকলে সেই bit সক্রিয় নয়। অক্ষরগুলোর অবস্থান কখনো বদলায় না। r-x মানে read আছে, write নেই। -w- মানে write আছে, read নেই; এটি বৈধ হলেও বিরল।
তাই drwxr-xr-x এভাবে বিভক্ত হয়: directory-এর জন্য d, তারপর owner-এর জন্য rwx, group-এর জন্য r-x এবং other-এর জন্য r-x।
কিছু system-এ একাদশ character দেখা যায়। শেষের dot, drwxr-xr-x., মানে file-এ একটি SELinux (security enhanced Linux) context আছে। Fedora এবং Rocky-এর মতো SELinux distribution-এ এটি default হিসেবে দেখা যায়। শেষের plus, drwxr-xr-x+, মানে file-এ একটি POSIX ACL (access control list) আছে। এটি এই নয়টি bit-এর অতিরিক্ত rule-এর একটি set। অতিরিক্ত rule দেখতে getfacl <path> ব্যবহার করুন।
ডিরেক্টরিতে r, w এবং x ভিন্ন কাজ করে
এটি নতুন ব্যবহারকারীরা যে প্রথম নিয়মটি ভুল বোঝেন। ফাইল এবং ডিরেক্টরি উভয়ের ক্ষেত্রেই অক্ষরগুলো একই। কিন্তু এগুলো যে অধিকার দেয়, তা এক নয়।
- ফাইলে
rথাকলে তার বিষয়বস্তু পড়া যায়। ডিরেক্টরিতেrথাকলে তার ভেতরের নামগুলোর তালিকা দেখা যায়; সাধারণত plainls-এর জন্য এটিই প্রয়োজন। - ফাইলে
wথাকলে তার বিষয়বস্তু পরিবর্তন করা যায়। ডিরেক্টরিতেwথাকলে তার ভেতরে entry যোগ ও অপসারণ করা যায়। কোনো ফাইল মুছে ফেলা ডিরেক্টরির একটি পরিবর্তন। তাই এটি নির্ধারণ করে ডিরেক্টরির write permission; ফাইলটির নিজস্ব mode এখানে কোনো ভূমিকা রাখে না। - ফাইলে
xথাকলে সেটিকে program হিসেবে চালানো যায়। ডিরেক্টরিতেxথাকলে সেটি traverse করা যায়। অর্থাৎ path lookup-এর সময় kernel ওই ডিরেক্টরির ভেতরের কোনো নাম resolve করতে পারে।
Traverse বিষয়টি অনেককে বিস্মিত করে। ডিরেক্টরিতে x থাকলে কোনো কিছু execute হয় না। /srv/site/index.html খোলার জন্য প্রথমে /-এ x, এরপর /srv-এ x, তারপর /srv/site-এ x এবং শেষে ফাইলে r প্রয়োজন। ওই path-এর কোনো একটি ডিরেক্টরিতে আপনার জন্য x না থাকলে lookup সেখানেই থেমে যায়। ফাইলটির শেষে world-readable permission থাকলেও caller-কে পুরো path-এর জন্য Permission denied জানানো হয়। namei -l /srv/site/index.html mode ও owner-সহ path-এর প্রতিটি ধাপ দেখায়। ফলে কোন অংশে lookup থামছে, তা বোঝা যায়।
r আছে কিন্তু x নেই—এমন ডিরেক্টরি একটি অস্বাভাবিক আংশিক অবস্থা। listing-এর অধিকার r দেয় বলে সাধারণ user নামগুলোর তালিকা দেখতে পারে। কিন্তু কোনো entry-র stat তথ্য দেখা যায় না। তাই ls -l size ও mode column-এ question mark বসায় এবং প্রতিটির জন্য ls: cannot access ...: Permission denied দেখায়।
অক্ষর থেকে 755
প্রতিটি triad হলো তিন বিটের একটি সংখ্যা। r হলো 4, w হলো 2 এবং x হলো 1। চালু থাকা বিটগুলোর মান যোগ করুন।
rwxহলো 4 + 2 + 1 = 7rw-হলো 4 + 2 = 6r-xহলো 4 + 1 = 5r--হলো 4---হলো 0
তাই drwxr-xr-x-এর মান owner-এর জন্য 7, group-এর জন্য 5 এবং অন্যদের জন্য 5: 755। -rw-r--r-- হলো 6, 4, 4: 644। drwxrwxr-x হলো 7, 7, 5: 775, যা group-এর জন্য write permission যোগ করা 755। অক্ষর হাতে গুনতে হয় না, কারণ stat একই সঙ্গে উভয় রূপ দেখায়।
stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt%A হলো অক্ষরের রূপ, %a হলো octal রূপ, এবং %U ও %G owning user ও owning group-এর নাম নির্দেশ করে।
যে permission string-গুলো মানুষ খোঁজে
বাস্তব সার্ভারে সাধারণত এই mode-গুলো দেখা যায়। এখানে প্রতিটির octal value এবং কোন ক্ষেত্রে এটি ব্যবহৃত হয় তা দেওয়া হলো।
-rw-r--r--হলো 644। কোনো service যে সাধারণ file শুধু পড়ে, যেমন configuration file বা HTML page।-rw-------হলো 600। গোপন তথ্যের জন্য: একটি SSH private key বা কোনো application-এর.envfile।-rw-rw-r--হলো 664। কোনো group-shared directory-র file, যেখানে দলের সদস্যদের write access প্রয়োজন।-rwxr-xr-xহলো 755। Script ও binary, যেমন/usr/local/bin/backup.shএবং অধিকাংশ/usr/bin।-rwx------হলো 700। Private script, যা শুধু তার owner চালাতে পারে।drwxr-xr-xহলো 755। প্রায় সব system directory এবং কোনো website-এর document root।drwx------হলো 700।~/.sshএবং নিরাপত্তা-সীমিত server-এর home directory।drwxrwxr-xহলো 775। এমন directory, যেখানে owner-এর group write করতে পারে।drwxrwsr-xহলো 2775। একই permission-এর সঙ্গে setgid bit থাকে, তাই ভেতরে তৈরি নতুন file-গুলো directory-র group inherit করে।drwxrwxrwtহলো 1777।/tmp। শেষেরtহলো sticky bit, তাই কোনো user শুধু নিজের file মুছতে পারে।-rwsr-xr-xহলো 4755। এমন setuid binary, যা তার owner-এর account হিসেবে চলে, যেমন/usr/bin/passwdএবং/usr/bin/sudo।-rw-rw-rw-হলো 666 এবংdrwxrwxrwxহলো 777। এগুলো world-writable; server-এ এটি প্রায় সব সময়ই ভুল configuration।lrwxrwxrwxহলো প্রতিটি symbolic link-এর ক্ষেত্রে প্রদর্শিত mode। Linux link-এর mode bit উপেক্ষা করে এবং target পরীক্ষা করে। তাই এই string-এর নিজস্ব কোনো অর্থ নেই।
আপনার ক্ষেত্রে কোন triad প্রযোজ্য
এখানে beginners-রা যে দ্বিতীয় নিয়মটি প্রায়ই ভুল বোঝে, সেটি হলো: kernel ঠিক একটি triad নির্বাচন করে এবং সেখানেই থেমে যায়।
আপনার user ID যদি file-এর owner-এর সঙ্গে মিলে যায়, তাহলে আপনি owner triad পাবেন। group এবং other bits আর পরীক্ষা করা হবে না। তা না হলে file-এর group যদি আপনার কোনো group-এর সঙ্গে মিলে যায়, তাহলে আপনি group triad পাবেন। অন্যথায় আপনি other triad পাবেন।
এর দুটি ফল আছে। সবচেয়ে restrictive হলেও owner triad-ই প্রযোজ্য হয়। mode 0466-এর একটি file, যা -r--rw-rw- হিসেবে প্রদর্শিত হয়, তার owner-কে শুধু read অনুমতি দেয়, কিন্তু অন্য সবাই write করতে পারে। কারণ owner check প্রথমেই মিলে গেছে এবং এরপরের কোনো bit পড়া হয়নি। এটি বৈধ আচরণ, তবে প্রথমবার দেখলে সবাই বিভ্রান্ত হয়।
এরপর group triad নির্ধারিত হয় file-এর group দিয়ে, আপনি যে group-গুলোর সদস্য সেই তালিকা দিয়ে নয়। ls -l প্রতিটি লাইনে দুটি নাম প্রদর্শন করে: প্রথমে owner, তারপর group। ওই দ্বিতীয় group-টিরই file-এর permission-এর ওপর প্রভাব আছে। আপনি বিশটি group-এর সদস্য হলেও লাভ হবে শুধু তখনই, যখন file-টির group সেগুলোর একটি হবে।
id
stat -c '%U %G %A %n' ~/permdemo/inner/notes.txtid আপনার user এবং আপনি যে সব group-এর সদস্য, সেগুলো প্রদর্শন করে। stat file-এর owner এবং group প্রদর্শন করে। দুটির তুলনা করলে kernel আপনার ক্ষেত্রে কোন triad ব্যবহার করবে তা জানা যায়।
এই কারণে shared directory-তে সাধারণত একটি group এবং setgid bit সেট করা হয়। sudo chmod 2775 /srv/shared, drwxrwsr-x হিসেবে প্রদর্শিত হয়। এরপর ওই directory-র ভিতরে তৈরি হওয়া file-গুলো creator-এর ব্যক্তিগত group-এর বদলে directory-র group উত্তরাধিকারসূত্রে পায়। ফলে পরবর্তী ব্যবহারকারী সেগুলোতে লিখতে পারেন। প্রতিটি service-এর জন্য আলাদা account ব্যবহার করা এই ব্যবস্থার অন্য অংশ। এটি VPS-এ প্রতিটি service-এর জন্য একটি Linux user-এ ব্যাখ্যা করা হয়েছে।
umask প্রতিটি নতুন ফাইলের mode নির্ধারণ করে
একটি নতুন ফাইল তার mode আপনার কাছ থেকে নেয় না। যে program ফাইলটি তৈরি করে, সেটি যে mode চায় সেখান থেকে আপনার umask যে bit মুছে দেয়, তা বাদ দিয়ে mode নির্ধারিত হয়। umask হলো অপসারণযোগ্য bit-এর একটি mask। তাই বড় umask আরও বেশি private file তৈরি করে।
বেশিরভাগ distribution-এ 022 ডিফল্ট হিসেবে থাকে। কোনো program regular file তৈরি করার সময় 0666 চায়। directory তৈরি করার সময় 0777 চায়। umask উভয় request থেকেই 022 bit মুছে দেয়। ফলে file-এর mode হয় 644 এবং directory-এর mode হয় 755। সদ্য তৈরি VPS-এ সর্বত্র সাধারণত এই জোড়াটিই দেখা যায়।
umask
umask -S
touch ~/permdemo/new.txt && mkdir -p ~/permdemo/newdir
ls -ld ~/permdemo/new.txt ~/permdemo/newdirumask -S একই value অক্ষর হিসেবে দেখায়, যা 0022-এর চেয়ে পড়তে সহজ। আরও কঠোর default-এর জন্য umask 027-এ ~/.profile সেট করুন। এতে file-এর mode হবে 640 এবং directory-এর mode হবে 750। আপনার group আপনার কাজ পড়তে পারবে, কিন্তু অন্য কেউ পারবে না।
দুটি সীমাবদ্ধতা গুরুত্বপূর্ণ। umask শুধু bit মুছতে পারে, যোগ করতে পারে না। তাই যেভাবেই সেট করুন না কেন, সদ্য তৈরি file কখনো executable হয় না। আর systemd service কখনো আপনার shell profile পড়ে না। তাই value-টি unit file-এ সেট করুন।
[Service]
UMask=0027ওয়েব ফাইলের permission 644 এবং ওয়েব ডিরেক্টরির permission 755 কেন
একটি web server নিজস্ব account-এর অধীনে চলে। Debian এবং Ubuntu-তে সেই account হলো www-data, আর Rocky এবং Alma-তে nginx। এই process-এর পরিবেশিত ফাইলগুলোতে read permission এবং সেগুলোর উপরের ডিরেক্টরিগুলোতে traverse permission প্রয়োজন। ফাইলগুলোতে write permission দেওয়ার কোনো কারণ নেই। Static site-এ এমন permission কখনোই দেওয়া উচিত নয়।
কোনো ফাইলে 644 দিলে owner write permission পায় এবং সবাই read permission পায়। ফলে deploy user ফাইল publish করতে পারে এবং web user সেগুলো serve করতে পারে। কোনো ডিরেক্টরিতে 755 দিলে owner write permission পায় এবং সবাই traverse permission পায়। ফলে web user path অতিক্রম করতে পারে, কিন্তু কিছু যোগ বা মুছতে পারে না। Application-এর কোনো bug থাকলেও সেটি পরিবেশিত page-গুলো পুনরায় লিখতে পারে না।
এই সমস্যায় traverse rule-টিই সরাসরি প্রভাব ফেলে। Site যদি /home/deploy/site-এ থাকে এবং /home/deploy-এর mode 750 হয়, তাহলে web user home directory-তে প্রবেশই করতে পারে না। Request-এর ফল HTTP 403 হয় এবং /var/log/nginx/error.log-এ এই ধরনের একটি line দেখা যায়:
open() "/home/deploy/site/index.html" failed (13: Permission denied), client: 203.0.113.5ওই 13 হলো EACCES, অর্থাৎ kernel-এর permission refusal। Network-এ কোনো সমস্যা নেই। Port listening করছে এবং request এসে পৌঁছেছে। Linux-এ listening port কীভাবে কাজ করে শিখতে থাকলে এই পরিস্থিতি বিভ্রান্তিকর মনে হতে পারে। namei -l /home/deploy/site/index.html চালান এবং chain ধরে পড়ে অন্যদের জন্য x permission-বিহীন প্রথম directory-টি খুঁজুন।
Application যে directory-তে write করে, যেমন upload path, সেটি ব্যতিক্রম। Wider mode ব্যবহারের বদলে ownership দিয়ে সেই directory-তে permission দিন: sudo chown -R www-data:www-data /srv/site/uploads এবং mode 755 রাখুন। যেই একটি directory-তে write access প্রয়োজন, শুধু সেটিতেই তা রাখুন।
chmod, পুরো directory tree-তে একই permission না বসিয়ে
chmod দুই ধরনের syntax গ্রহণ করে। Octal পদ্ধতিতে একসঙ্গে সব নয়টি bit সেট করা হয়: chmod 644 notes.txt। Symbolic পদ্ধতিতে শুধু উল্লেখ করা permission পরিবর্তিত হয় এবং বাকি permission অপরিবর্তিত থাকে: chmod u+x deploy.sh owner-এর জন্য execute যোগ করে, আর chmod go-w notes.txt group ও other-এর write permission সরিয়ে দেয়।
Recursion ব্যবহার করলেই directory tree ক্ষতিগ্রস্ত হতে পারে। chmod -R 755 . প্রতিটি image এবং প্রতিটি config file-কে executable করে দেয়, কারণ chmod script এবং JPEG-এর মধ্যে পার্থক্য বুঝতে পারে না। এর পরিবর্তে বড় হাতের X ব্যবহার করুন।
chmod -R u=rwX,go=rX ~/permdemo
stat -c '%a %n' ~/permdemo ~/permdemo/inner/notes.txtবড় হাতের X directory-তে execute permission প্রয়োগ করে এবং যেসব file-এ আগে কোথাও execute bit ছিল, সেগুলিতেও তা বজায় রাখে। Directory-এর permission 755 হয়, সাধারণ file-এর permission 644 হয়, এবং আগে থেকেই executable থাকা script সেই permission ধরে রাখে। কোনো একটি file-এর mode নির্ভরযোগ্য হলে chmod --reference=good.sh other.sh সেটি অন্য file-এ কপি করে।
ভুল bit থাকলে যে বার্তাগুলো দেখবেন
bash: ./deploy.sh: Permission denied বোঝায়, আপনার ক্ষেত্রে প্রযোজ্য triad-এ script-এর কোনো x bit নেই, অথবা তার path-এর কোনো directory-তে x নেই। প্রথম ক্ষেত্রটি chmod u+x deploy.sh ঠিক করে।
bash: ./deploy.sh: cannot execute: required file not found ভিন্ন ধরনের সমস্যা, তবে এর নাম বিভ্রান্তিকর। x bit সঠিক আছে, কিন্তু প্রথম লাইনে উল্লেখ করা interpreter অনুপস্থিত। সাধারণত এর কারণ Windows line ending। তাই kernel /bin/bash\r নামের একটি interpreter খুঁজছে। এটি sed -i 's/\r$//' deploy.sh দিয়ে ঠিক করুন।
Permissions 0644 for '/home/deploy/.ssh/id_ed25519' are too open. SSH client থেকে আসে। অন্য account private key পড়তে পারলে client সেটি ব্যবহার করতে অস্বীকার করে। Key-এর permission 600 হওয়া দরকার, আর ~/.ssh-এর permission হওয়া দরকার 700। সম্পূর্ণ key ব্যবস্থাপনা SSH key ও file permission পরিচালনা অংশে রয়েছে।
Authentication refused: bad ownership or modes for directory /home/deploy/.ssh server-এর journal-এ দেখা যায়, যখন home directory বা তার .ssh group-writable থাকে। sshd-এর StrictModes setting key প্রত্যাখ্যান করে। client-এর দিক থেকে এর ফলে কোনো ব্যাখ্যা ছাড়াই অপ্রত্যাশিত password prompt দেখা যায়।
sudo: /etc/sudoers is world writable-এর পরে sudo: no valid sudoers sources found, quitting দেখা গেলে বুঝবেন, sudo তার নিজস্ব config-এর mode পরীক্ষা করে চলতে অস্বীকার করেছে। ওই file-এর mode 0440 হতে হবে। সাধারণত বিস্তৃত recursive chmod চালানোর পর এই সমস্যা দেখা দেয়। উপরের sshd বার্তার সঙ্গেও এটি একসঙ্গে দেখা যেতে পারে। তখন provider-এর console-ই server-এ ফেরার একমাত্র উপায় থাকে।
777 কেন সমাধান নয়
777 মেশিনের প্রতিটি account এবং সেই account-গুলোর অধীনে চলা প্রতিটি process-কে write access দেয়। একটি server সাধারণত service-গুলোকে আলাদা user-এর অধীনে চালায়। তাই VPS-এ “everyone” বলতে laptop-এর তুলনায় অনেক বেশি account ও process বোঝায়। কোনো service compromised হলে 777 যেখানে write access দেয়, সেখানে সেটি লিখতে পারে।
web root-এর ক্ষেত্রে ক্ষতি সরাসরি হয়। যে directory-তে world write access আছে এবং যেটি server serve-ও করে, সেখানে file upload-এর ত্রুটি ব্যবহার করে script রেখে পরে সেটি request করা যায়।
Ownership-সংক্রান্ত সমস্যার ক্ষেত্রে 777 প্রায় সবসময়ই ভুল উত্তর। লক্ষণ হলো, “app এই directory-তে লিখতে পারছে না।” কারণ হলো, directory-টির মালিকানা ভুল user-এর। sudo chown -R appuser:appuser /srv/app/storage-কে mode 755 দিয়ে ব্যবহার করলে সমস্যাটি সমাধান হয় এবং অন্য সব account বাইরে থাকে। কোনো কিছু deploy করার আগে এই account-গুলো তৈরি করা নতুন VPS-এ প্রথম দশ মিনিটের কাজ-এর অংশ।
একটি পরিচিত জায়গায় world write বৈধ, সেটি হলো /tmp, এবং এর বানান drwxrwxrwt। শেষের t হলো sticky bit: directory-টি সবার জন্য writable থাকে, কিন্তু কোনো user কেবল নিজের মালিকানাধীন file মুছতে পারে। এই bit না থাকলে যেকোনো account অন্য account-এর temporary file মুছে ফেলতে পারত।
পরিবর্তনের আগে mode দেখুন
এই কমান্ডগুলো শুধু বর্তমান অবস্থা পড়ে। তাই যেকোনো জায়গা থেকে নিরাপদে চালানো যায়।
id
umask
stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt
namei -l ~/permdemo/inner/notes.txt
find ~/permdemo -perm -0002find <path> -perm -0002 এমন একটি path-এর অধীনে থাকা সবকিছু তালিকাভুক্ত করে, যার world write bit সেট করা আছে। কেউ chmod 777 ব্যবহার করে মেরামতের কাজ করার পর কোনো server audit করার এটি সবচেয়ে দ্রুত উপায়।
কোনো নির্দিষ্ট service account একটি directory-তে প্রবেশ করতে পারে কি না জানতে, সেই account হিসেবে পরীক্ষা করুন। ওই user-এর directory-তে traverse permission থাকলে sudo -u www-data test -x /srv/site && echo yes || echo no, yes প্রিন্ট করে। না থাকলে no প্রিন্ট করে। root হিসেবে পরীক্ষা করলে কোনো তথ্য পাওয়া যায় না, কারণ root এই check এড়িয়ে যায় এবং ফলাফল সবসময় yes হয়।
FAQ
Linux-এ drwxr-xr-x-এর অর্থ কী?
এটি একটি directory, যা শুরুর d দ্বারা দেখানো হয়, এবং এর mode 755। মালিকের triad হলো rwx, তাই মালিকের এতে সব permission আছে। group-এর triad হলো r-x এবং অন্যদের triad হলো r-x। তাই মালিক ছাড়া অন্য সবাই ভেতরের নামগুলো তালিকাভুক্ত করতে এবং directory-এর মধ্য দিয়ে path অতিক্রম করতে পারে, কিন্তু কেউ কোনো কিছু যোগ বা সরাতে পারে না। যেকোনো path যাচাই করতে stat -c '%A %a %U %G %n' <path> চালান। এটি letter form এবং octal form পাশাপাশি দেখায়।
Web file-এর mode 644 এবং web directory-এর mode 755 কেন?
Web server একটি আলাদা account-এর অধীনে চলে; Ubuntu-তে account-টি হলো www-data। এটি যে file serve করে সেগুলো পড়তে পারে এবং সেগুলোর উপরের প্রতিটি directory অতিক্রম করতে পারে—কিন্তু কোনোটি লেখার প্রয়োজন নেই। 644 mode মালিককে write এবং অন্য সবাইকে read permission দেয়। 755 mode মালিককে write এবং অন্য সবাইকে traverse permission দেয়। যে directory-তে application-এর সত্যিই লিখতে হয়, সেটি chown ব্যবহার করে ওই application-এর user-এর কাছে হস্তান্তর করা উচিত। সবার জন্য mode উন্মুক্ত করা উচিত নয়।
x bit-এর অর্থ কি আমি একটি directory execute করতে পারি?
না। Directory-তে x-এর অর্থ traverse। Kernel যখন একটি path অনুসরণ করে, তখন এর মাধ্যমে directory-র ভেতরের একটি name resolve করা যায়। cd-এর এটি প্রয়োজন, এবং directory-র নিচে থাকা কোনো file open করার ক্ষেত্রেও এটি প্রয়োজন। Path-এর প্রতিটি directory-তে x থাকতে হয়। তাই mode 644 থাকা কোনো file-এ পৌঁছানো যায় না, যদি তার উপরের কোনো directory-তে আপনার জন্য x না থাকে। Chain-এর প্রতিটি directory-এর mode দেখাতে namei -l /path/to/file চালান। এতে lookup কোথায় থামছে তা দেখা যায়।
chmod 777 কি কখনো সঠিক সমাধান হতে পারে?
Server-এ প্রায় কখনোই নয়। এটি machine-এর প্রতিটি account-কে write permission দেয়, যার মধ্যে service-গুলো যে account-এর অধীনে চলে সেগুলোও আছে। ফলে কোনো একটি breached service file-টি পরিবর্তন করতে পারে। কোনো application একটি directory-তে লিখতে না পারলে প্রকৃত সমস্যা সাধারণত ownership-এ থাকে। sudo chown -R appuser:appuser /srv/app/storage-কে mode 755 দিয়ে সেট করলে application-এর প্রয়োজনীয় permission থাকে এবং অন্য সবাই বাদ থাকে। পরিচিত ব্যতিক্রম হলো /tmp, যার mode 1777। এটি কাজ করে কারণ sticky bit ব্যবহারকারীদের একে অপরের file মুছে ফেলা ঠেকায়।
Permission-এর পরে ls একটি dot বা plus কেন দেখায়?
এই একাদশ character নয়টি permission bit-এর অতিরিক্ত rule নির্দেশ করে। drwxr-xr-x.-এর মতো একটি dot-এর অর্থ হলো একটি SELinux security context সংযুক্ত আছে। Fedora এবং Rocky-তে এটি স্বাভাবিক। drwxr-xr-x+-এর মতো একটি plus-এর অর্থ হলো একটি POSIX ACL (access control list) সেট করা আছে। তাই কোনো user বা group-এর এমন permission থাকতে পারে, যা তিনটি triad-এ দেখা যায় না। অতিরিক্ত entry-গুলো তালিকাভুক্ত করতে getfacl <path> চালান।