লিনাক্সে একটি খুব উপযোগী ফিচার হলো "অ্যাক্সেস কন্ট্রোল লিস্ট" (Access Control Lists) যা ফাইল এবং ডিরেক্টরির অ্যাক্সেস নিয়ন্ত্রণ করে। এখানে ব্যাখ্যা করা হলো কীভাবে অ্যাক্সেস কন্ট্রোল লিস্ট ফাইল পারমিশন নিয়ন্ত্রণে কাজ করে।
নোট: অ্যাক্সেস কন্ট্রোল লিস্ট কীভাবে কাজ করে সেটি ভালোভাবে বুঝতে, আমরা প্রথমে কিছু ইউজার এবং গ্রুপ সেট আপ করছি একটি কাজ কর रहे লিনাক্স সিস্টেমে। নিচের এক্সারসাইজটি একটি ভার্চুয়াল মেশিনে করা হয়েছে যা Kali অপারেটিং সিস্টেম চালাচ্ছে। রুট ইউজার한테 সিস্টেমে নতুন ইউজার যোগ করার এবং তাদের গ্রুপে नियোগ করার ক্ষমতা রয়েছে।
ইউজার এবং গ্রুপ তৈরি করা
প্রথমে, আমরা রুট হিসেবে লগ ইন করব, ইউজার তৈরি করব এবং টেবিল অনুযায়ী তাদের সংশ্লিষ্ট গ্রুপে রাখব। ইউজারদের সিম্পল নাম দেওয়া হয়েছে কনসেপ্ট ভালোভাবে বুঝতে 돕তে।
| ইউজার | গ্রুপ |
|---|---|
| john1 john2 john3 |
johns |
| jane1 jane2 |
janes |
নতুন ইউজার সিস্টেমে যোগ করতে adduser কমান্ড ব্যবহার করব।

id কমান্ড নতুন তৈরি ইউজারের ডিটেইলস দেখাবে। এটা ইউজার আইডি (uid), গ্রুপ আইডি (gid) এবং গ্রুপ নাম (groups) দেখাবে। ইউজার, তৈরি হওয়ার সাথে সাথে, স্বয়ংক্রিয়ভাবে একটি গ্রুপে যোগ হয় যার নাম ইউজার নামের সাথে মিলে। সেই ইউজার সেই গ্রুপের একমাত্র সদস্য হয়।

একইভাবে "john2" এবং "john3" ইউজারগুলো তৈরি করা হয়।
adduser john2 adduser john3
তিনজন ইউজার তৈরি হলে, id কমান্ড ব্যবহার করে তাদের ইউজার এবং গ্রুপ আইডি দেখুন।

দেখা যাচ্ছে তিনজন ইউজার তাদের নিজস্ব গ্রুপে — 1000, 1001 এবং 1002। আগে দেখানো টেবিল অনুযায়ী, আমরা তিনজন ইউজারকে একই গ্রুপে চাই: johns। যেহেতু এখনো সিস্টেমে এমন কোনো গ্রুপ নেই, groupadd কমান্ড দিয়ে তৈরি করব:
groupadd -g <new_group_ID> <group_name>

নতুন গ্রুপ আইডি 5000 হিসেবে নির্দিষ্ট করা হয়েছে। -g সুইচ না দিলে সিস্টেম অটোমেটিক্যালি গ্রুপ আইডি বেছে নেবে। নতুন গ্রুপের নাম "johns"। এখন তিনজন ইউজার — "john1", "john2" এবং "john3" — এই গ্রুপের সদস্য হিসেবে যোগ করতে হবে। এজন্য usermod কমান্ড ব্যবহার করব।
usermod -g <group_name> <user_name>
usermod "user_name" ইউজারকে "group_name" গ্রুপে যোগ করে। নিচের ফিগারটি প্রথমে "john1"-এর uid এবং gid দেখাচ্ছে গ্রুপ পরিবর্তনের আগে। usermod কমান্ড সফলভাবে রান হলে, "john1" "johns" গ্রুপে gid 5000 সহ যোগ হয়।

একই প্রক্রিয়া "john2" এবং "john3"-এর জন্যও করা হয়।
usermod -g johns john2 usermod -g johns john3
শেষে, "johns" গ্রুপের তিনজন ইউজারের ডিটেইলস id কমান্ড দিয়ে দেখুন।

আমরা সফলভাবে তিনজন ইউজার তৈরি করলাম এবং একই গ্রুপে যোগ করলাম।
একইভাবে "jane1" এবং "jane2" ইউজারগুলো তৈরি করা হয় এবং "janes" গ্রুপে gid 6000 সহ যোগ করা হয়। তাদের ডিটেইলস id কমান্ড দিয়ে নিচে দেখানো হয়েছে।

অ্যাক্সেস কন্ট্রোল লিস্টের প্রয়োজন কেন?
ধরুন ইউজার "john1" লগ ইন করে,

হোম ডিরেক্টরিতে একটি নতুন ফাইল তৈরি করে,

এবং সেখানে কিছু কন্টেন্ট যোগ করে।

ls কমান্ড দিয়ে ফাইলটির মেটাডেটা দেখি।

