লিনাক্সে এসিএল (অ্যাক্সেস কন্ট্রোল তালিকাগুলি) ব্যবহার করে ফাইল/ডিরেক্টরিগুলি সুরক্ষিত করুন


সিস্টেম অ্যাডমিন হিসাবে, আমাদের প্রথম অগ্রাধিকারটি অননুমোদিত অ্যাক্সেস থেকে ডেটা সুরক্ষা এবং সুরক্ষা করা হবে। Chmod, chown, chgrp… ইত্যাদি কিছু সহায়ক লিনাক্স কমান্ড ব্যবহার করে আমরা যে অনুমতিগুলি নির্ধারণ করেছি সে সম্পর্কে আমরা সকলেই অবগত রয়েছি, তবে এই ডিফল্ট অনুমতি সেটগুলির কিছুটা সীমাবদ্ধতা থাকে এবং কখনও কখনও আমাদের প্রয়োজন অনুযায়ী কাজ নাও করতে পারে। উদাহরণস্বরূপ, আমরা একই ডিরেক্টরি বা ফাইলের বিভিন্ন ব্যবহারকারীর জন্য পৃথক অনুমতি সেট সেট আপ করতে পারি না। সুতরাং, অ্যাক্সেস কন্ট্রোল তালিকাগুলি (এসিএল) প্রয়োগ করা হয়েছিল।

ধরা যাক, আপনার তিন ব্যবহারকারীর রয়েছে, ‘tecmint1’, ‘tecmint2’ এবং ‘tecmint3’। প্রত্যেকের অভিন্ন গ্রুপ বলছে ‘এসিএল’। ব্যবহারকারীর ‘টেকমিন্ট 1’ চায় যে কেবল ‘টেকমিন্ট 2’ ব্যবহারকারীর ‘টেকমিন্ট 1’ এর মালিকানাধীন ফাইলগুলি পড়তে এবং অ্যাক্সেস করতে পারে এবং এতে অন্য কারওর প্রবেশাধিকার নেই।

এসিএল (অ্যাক্সেস কন্ট্রোলের তালিকা) আমাদের একই কৌশল করতে দেয় trick এই এসিএলগুলি আমাদের ব্যবহারকারীর গোষ্ঠী তালিকায় নেই এমন কোনও ব্যবহারকারী, গোষ্ঠী এবং যে কোনও ব্যবহারকারীর যে কোনও গ্রুপের জন্য অনুমতি প্রদানের অনুমতি দেয়।

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

লিনাক্স সিস্টেমগুলিতে এসিএল সমর্থন কীভাবে চেক করবেন

এগিয়ে যাওয়ার আগে আপনার বর্তমান কার্নেল এবং মাউন্ট করা ফাইল সিস্টেমের এসিএলগুলির জন্য সমর্থন থাকা উচিত।

ফাইল সিস্টেমের জন্য এসিএল সমর্থন এবং POSIX_ACL = Y বিকল্প পরীক্ষা করার জন্য নিম্নলিখিত কমান্ডটি চালান (যদি Y এর পরিবর্তে N থাকে তবে তার অর্থ কার্নেল ACL সমর্থন করে না এবং এটি পুনরায় সংযুক্ত করার দরকার আছে)।

 grep -i acl /boot/config*

CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

এসিএলগুলির সাথে খেলা শুরু করার আগে নিশ্চিত হয়ে নিন যে আপনার প্রয়োজনীয় প্যাকেজ ইনস্টল করা আছে। নীচে প্রয়োজনীয় প্যাকেজগুলি রয়েছে যেগুলি yum বা apt-get ব্যবহার করে ইনস্টল করা দরকার।

 yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
 mount  | grep -i root

/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

তবে আমাদের ক্ষেত্রে এটি ডিফল্টরূপে acl প্রদর্শন করছে না। সুতরাং, পরবর্তী আমাদের ACL অপশনটি ব্যবহার করে মাউন্ট করা পার্টিশনটি পুনরায় মাউন্ট করার বিকল্প রয়েছে। তবে, এগিয়ে যাওয়ার আগে আমাদের আরও একটি বিকল্প রয়েছে তা নিশ্চিত করার জন্য যে পার্টিশনটি এসিএল বিকল্পের সাথে মাউন্ট করা আছে বা না, কারণ সাম্প্রতিক সিস্টেমের জন্য এটি ডিফল্ট মাউন্ট বিকল্পের সাথে সংহত হতে পারে।

 tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

উপরের আউটপুটে আপনি দেখতে পাচ্ছেন যে ডিফল্ট মাউন্ট বিকল্পটিতে ইতিমধ্যে এসিএল সমর্থন রয়েছে। অন্য বিকল্পটি নিম্নোক্ত পার্টিশনটি পুনরায় মাউন্ট করা।

 mount -o remount,acl /

