আমি কীভাবে একটি দির (এসিএল সক্ষম) সহ পুনরাবৃত্তভাবে অনুমতিগুলি সেট করব?


24

উদাহরণস্বরূপ, আমি আমার সহকর্মীদের নির্দিষ্ট ডিরেক্টরিতে লেখার অ্যাক্সেস দিতে চাই। আসুন ধরে নেওয়া যাক এটির উপ-ডিরেক্টরিগুলিতে অ্যাক্সেসের অধিকার ছিল 775, ফাইলগুলি 664, এবং এছাড়াও ডিআর - 775 তে কিছু নির্বাহযোগ্য ফাইল ছিল were

এখন আমি লেখার অনুমতি যুক্ত করতে চাই। Chmod দিয়ে, আমি এরকম কিছু চেষ্টা করতে পারি

chmod o+w -R mydir/

তবে এটি দুর্দান্ত নয়, যেহেতু আমি দিরকে বিশ্ব লিখনযোগ্য করে তুলতে চাই না - আমি কেবলমাত্র নির্দিষ্ট ব্যবহারকারীদের অ্যাক্সেস দিতে চাই, তাই আমি এসিএল ব্যবহার করতে চাই। কিন্তু এই অনুমতিগুলি সেট করার কোনও সহজ উপায় আছে কি? আমি এটি দেখতে পেয়েছি, আমার কমপক্ষে তিনটি ক্ষেত্রে (ডায়ার, ফাইল, এক্সিকিউটেবল ফাইল) আলাদাভাবে মোকাবেলা করতে হবে:

find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;

এটি একটি সাধারণ কাজের জন্য কোড লাইন অনেকগুলি মনে হয়। একটি ভাল উপায় আছে কি?

উত্তর:


40

setfaclএকটি পুনরাবৃত্তির বিকল্প রয়েছে ( -R) ঠিক যেমন chmod:

  -R, --recursive
      Apply operations to all files and directories recursively. This
      option cannot be mixed with `--restore'.

এটি মূলধন-এক্স Xঅনুমতি ব্যবহারের অনুমতি দেয়, যার অর্থ:

  execute only if the file is a directory or already has
  execute permission for some user (X)

সুতরাং নিম্নলিখিত কাজ করে কাজ করা উচিত:

setfacl -R -m u:colleague:rwX .

(সমস্ত উদ্ধৃতি দেবিলে পাঠানো হিসাবে ACL-2.2.52 এরman setfacl জন্য রয়েছে )


4
ফ্রিবিএসডি 9
অ্যারন সি ডি ব্রুইন

6
তারপরে এটি ভাল যে ওপি তাদের প্রশ্নটিকে [লিনাক্স] হিসাবে ট্যাগ করেছে
32

মিস করেছেন। ;)
অ্যারন সি ডি ব্রুইন

এটি পরে তৈরি হওয়া নতুন ফাইল / ফোল্ডারগুলিতে স্বয়ংক্রিয়ভাবে প্রযোজ্য?
এনিগমা

আপনার সেটফ্যাকেলের সংস্করণটির জন্য ম্যান পৃষ্ঠাটি দেখুন। বিকল্পটি -Xঅন্তর্ভুক্ত হিসাবে প্রত্যাশার মতো কাজ করে না setfacl 2.2.49
ফায়াত

5

ইউএমএলটি দ্বারা উল্লিখিত হিসাবে, setfacl -Rবড় হাতের অক্ষর "এক্স" সহ কমান্ডটি যাওয়ার উপায়, যেমন:

setfacl -R -m u:colleague:rwX .

তবে, যাদের এসিএল পুনরায় প্রয়োগ করতে হবে তাদের (যেমন "সাব-ডিরেক্টরিতে" পুনরায় প্রয়োগের অনুমতি "Windows লা উইন্ডোজ)।

find . -mindepth 1 | xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')

ত্রুটি যেমন এড়ানোর জন্য সেই আদেশটি বিভক্ত করা যেতে পারে setfacl: foobar: Only directories can have default ACLs

find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')

মনে রাখবেন যে, বাক্য গঠন <( something )হয় প্রক্রিয়া উপকল্পন , যা ব্যাশ নির্দিষ্ট। আপনি যদি অন্য শেল ব্যবহার করেন তবে আপনাকে একটি অস্থায়ী ফাইল তৈরি করতে হবে।


0
for i in $(find /data -mindepth 0 -type d)
do setfacl -m  u:zabbix:r-x $i
    echo "ACL rules set for "$i
done


@ মুরু কৌতূহল থেকে দূরে, কেন নয়?
শাদুর

পুরো মন্তব্যটি একটি লিঙ্ক। এটি অনুসরণ করুন এবং খুঁজে।
মারু

আপনি এই পদ্ধতির ব্যবহার যেতে চানfind /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
sibaz

1
এটা ব্যবহার করোনা. $(find /data -mindepth 0 -type d)এক-এক করে ফলাফল ফিরিয়ে দেবে না, এটি পুরো ফলাফলগুলি বাফার করবে। যদি কোনও লাইনে একটি স্থান থাকে তবে আপনি $iভেরিয়েবলের একটি ভুল রেকর্ড পাবেন ।
জেনেছিলেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.