আউটপুটের প্রথম কয়েকটি ক্যারেক্টার, - rw - r - - r - - পারমিশন স্ট্রিং এর হিসাব দেয়। এটিকে বিশ্লেষণ করি।
| – | rw – | r – – | r – – |
|---|---|---|---|
| ফাইল টাইপ | john1-এর ফাইল üzerindeki পারমিশন | johns গ্রুপের সদস্যদের ফাইল上的 পারমিশন | johns গ্রুপে না থাকা অন্যদের দেওয়া পারমিশন |
এই আর্টিকেলটি ফাইল পারমিশনের উপর একটি ভালো প্রাইমার।
কী হয় যদি "john1", ফাইল অোনার হলে, শুধু "john2" এবং "jane1"-কে রাইট পারমিশন দিতে চায় কিন্তু "john3" এবং "jane2"-এর জন্য রিড পারমিশন রাখতে চায়?
| rw – | r – – |
|---|---|
| john1 john2 jane1 |
john3 jane2 |
একটি অপশন হয় একটি নতুন গ্রুপ তৈরি করা রিড, রাইট পারমিশন সহ "john1", "john2" এবং "jane1"-র জন্য এবং আরেকটি গ্রুপ শুধু রিড পারমিশন সহ "john3" এবং "jane2"-র জন্য। যদি john1 কোনো গ্রুপ মেম্বারের পারমিশন আরও মডিফাই করতে চায়, তবে আরও গ্রুপ তৈরি করতে হবে। একাধিক গ্রুপ তৈরি ও ম্যানেজ করা সিস্টেম অ্যাডমিনিস্ট্রেটরের জন্য একটি ভার।
বদলে, একটি ফাইলের জন্য "অ্যাক্সেস কন্ট্রোল লিস্ট" তৈরি করা যায় যা স্পষ্টভাবে বলে দেবে কোন ইউজার उस ফাইল trên কী অপারেশন পারফর্ম করতে পারবে।
ফাইলের জন্য অ্যাক্সেস কন্ট্রোল লিস্ট (ACL) কীভাবে তৈরি করবেন?
প্রতিটি ফাইল তৈরির সাথে সাথে একটি ACL অ্যাসাইন থাকে। এটিকে কার্যকরভাবে ব্যবহার করা শুধু এটিকে মডিফাই করার বিষয়। শুধু ফাইল অোনার এবং রুট ইউজার ফাইলের ACL মডিফাই করতে পারেন।
মوجود ACL দেখতে getfacl কমান্ড ব্যবহার করতে পারি:
getfacl <file_name>

# দিয়ে শুরু হওয়া লাইনগুলো কমেন্ট লাইন। আসল ইনফরমেশন আউটপুটের শেষ তিন লাইনে থাকে, যা আগে পাওয়া পারমিশন স্ট্রিংএর মতো। "user" লাইনটি ফাইল অোনার "john1"-এর জন্য অ্যাসাইন করা পারমিশন বোঝায়। "group" লাইনটি "johns" গ্রুপের অন্যান্য সদস্যদের জন্য অ্যাসাইন করা পারমিশন বোঝায়। আপনি حدس করলেন, "other" লাইনটি গ্রুপের বাইরে যেকোনো কেউকে বোঝায়।
ফাইলের الموجود ACL মডিফাই করতে setfacl কমান্ড ব্যবহার করি।
setfacl -m entity:name:permissions <file_name>
| entity | name | permissions |
|---|---|---|
| এখানে মান নির্দেশ করে ACL এন্ট্রিটি কার জন্য: user (u) অথবা group(g) অথবা others(o) |
ইউজার বা গ্রুপের নাম, যার জন্য ACL এন্ট্রিটি প্রাসঙ্গিক | রিড, রাইট, এক্সিকিউট পারমিশন r, w, x অক্ষর দিয়ে নির্দেশিত |
"john2"-কে প্রথমে ফাইলে রিড, রাইট অ্যাক্সেস দেওয়া হয়,

তারপর "jane1"-কে।

আপডেট করা "secretfile"-এর ACL দেখি।

দেখা যাচ্ছে "john2" এবং "jane1"-কে রিড এবং রাইট পারমিশন অ্যাসাইন করা হয়েছে।
ACL-এর প্রামাণিকতা যাচাই
দেখা যাচ্ছে "john2" ফাইল পড়তে এবং এতে লিখতে পারছে।

"john2"-এর যোগ করা নতুন ইনফরমেশন ফাইলে অ্যাপেন্ড হয়েছে।

একইভাবে "jane1"-কেও একই সুবিধা — রিড অ্যাক্সেস এবং রাইট অ্যাক্সেস।

কিন্তু একই গ্রুপের "john3" ফাইলে লিখতে পারছে না।

"jane2", যিনি অন্য ক্যাটাগরিতে আছেন, সেও ফাইলে লিখতে পারছেন না।

উপসংহার
এই প্রক্রিয়াটি ডিরেক্টরির জন্যও প্রসারিত করা যায়। অ্যাক্সেস কন্ট্রোল লিস্ট সিস্টেম অ্যাডমিনিস্ট্রেটরকে ফাইল এবং ডিরেক্টরি অ্যাক্সেস দক্ষতার সাথে হ্যান্ডল করতে সক্ষম করে।