2009-02-24 7 views
91

मेरे पास लंबे समय से चलने वाली स्क्रिप्ट्स और एप्लिकेशन का एक गुच्छा है जो कुछ उपयोगकर्ताओं के बीच साझा निर्देशिका में आउटपुट परिणाम संग्रहीत कर रहे हैं। मुझे यह सुनिश्चित करने का एक तरीका चाहिए कि इस साझा निर्देशिका के तहत बनाई गई प्रत्येक फ़ाइल और निर्देशिका में u=rwxg=rwxo=r अनुमतियां होंगी।लिनक्स में निर्देशिका के तहत नव निर्मित फ़ाइलों और उप-निर्देशिकाओं के लिए डिफ़ॉल्ट अनुमतियां सेट करना?

मुझे पता है कि मैं अपनी विभिन्न स्क्रिप्ट से सिर पर umask 006 का उपयोग कर सकता हूं, लेकिन मुझे वह दृष्टिकोण पसंद नहीं है क्योंकि कई उपयोगकर्ता अपनी स्क्रिप्ट लिखते हैं और खुद को उमास्क सेट करना भूल सकते हैं।

मैं वास्तव में फाइल सिस्टम को किसी निश्चित फ़ोल्डर में एक निश्चित अनुमति के साथ नई बनाई गई फ़ाइलों और निर्देशिकाओं को सेट करना चाहता हूं। क्या ये संभव भी है?

अद्यतन: मुझे लगता है यह POSIX ACLs के साथ किया जा सकता है, डिफ़ॉल्ट एसीएल कार्यक्षमता का उपयोग, लेकिन यह सब एक सा क्षण में मेरे सिर पर है। यदि कोई व्यक्ति डिफ़ॉल्ट एसीएल का उपयोग कैसे कर सकता है, तो यह शायद इस सवाल का जवाब अच्छी तरह से देगा।

+1

पॉज़िक्स एसीएल अच्छा हैं, हालांकि आपके द्वारा सामना की जाने वाली मशीनों का 60% अच्छा वितरण वितरण के आधार पर कुछ फ़ाइल सिस्टम के लिए चालू नहीं होगा। यहां एक बहुत अच्छा परिचय और उदाहरण दिया गया है: http://www.suse.de/~agruen/acl/linux-acls/online/ –

+1

आपका मतलब है कि मैंने वही दस्तावेज़ लिंक किया है :) मुझे इसे पढ़ने में कोई बदलाव नहीं आया है अभी तक लेकिन उपलब्धता की समस्या पर सिर के लिए धन्यवाद। –

+1

टिम पोस्ट की टिप्पणी में लिंक मृत प्रतीत होता है, लेकिन इंटरनेट आर्काइव के लिए धन्यवाद, मैं इसे देख सकता हूं, और यह सत्यापित कर सकता हूं कि http://www.vanemery.com/Linux/ACL/POSIX_ACL_on_Linux.html में एक ही दस्तावेज़ है। मैं लिंक को अपडेट करने के लिए प्रश्न संपादित करूंगा। – rmunn

उत्तर

70

सही स्वामित्व पाने के लिए आपको

chmod g+rwxs dirname 

इस के साथ निर्देशिका पर समूह setuid बिट सेट यह सुनिश्चित करेंगे कि निर्देशिका में बनाई गई फ़ाइलों समूह के स्वामित्व में हैं कर सकते हैं। आपको यह सुनिश्चित करना चाहिए कि हर कोई उमास्क 002 या 007 या उस प्रकृति के कुछ के साथ चलता है --- यही कारण है कि डेबियन और कई अन्य लिनक्स सिस्टम डिफ़ॉल्ट रूप से प्रति-उपयोगकर्ता समूहों के साथ कॉन्फ़िगर किए जाते हैं।

मुझे उपयोगकर्ता की उमास्क बहुत मजबूत होने पर अनुमतियों को बल देने के तरीके के बारे में पता नहीं है।

+20