এরপরে, এটিকে স্থায়ী করতে ‘/ etc/fstab’ ফাইলটিতে নীচে প্রবেশ করুন add

/dev/mapper/fedora-root /	ext4    defaults,acl 1 1

আবার, পার্টিশন পুনরায় মাউন্ট করুন।

 mount -o remount  /

এনএফএস সার্ভারে, এনএসএফ সার্ভারের মাধ্যমে রফতানি করা ফাইল সিস্টেমটি এসিএল সমর্থন করে এবং এসিএলগুলি এনএফএস ক্লায়েন্টরা পড়তে পারে, তবে এসিএলগুলি ক্লায়েন্ট সিস্টেম দ্বারা ব্যবহার করা হবে।

এনএফএস শেয়ারে এসিএল অক্ষম করার জন্য, আপনাকে এনএফএস সার্ভারে ‘/ ইত্যাদি/এক্সপোর্টফেস’ ফাইলটিতে “no_acl” বিকল্প যুক্ত করতে হবে। এটিকে এনএসএফ ক্লায়েন্টের অক্ষম করতে আবার মাউন্ট সময় "no_acl" বিকল্পটি ব্যবহার করুন।

কীভাবে লিনাক্স সিস্টেমগুলিতে এসিএল সমর্থন কার্যকর করা যায়

দুটি ধরণের এসিএল রয়েছে:

  1. অ্যাক্সেস এসিএল: অ্যাক্সেস এসিএলগুলি কোনও ফাইল বা ডিরেক্টরিতে অনুমতি দেওয়ার জন্য ব্যবহৃত হয়
  2. ডিফল্ট এসিএলস: ডিফল্ট এসিএলগুলি কেবলমাত্র একটি নির্দিষ্ট ডিরেক্টরিতে অ্যাক্সেস নিয়ন্ত্রণ তালিকা নির্ধারণ/সেট করার জন্য ব্যবহৃত হয়

অ্যাক্সেস এসিএল এবং ডিফল্ট এসিএল এর মধ্যে পার্থক্য:

  1. ডিফল্ট এসিএল কেবল ডিরেক্টরি স্তরে ব্যবহার করা যেতে পারে
  2. সেই ডিরেক্টরিতে তৈরি হওয়া যে কোনও উপ ডিরেক্টরি বা ফাইল তার মূল ডিরেক্টরি থেকে এসিএলগুলির উত্তরাধিকারী হবে। অন্যদিকে কোনও ফাইল তার অ্যাক্সেস এসিএল হিসাবে ডিফল্ট এসিএলকে উত্তরাধিকার সূত্রে আসে
  3. আমরা ডিফল্ট এসিএল সেট করার জন্য "”d" ব্যবহার করি এবং ডিফল্ট এসিএলগুলি alsচ্ছিক।

নির্দিষ্ট ফাইল বা ডিরেক্টরিতে ডিফল্ট এসিএল নির্ধারণ করতে, ‘getfacl’ কমান্ডটি ব্যবহার করুন। নীচের উদাহরণে, getfacl একটি ফোল্ডার ‘সংগীত’ এর জন্য ডিফল্ট এসিএলগুলি পেতে ব্যবহৃত হয়।

 getfacl Music/

# file: Music/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-

নির্দিষ্ট ফাইল বা ডিরেক্টরিতে ডিফল্ট এসিএল সেট করতে, ‘সেটফ্যাকল’ কমান্ডটি ব্যবহার করুন। নীচের উদাহরণে, setfacl কমান্ড একটি ফোল্ডারে ‘সংগীত’ এ একটি নতুন এসিএল (পড়ুন এবং চালিত) সেট করবেন।

 setfacl -m d:o:rx Music/
 getfacl Music/
# file: Music/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

যে কোনও ফাইল বা ডিরেক্টরিতে সেটিংস বা সংশোধন করার জন্য ‘সেটফ্যাকল’ কমান্ডটি ব্যবহার করুন। উদাহরণস্বরূপ, ব্যবহারকারীর ‘tecmint1’ পড়ার এবং লেখার অনুমতি দেওয়ার জন্য।

# setfacl -m u:tecmint1:rw /tecmint1/example

যে কোনও ফাইল বা ডিরেক্টরিতে এসিএল দেখার জন্য ‘getfacl’ কমান্ডটি ব্যবহার করুন। উদাহরণস্বরূপ, ‘/ tecmint1/উদাহরণ‘ এএসএল দেখতে নীচের কমান্ডটি ব্যবহার করুন।

# getfacl /tecmint1/example

# file: tecmint1/example/
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

যে কোনও ফাইল/ডিরেক্টরি থেকে এসিএল অপসারণের জন্য, আমরা নীচে প্রদর্শিত হিসাবে এক্স এবং বি বিকল্পগুলি ব্যবহার করি।

# setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.

# setfacl -b  file/directory   		#removing all ACL from file/direcoty

