Umask एसीएल को कैसे प्रभावित करता है?


12

क्या कोई मुझे समझा सकता है umaskकि ACL सक्रिय होने पर नई बनाई गई फ़ाइलों के डिफ़ॉल्ट मास्क को कैसे प्रभावित करता है? क्या इसके बारे में कुछ दस्तावेज हैं?

उदाहरण:

$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx .  # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc     x.c   -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx           #effective:rw-
group::---
mask::rw-
other::---

मैं उम्मीद करूंगा mask:rwxumaskउदाहरण के लिए सेटिंग के बाद 027मुझे अपेक्षित व्यवहार मिलता है।


077 के उमक के साथ, आपको ए mask::rw-। लेकिन यह वास्तव में आपका सवाल नहीं है, सही है?
स्लम

@ एसएलएम यह मेरे सवाल का हिस्सा है। मैं जानना चाहता हूं कि नई फाइलों का मुखौटा ओम्स्क पर कैसे निर्भर करता है। मैं काफी हैरान था कि 077 के साथ मुझे मिलता है mask::rw-और न mask::rwxकि जो निर्देशिका का डिफ़ॉल्ट मुखौटा था।
जोफेल

ठीक है, मैं अपने उत्तर को अब उन उदाहरणों के साथ अपडेट कर रहा हूं जो इसे स्पष्ट करने में मदद करें। मुझे कुछ मिनट दो।
स्लम

यह प्रश्न निकट से संबंधित है।
जोफेल

जवाबों:


10

मुझे यह उदाहरण मिला, जिसका शीर्षक है: linux में ACL और MASK । इस लेख में निम्नलिखित उदाहरणों का प्रदर्शन किया गया है जो मुझे लगता है कि यह समझने में मदद करते हैं कि ACL कैसे और umaskएक दूसरे के साथ बातचीत करता है।

पृष्ठभूमि

जब लिनक्स सिस्टम पर एक फाइल बनाई जाती है तो डिफॉल्ट परमिशन 0666लागू होती है जबकि डायरेक्टरी बनाते समय डिफॉल्ट परमिशन 0777लागू होती है।

उदाहरण 1 - फ़ाइल

मान लीजिए कि हम अपने umask को 077 पर सेट करते हैं और एक फ़ाइल को स्पर्श करते हैं। हम यह straceदेखने के लिए उपयोग कर सकते हैं कि जब हम ऐसा करते हैं तो वास्तव में क्या हो रहा है:

$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile

इस उदाहरण में हम देख सकते हैं कि सिस्टम कॉल open()परमिशन 0666 के साथ किया गया है, हालाँकि जब umask 077कर्नेल द्वारा लागू किया जाता है तो निम्नलिखित अनुमतियाँ हटा दी जाती हैं ( ---rwxrwx) और हम rw-------उर्फ 0600 के साथ छोड़ देते हैं ।

उदाहरण - 2 निर्देशिका

एक ही अवधारणा को निर्देशिकाओं पर लागू किया जा सकता है, सिवाय इसके कि डिफ़ॉल्ट अनुमति 0666 के बजाय, वे 0777 हैं।

$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777)                  = 0
drwxr-xr-x 2 saml saml 4096 Jul  9 10:55 testdir

इस बार हम mkdirकमांड का उपयोग कर रहे हैं । mkdirआदेश तो सिस्टम कॉल बुलाया mkdir()। उपरोक्त उदाहरण में हम देख सकते हैं कि mkdirकमांड ने mkdir()सिस्टम कॉल को डिफॉल परमिशन 0777( rwxrwxrwx) के साथ कॉल किया है । इस बार 022निम्नलिखित अनुमतियों के एक umask के साथ हटा दिया जाता है ( ----w--w-), इसलिए हम 0755 ( rwxr-xr-x) के साथ छोड़ दिए जाते हैं जब निर्देशिकाएं बनाई जाती हैं।

उदाहरण 3 (डिफ़ॉल्ट ACL लागू करना)

अब एक डायरेक्टरी बनाते हैं और प्रदर्शित करते हैं कि जब डिफ़ॉल्ट ACL उसके साथ फाइल के साथ लागू होता है तो क्या होता है।