यह वास्तव में समाधान प्रदान नहीं करता है- वह अनुमतियों के बारे में पूछताछ नहीं है, और ऐसा करने का एकमात्र तरीका है [एसीएल के साथ] (http://stackoverflow.com/a/13906099/165673) – Yarin

+2

"... बनाना सुनिश्चित करें कि हर कोई उमास्क 002 या 007 या उस प्रकृति के कुछ के साथ चलता है "- यह एक खिंचाव है .... आप पोस्टफिक्स, डोवकोट, क्लैम और स्पैम हत्यारे को कैसे करते हैं? – jww

+1

's' भाग क्या करता है? धन्यवाद। –

4

यह बदसूरत है, लेकिन आप जो भी चाहते हैं उसे प्राप्त करने के लिए setfacl कमांड का उपयोग कर सकते हैं।

सोलालिस मशीन पर, मेरे पास एक फ़ाइल है जिसमें उपयोगकर्ताओं और समूहों के लिए एसीएल शामिल हैं।

user::rwx 
user:user_a:rwx 
user:user_b:rwx 
... 
group::rwx 
mask:rwx 
other:r-x 
default:user:user_a:rwx 
default:user:user_b:rwx 
.... 
default:group::rwx 
default:user::rwx 
default:mask:rwx 
default:other:r-x 

नाम फ़ाइल acl.lst और user_X बजाय अपने वास्तविक उपयोगकर्ता नाम भरें: दुर्भाग्य से, आप उन (कम से कम मैं अन्यथा इस काम करने के लिए एक तरह से नहीं मिल सकता है) के सभी सूचीबद्ध करने के लिए है ।

अब आप निम्न आदेश जारी करके अपने निर्देशिका पर उन acls सेट कर सकते हैं:

setfacl -f acl.lst /your/dir/here 
+0

क्या आप उपयोगकर्ता सूची को छोड़ सकते हैं यदि वे सभी एक ही समूह के सदस्य हैं, और केवल समूह अनुमतियों का उपयोग करते हैं? –

+0

मैं खुद से एक ही सवाल पूछ रहा था। यह थोड़ी देर हो गया है क्योंकि मैंने इसे स्थापित किया है। लेकिन हर बार जब मैं एक नया उपयोगकर्ता (दूसरे समूह के समान समूह में) प्राप्त करता हूं, तो मैं सूची को अपडेट करना भूल जाता हूं और मुझे नए उपयोगकर्ता के बारे में शिकायतें मिलेंगी जो फाइलें लिखने/हटाने में सक्षम नहीं हैं। तो जवाब है: नहीं, आप नहीं कर सकते। – innaM

54

यहाँ कैसे डिफ़ॉल्ट एसीएल का उपयोग कर यह करने के लिए, कम से कम लिनक्स के तहत है।

सबसे पहले, आप को अपने फाइल सिस्टम पर एसीएल समर्थन सक्षम करने की आवश्यकता है। यदि आप ext4 का उपयोग कर रहे हैं तो यह पहले से ही सक्षम है। अन्य फाइल सिस्टम (उदा।, Ext3) acl विकल्प के साथ घुड़सवार करने की आवश्यकता है। उस स्थिति में, अपने /etc/fstab पर विकल्प जोड़ें।उदाहरण के लिए, यदि निर्देशिका अपने रूट फाइल सिस्टम पर स्थित है:

/dev/mapper/qz-root / ext3 errors=remount-ro,acl 0 1 

तो यह पुन: माउंट:

setfacl -dm u::rwx,g::rwx,o::r /shared/directory 

: अब

mount -oremount/

, डिफ़ॉल्ट एसीएल सेट करने के लिए निम्न आदेश का उपयोग /shared/directory में सभी नई फाइलों को अब वांछित अनुमतियां मिलनी चाहिए। बेशक, यह फ़ाइल बनाने वाले एप्लिकेशन पर भी निर्भर करता है। उदाहरण के लिए, अधिकांश फ़ाइलों को शुरुआत से किसी के द्वारा निष्पादन योग्य नहीं किया जाएगा (ओपन (2) या क्रिएट (2) कॉल के लिए मोड तर्क के आधार पर), जैसे कि उमास्क का उपयोग करते समय। कुछ उपयोगिताओं जैसे cp, tar, और rsync स्रोत फ़ाइल (ओं) की अनुमतियों को संरक्षित करने का प्रयास करेंगे जो स्रोत फ़ाइल समूह-लेखन योग्य नहीं होने पर आपके डिफ़ॉल्ट एसीएल को मुखौटा कर देगा।

आशा है कि इससे मदद मिलती है!

+0

ऐसा लगता है कि अभी भी सभी उपयोगकर्ताओं के लिए उचित 'उमास्क' की आवश्यकता है। =/http://unix.stackexchange.com/questions/71743/using-setfacl-to-allow-group-members-to-write-to-any-file-in-a- डायरेक्टरी –

+1

@techtonik जैसा कि मैंने लिखा था, यह फ़ाइल बनाने के आवेदन पर निर्भर करता है। उदा।, यदि आप 'सीपी' का उपयोग करते हैं तो यह स्रोत फ़ाइल की अनुमतियों की प्रतिलिपि बनाने का प्रयास करेगा। 'Cp' का उपयोग करते समय भी 'umask' मदद नहीं करता है। मैंने 'tar' के साथ एक ही समस्या देखी है। [यह सवाल] देखें (http://serverfault.com/questions/183800/why-does-cp-not-respect-acls)। – pelle

+0

@techtonik मैंने अपने उत्तर में इस बारे में एक वाक्य जोड़ा है। – pelle

2
अपने खोल स्क्रिप्ट में

(या .bashrc) आप की तरह somthing उपयोग कर सकते हैं:

umask 022

umask एक आदेश है कि एक मुखौटा है कि कैसे फाइल अनुमति नई बनाई गई फ़ाइलों के लिए सेट कर रहे हैं को नियंत्रित करता है की सेटिंग निर्धारित करता है।

+0

यह सही नहीं है क्योंकि उमास्क उन अनुमतियों को सीमित करता है जो अनुमतियां नहीं जोड़ सकते हैं – ACV

संबंधित मुद्दे