Part-1 এ আমরা tolearn ইউজার বানিয়েছি। কিন্তু সে কোন ফাইল পড়তে পারবে, কোনটা এডিট করতে পারবে? সেটা ঠিক করে দেয় ফাইল পারমিশন। ভুল পারমিশন = হ্যাক হওয়ার রাস্তা খুলে দেওয়া।
প্রয়োজনীয় প্যাকেজ: coreutils এবং acl – sudo apt install acl দিয়ে ACL ইনস্টল করুন।
Step 1: বেসিক পারমিশন বোঝা – ls -l
যেকোনো ফাইলের পারমিশন দেখুন:
Bash
ls -l /var/www/project/index.php
আউটপুট: -rwxr-xr-- 1 tolearn www-data 2048 Aug 4 22:00 index.php
ব্যাখ্যা:
| অংশ | মানে |
|---|---|
- | ফাইল, d হলে ডিরেক্টরি |
rwx | Owner tolearn এর পারমিশন: Read, Write, Execute |
r-x | Group www-data এর পারমিশন: Read, Execute |
r-- | Others এর পারমিশন: শুধু Read |
Numeric Value: r=4, w=2, x=1। তাই rwx = 7, r-x = 5, r-- = 4। rwxr-xr-- মানে 754।
Step 2: পারমিশন পরিবর্তন – chmod
সবচেয়ে কমন পারমিশন:
Bash
chmod u+x script.sh # User/Owner কে Execute পারমিশন দিন
chmod g-w file.txt # Group থেকে Write পারমিশন কেড়ে নিন
chmod o=r file.txt # Others কে শুধু Read পারমিশন দিন
Symbolic Way:
chmod u+x script.sh # User/Owner কে Execute পারমিশন দিন
chmod g-w file.txt # Group থেকে Write পারমিশন কেড়ে নিন
chmod o=r file.txt # Others কে শুধু Read পারমিশন দিন
Step 3: মালিকানা পরিবর্তন – chown ও chgrp
ফাইলের মালিক ও গ্রুপ চেঞ্জ:
Bash
sudo chown tolearn:www-data /var/www/project/index.php
ব্যাখ্যা: tolearn হলো নতুন Owner, www-data হলো নতুন Group।
শুধু গ্রুপ চেঞ্জ:
Bash
sudo chgrp developers /var/www/project/
Step 4: স্পেশাল পারমিশন – setuid, setgid, sticky bit
এগুলো অ্যাডভান্সড সিকিউরিটির জন্য।
১. setuid 4xxx: ফাইলটি যে Owner-এর, তার পারমিশন নিয়ে রান হবে। passwd কমান্ড এভাবে কাজ করে।
Bash
sudo chmod 4755 /usr/bin/program
২. setgid 2xxx: ফোল্ডারে নতুন ফাইল তৈরি হলে Parent ফোল্ডারের গ্রুপ পাবে। শেয়ার্ড ফোল্ডারের জন্য দরকারি।
Bash
sudo chmod 2775 /var/www/shared_project/
৩. sticky bit 1xxx: /tmp ফোল্ডারে থাকে। ইউজার শুধু নিজের ফাইল ডিলিট করতে পারবে।
Bash
sudo chmod 1777 /tmp
Step 5: ACL – Access Control List: আসল ক্ষমতা
chmod দিয়ে শুধু 3 ধরনের ইউজার কন্ট্রোল করা যায়। কিন্তু যদি tolearn ইউজারকে রিড আর developer ইউজারকে রাইট দিতে চান? তখন লাগবে ACL।
১. ACL চেক করা:
Bash
getfacl /var/www/project/index.php
২. নির্দিষ্ট ইউজারকে পারমিশন দেওয়া:
Bash
sudo setfacl -m u:developer:rw /var/www/project/index.php
ব্যাখ্যা: developer ইউজারকে Read+Write দিলাম, অথচ ফাইলের Owner tolearn ই আছে।
৩. নির্দিষ্ট গ্রুপকে পারমিশন দেওয়া:
Bash
sudo setfacl -m g:testers:r /var/www/project/
৪. ACL মুছে ফেলা:
Bash
sudo setfacl -b /var/www/project/index.php
Step 6: ডিরেক্টরি স্ট্রাকচার ও বেস্ট প্র্যাকটিস
ওয়েব সার্ভারের জন্য রেকমেন্ডেড পারমিশন:
/var/www/ root:root 755
└── project/ tolearn:www-data 755
├── index.php tolearn:www-data 644
├── uploads/ www-data:www-data 775 + setgid
└── config.php tolearn:www-data 640 # Others পড়তে পারবে না
গোল্ডেন রুল:
- ফোল্ডার:
755, ফাইল:644 - কনফিগ ফাইল:
640বা600 - কখনোই
777পারমিশন দেবেন না।
3. সিরিজের পরবর্তী পর্ব
Part-3: SSH Key-Based Authentication ও সার্ভার হার্ডেনিং – পাসওয়ার্ড ছাড়া সিকিউর লগইন এবং root লগইন বন্ধ করা শিখব।