আসুন নিম্নলিখিত পরিস্থিতিতে এর ACL এর প্রয়োগ করা যাক।

দু'জন ব্যবহারকারী (tecmint1 এবং tecmint2), দু'জনেরই রয়েছে 'এসিএল' নামে সাধারণ গৌণ গ্রুপ। আমরা ‘tecmint1’ এর মালিকানাধীন একটি ডিরেক্টরি তৈরি করব এবং সেই ডিরেক্টরিতে ব্যবহারকারীর জন্য ‘tecmint2’ পড়ার এবং সম্পাদনের অনুমতি সরবরাহ করব।

পদক্ষেপ 1: দুটি ব্যবহারকারী তৈরি করুন এবং উভয় থেকে পাসওয়ার্ড সরান

 for user in tecmint1 tecmint2

> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success

পদক্ষেপ 2: মাধ্যমিক গোষ্ঠীতে একটি গ্রুপ এবং ব্যবহারকারী তৈরি করুন।

 groupadd acl
 usermod -G acl tecmint1
 usermod -G acl tecmint2

পদক্ষেপ 3: একটি ডিরেক্টরি/tecmint তৈরি করুন এবং মালিকানা tecmint1 এ পরিবর্তন করুন।

 mkdir /tecmint1
 chown tecmint1 /tecmint1/
 ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
 getfacl /tecmint1

getfacl: Removing leading '/' from absolute path names
# file: tecmint1
# owner: tecmint1
# group: root
user::rwx
group::r-x
other::r-x

পদক্ষেপ 4: tecmint1 দিয়ে লগইন করুন এবং/টেকমিন্ট ফোল্ডারে একটি ডিরেক্টরি তৈরি করুন।

[[email  ~]$ su - tecmint1

Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmin[email  ~]$ cd /tecmint1/
[[email  tecmint1]$ mkdir example
[[email  tecmint1]$ ll

total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[[email  tecmint1]$ whoami 
tecmint1

পদক্ষেপ 5: এখন ‘সেটফ্যাকল’ ব্যবহার করে এসিএল সেট করুন, যাতে ‘টেকমিন্ট 1’ এর সমস্ত rwx অনুমতি থাকবে, ‘টেকমিন্ট 2’ এর কেবলমাত্র ‘উদাহরণ’ ফোল্ডারে পড়ার অনুমতি থাকবে এবং অন্যের কোনও অনুমতি নেই।

$ setfacl -m u:tecmint1:rwx example/
$ setfacl -m u:tecmint2:r-- example/
$ setfacl -m  other:--- example/
$ getfacl example/

# file: example
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---

পদক্ষেপ:: এখন অন্য ব্যবহারকারীর সাথে লগইন করুন - ‘টেকমিন্ট ২’ অন্য টার্মিনালে এবং ডিরেক্টরিটিকে ‘/ tecmint1’ এ পরিবর্তন করুন। এখন ‘ls’ কমান্ড ব্যবহার করে সামগ্রীগুলি দেখার চেষ্টা করুন এবং তারপরে ডিরেক্টরি পরিবর্তন করার চেষ্টা করুন এবং নীচের মত পার্থক্য দেখুন।

[[email  ~]$ su - tecmint2

Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[[email  ~]$ cd /tecmint1/
[[email  tecmint1]$ ls -lR example/
example/:
total 0
[[email  tecmint1]$ cd example/

-bash: cd: example/: Permission denied
[[email  tecmint1]$ getfacl example/

# file: example
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

পদক্ষেপ:: এখন ‘উদাহরণস্বরূপ’ ফোল্ডারে ‘টেকমিন্ট 2’ কে ‘এক্সিকিউট’ করার অনুমতি দিন এবং তারপরে প্রভাবটি দেখতে ‘সিডি’ কমান্ডটি ব্যবহার করুন। এখন ‘টেকমিন্ট টু’ এর ডিরেক্টরি দেখার ও পরিবর্তন করার অনুমতি রয়েছে তবে কিছু লেখার অনুমতি নেই।

[[email  tecmint1]$ setfacl -m u:tecmint2:r-x example/
[[email  tecmint1]$ getfacl example/

# file: example
# owner: tecmint1
# group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[[email  ~]$ su - tecmint2

Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[[email  ~]$ cd /tecmint1/
[[email  tecmint1]$ cd example/
[[email  example]$ getfacl .
[[email  example]$ mkdir test

mkdir: cannot create directory ‘test’: Permission denied
[[email  example]$ touch test

touch: cannot touch ‘test’: Permission denied

দ্রষ্টব্য: এসিএল বাস্তবায়নের পরে, আপনি নীচে নীচে ‘ls –l’ আউটপুট জন্য একটি অতিরিক্ত ‘+’ চিহ্ন দেখতে পাবেন।

 ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

রেফারেন্স লিংক

ACL এর ডকুমেন্টেশন