ডিরেক্টরি এবং ফাইলগুলিতে পৃথক এসিএল সেট করা


15

আমি কোনও ফাইল ভাগের জন্য ডিফল্ট অনুমতিগুলি সেট আপ করতে চাই যাতে প্রত্যেকে rwxডিরেক্টরিটি তৈরি করতে পারে এবং যাতে নতুন তৈরি হওয়া সমস্ত ফাইল থাকে rw

এই ভাগটি অ্যাক্সেস করছেন এমন প্রতিটি ব্যক্তি একই গ্রুপে আছেন, সুতরাং এটি উদ্বেগের বিষয় নয়।

আমি ব্যবহারকারীর উমাস্ক এবং এর সমস্ত পরিবর্তন না করে এসিএলের মাধ্যমে এটি করার দিকে নজর রেখেছি। আমার বর্তমান আমন্ত্রণগুলি এখানে:

setfacl -Rdm g:mygroup:rwx share_name
setfacl -Rm g:mygroup:rwx share_name

আমার সমস্যা হল যখন আমি নব নির্মিত সব চাই উপ-ডিরেক্টরির হতে rwx, আমি শুধুমাত্র নব নির্মিত চান ফাইল হতে rw

আমার পছন্দসই শেষ ফলাফলটি অর্জন করার জন্য কারও কাছে কি আরও ভাল পদ্ধতি আছে? সেখানে একটি অনুরূপ শিরা আলাদাভাবে ফাইল থেকে ডিরেক্টরি উপর সেট ACLs কিছু উপায় কী chmod +xবনাম chmod +X?

ধন্যবাদ

উত্তর:


12

গিলস যেমন উল্লেখ করেছেন, setfaclডিফল্ট অনুমতিগুলি মূলত প্রতিস্থাপন করে সর্বাধিক অনুমতি নির্দিষ্ট করে umask। সুতরাং নতুন তৈরি করা ফাইলগুলি যদি না rwএই ফাইলটি তৈরি করে এমন অ্যাপ্লিকেশনগুলি বিশেষভাবে এটি কার্যকর করতে বলা হয়।

$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--

$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x                         #effective:r--
group:mygroup:rwx                  #effective:rw-
mask::rw-
other::r--

উপরের কার্যকর পার্মসটি নোট করুন। (কেবলমাত্র কয়েকটি প্রোগ্রাম রয়েছে যেগুলি এটি তৈরি করে এমন ফাইলগুলিতে এক্সিকিউট বিট সেট করতে বলবে, যেমন gccএক্সিকিউটেবলের জন্য এবং cpযদি ফাইলটি অনুলিপি করা হয় যদি এক্সিকিউটেবল হয়))

বা আপনি কি বোঝাতে চেয়েছেন যে প্রথম সেটফ্যাকল কমান্ডটি আপনি যেমনভাবে কাজ করছেন, কিন্তু দ্বিতীয়টি তা হয়নি? অন্য কথায়, আপনি পুরানো ফাইলগুলিতে অনুমতিগুলি স্থির করার সন্ধান করছেন, অন্য নিয়মিত ফাইলগুলি অনুমতি না দিয়েই ডিরেক্টরিগুলি ট্র্যাজেবল হতে পারে তা নিশ্চিত করে?

আমার সংস্করণটি আপনার যেমন পছন্দ করে তেমনি setfaclঅনুমতি দেয় X:

setfacl g:mygroup:rwX

$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513    4 drwxr-xr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-r--r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxr-xr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rwxr--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rw-r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir

আপনার সংস্করণ setfaclযদি এটি সমর্থন করে না, তবে কেন ব্যবহার findকরবেন না ?

অনুমতিগুলি ওভাররাইট করে, ফাইলগুলির জন্য rw এ সেট করে এবং ডায়ারের জন্য rwx

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

বিদ্যমান গ্রুপ অনুমতিগুলির উপর ভিত্তি করে মাইগ্রুপ ACL অনুমতি সেট করুন

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

আপনি সম্ভবত এটি পরীক্ষা করতে চাইবেন যে গ্রুপ মাস্ক কার্যকর অনুমতি দেয় provides যদি তা না হয় তবে আপনাকে এটি চালাতে হবে:

$ find . -type d -exec chmod g+rwX '{}' ';'

4

ভবিষ্যতের পাঠকদের জন্য, setfaclআপনার ফাইলগুলিতে এক্সিকিউটেবল বিট যোগ না করে বিদ্যমান ফাইল / ফোল্ডারগুলিতে ব্যবহার করার জন্য সমাধানটি হ'ল মাইকেলের উত্তরের এই অংশ :

আমার সেটফ্যাকেলের সংস্করণটি আপনার পছন্দ মতো এক্সকে অনুমতি দেয়, যেমন:

setfacl g:mygroup:rwX

setfaclডকুমেন্টেশন থেকে প্রাসঙ্গিক অংশ :

পারমস ক্ষেত্র হ'ল অক্ষরগুলির সংমিশ্রণ যা অনুমতিগুলি নির্দেশ করে: পড়ুন (র), লিখুন (ডাব্লু), এক্সিকিউট করুন (এক্স), কেবলমাত্র ফাইলটি ডিরেক্টরি হয় বা ইতিমধ্যে কিছু ব্যবহারকারীর (এক্স) এর জন্য অনুমতি কার্যকর করার অনুমতি থাকলে তা কার্যকর করুন


2

যতদূর আমি লিনাক্স এসিএলগুলি বুঝতে পারি, setfacl -Rdm g:mygroup:rwx share_nameআপনি যা চান ঠিক তা করে। পরীক্ষা:

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

তারপরে গ্রুপে আলাদা ব্যবহারকারী হিসাবে mygroup:

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

কি হচ্ছে?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

এর জন্য কার্যকর ACL mygroupহ'ল ACL_MASK ACL_GROUPএন্ট্রি mygroup( rwx) সহ ( ) এর জন্য প্রবেশের ফলাফল এবং এবং করা rw-

ACL (5) man পৃষ্ঠা অধীনে "অ্যাক্সেস পরীক্ষা আলগোরিদিম" হিসাব এই ব্যাখ্যা করে। এটি ACL_MASKএন্ট্রিগুলি কীভাবে উত্পন্ন হয় তা ব্যাখ্যা করে না , তবে বাস্তবে সঠিক জিনিসটি মনে হচ্ছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.