$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir

$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx          #effective:rwx
group::r-x          #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx      #effective:rwx
default:group::r-x      #effective:r-x
default:mask::rwx
default:other::r-x

अब फाइल बनाते हैं aclfile:

$ strace -s 128 -fvTttto luvly touch acldir/aclfile

# view the results of this command in the log file "luvly"
$ less luvly

अब नई बनाई गई फ़ाइल की अनुमति प्राप्त करें:

$ getfacl --all-effective acldir/aclfile 
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx          #effective:rw-
group::r-x          #effective:r--
mask::rw-
other::r--

सूचना, मुखौटा mask::rw-mask::rwxजब निर्देशिका बनाई गई थी, तो ऐसा क्यों नहीं है ?

luvlyफ़ाइल के निर्माण के लिए डिफ़ॉल्ट अनुमतियों का उपयोग किया गया था, यह देखने के लिए लॉग फ़ाइल की जाँच करें :

$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>

यह वह जगह है जहाँ यह थोड़ा भ्रामक है। rwxजब निर्देशिका बनाई गई थी तब मास्क सेट के साथ , आप फ़ाइल के निर्माण के लिए समान व्यवहार की उम्मीद करेंगे, लेकिन यह उस तरह से काम नहीं करता है। यह इसलिए है क्योंकि कर्नेल open()डिफ़ॉल्ट अनुमतियों के साथ फ़ंक्शन को कॉल कर रहा है 0666

संक्षेप में

  • फ़ाइलों को निष्पादन की अनुमति नहीं मिलेगी (मास्किंग या प्रभावी)। कोई फर्क नहीं पड़ता कि हम किस विधि का उपयोग करते हैं: एसीएल, उमस्क या मास्क और एसीएल।
  • निर्देशिकाओं को निष्पादन की अनुमति मिल सकती है, लेकिन यह निर्भर करता है कि मास्किंग फ़ील्ड कैसे सेट किया गया है।
  • किसी फ़ाइल के लिए अनुमतियाँ सेट करने का एकमात्र तरीका जो ACL अनुमतियों के अंतर्गत है, उन्हें मैन्युअल रूप से उपयोग करके सेट करना है chmod

संदर्भ


@ जोफेल - अगर यह समझ में आता है तो मुझे बताएं।
स्लम

@ मेरे विस्तृत जवाब के लिए आपका बहुत बहुत धन्यवाद। यह मुझे मेरी वास्तविक समस्या के करीब लाता है: चामोद syscall में समूह अनुमति फ़ाइल ( chmod("file",0760)-> mask:rw, chmod("file",0770)-> mask:rwx) के मास्क को प्रभावित करती है । शायद मुझे इस बारे में एक नया सवाल शुरू करना चाहिए ...
जोफेल

@ जोफेल - हाँ जो एक और सवाल की तरह लगता है।
स्लम

@ मेरी और यह पहले से ही यहाँ उत्तर दिया गया था ।
जोफेल

"जब एक लिनक्स सिस्टम पर एक फाइल बनाई जाती है तो डिफ़ॉल्ट अनुमतियाँ 0666 लागू होती हैं ..." - ठीक है कि यह सही नहीं है, क्योंकि यह एप्लिकेशन बनाने के लिए है।
ilkachachu

2

सुरक्षा उद्देश्यों के लिए, लिनक्स ऑपरेटिंग सिस्टम एक निष्पादित बिट के साथ फ़ाइल के स्वचालित निर्माण के लिए अनुमति नहीं देता है। यह साइबर हमलावरों को ऐसी फाइलों में प्रोग्राम लिखने और उन्हें निष्पादित करने से रोकने के लिए है, अगर वे आपके सर्वर तक पहुंच प्राप्त करते हैं। यह सिर्फ एक सुरक्षा एहतियात है। आपको हमेशा chmod उपयोगिता के साथ उन्हें बनाने के बाद फ़ाइलों पर मैन्युअल रूप से निष्पादित बिट सेट करना होगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.