Gnu / linux पर फ़ाइल परमिशन आदि सेट करने के विभिन्न तरीके क्या हैं


19

यूनिक्स पर, बहुत समय पहले, मैंने सीखा chmod: यूनिक्स पर (और प्रोग्रामों को विशेषाधिकार प्राप्त करने के लिए, सेट्यूड, सेटगिड का उपयोग करने की अनुमति देने के लिए) पारंपरिक तरीके।

मैंने हाल ही में GNU / Linux पर कुछ नए कमांड खोजे हैं:

  • setfaclपारंपरिक ugo:rwxबिट्स और tबिट का विस्तार करता है chmod
  • setcapug:sबिट्स की तुलना में अधिक फिन-ग्रेन नियंत्रण देता है chmod
  • chattr फ़ाइल के कुछ अन्य नियंत्रण (थोड़ा मिश्रण) की अनुमति देता है।

क्या कोई और हैं?


अधिक विस्तार के लिए unix.stackexchange.com/q/183994/4778 भी देखेंchmod
ctrl-alt-delor

विस्तारित ACL (richACLs) के लिए unix.stackexchange.com/q/246606/4778 भी देखें ।
ctrl-alt-delor

जवाबों:


28

chmod: फ़ाइल मोड बिट्स बदलें

उपयोग (अष्ट मोड):

    chmod <octal-mode> files...

उपयोग (प्रतीकात्मक मोड):

    chmod <references><operator><modes> files..

referencesअक्षरों का एक संयोजन है ugoa, जो निर्दिष्ट करता है कि उपयोगकर्ता की filesइच्छा तक पहुंच संशोधित की जाएगी:

  • u उपयोगकर्ता जो इसका मालिक है
  • gअन्य उपयोगकर्ताओं के fileसमूह में
  • o अन्य उपयोगकर्ता फ़ाइल के समूह में नहीं हैं
  • a सभी उपयोगकर्ताओं

    यदि छोड़ा गया है, तो यह सभी उपयोगकर्ताओं के लिए डिफ़ॉल्ट है, लेकिन केवल अनुमतियों umaskको संशोधित किया गया है।

    operatorपात्रों में से एक है +-=:

    • + प्रत्येक की मौजूदा फ़ाइल मोड बिट्स में निर्दिष्ट फ़ाइल मोड बिट्स जोड़ें file
    • - प्रत्येक के मौजूदा फ़ाइल मोड बिट्स के लिए निर्दिष्ट फ़ाइल मोड बिट्स निकालता है file
    • =निर्दिष्ट बिट्स को जोड़ता है setuidऔर setgidनिर्देशिकाओं के लिए सेट बिट्स को छोड़कर अनिर्दिष्ट बिट्स को हटा देता है , जब तक कि स्पष्ट रूप से निर्दिष्ट नहीं किया जाता है।

    modeअक्षरों का एक संयोजन होता है rwxXst, जो निर्दिष्ट करता है कि किस बिट को संशोधित किया जाना है:

    • r पढ़ना
    • w लिखना
    • x निष्पादित (या निर्देशिका के लिए खोज)
    • X निष्पादित / खोज केवल अगर फ़ाइल एक निर्देशिका है या पहले से ही कुछ उपयोगकर्ता के लिए बिट सेट निष्पादित है
    • sनिर्धारित या निर्धारित (निर्दिष्ट के आधार पर references)
    • t प्रतिबंधित विलोपन ध्वज या चिपचिपा सा

    वैकल्पिक रूप से, modeअक्षरों में से एक शामिल हो सकता है ugo, जिस स्थिति में मोड वर्तमान में स्वामी ( u) को दिए गए अनुमतियों से मेल खाता है , सदस्य के fileसमूह ( g) का सदस्य या पूर्ववर्ती श्रेणियों में से किसी में भी उपयोगकर्ताओं की अनुमति नहीं है ( o)।

chmodसमझाया के विभिन्न बिट्स :

  • अभिगम नियंत्रण (यह भी देखें setfacl)
    • rwx - पढ़ें (आर), लिखें (डब्ल्यू), और निष्पादित / क्रॉस (एक्स) अनुमतियाँ।
      • यदि फ़ाइल को पढ़ा जा सकता है, या यदि कोई निर्देशिका सूचीबद्ध की जा सकती है, तो (r) प्रभावित करता है।
      • यदि कोई फ़ाइल लिखी जा सकती है, या यदि कोई निर्देशिका संपादित की जा सकती है (फ़ाइलें जोड़ी गई, हटाई गई, नाम बदली गई हैं) तो लिखें (w) प्रभावित करता है।
      • यदि फ़ाइल को चलाया जा सकता है, तो स्क्रिप्ट (देखें #!), और अन्य निष्पादन योग्य फ़ाइलों का उपयोग करने पर निष्पादन (x) प्रभावित होता है ।
      • यदि कोई निर्देशिका ट्रेस की जा सकती है तो क्रॉस (x) प्रभावित करता है।
    • sऔर t- निर्देशिकाओं पर चिपचिपा बिट (टी), और सेटगिड (एस)
      • चिपचिपा सा केवल निर्देशिकाओं को प्रभावित करता है। निर्देशिका में फ़ाइलों को हटाने से फ़ाइल स्वामी और रूट को छोड़कर कोई भी रोक देगा।
      • सेटिग्ग बिट पर निर्देशिकाओं में, नई फ़ाइलों और निर्देशिकाओं के समूह को एक ही समूह में सेट करने का कारण होगा, और नई निर्देशिकाओं के लिए सेटगिड बिट सेट (सेटफ़ेकल में चूक भी देखें) होगा।
    • s - निष्पादन योग्य फाइलों पर सेतु, सेटगिड।
      • यह सुरक्षा को खराब तरीके से प्रभावित कर सकता है, अगर आपको नहीं पता कि आप क्या कर रहे हैं।
      • जब एक निष्पादन योग्य चलाया जाता है, यदि इनमें से एक बिट सेट होता है, तो निष्पादन योग्य का प्रभावी उपयोगकर्ता / समूह फ़ाइल के रूप में बन जाएगा। इस प्रकार यह प्रोग्राम उस उपयोगकर्ता के रूप में चलता है। देखना setcapयह करने के लिए एक और अधिक आधुनिक तरीके के लिए।

chown chgrp:


chattr: फ़ाइल विशेषताएँ बदलें

उपयोग:

    chattr <operator><attribute> files...

operatorवर्णों में से एक है +-=: * +चयनित विशेषताओं को जोड़ता है जो मौजूदा attributesके लिए है files * -चयनित को हटा देता है attributes * =विशेषताओं के वर्तमान सेट को ओवरराइट करता है जो फ़ाइलों के पास निर्दिष्ट है attributes

attributeअक्षरों का एक संयोजन है acdeijstuADST, जो विशेषताओं के अनुरूप है:

  • a केवल संलग्न करें
  • c दबा हुआ
  • d कोई डंप नहीं
  • e हद प्रारूप
  • i अडिग
  • j डेटा जर्नलिंग
  • s सुरक्षित विलोपन
  • t कोई पूंछ-विलय नहीं
  • u undeletable
  • Aकोई atimeअद्यतन नहीं
  • D तुल्यकालिक निर्देशिका अद्यतन
  • S तुल्यकालिक अद्यतन
  • T निर्देशिका पदानुक्रम के ऊपर

setfattr: विस्तारित फ़ाइल विशेषताएँ बदलें

उपयोग (सेट विशेषता):

    setfattr -n <name> -v <value> files...

उपयोग (निकालें):

    setfattr -x <name> files...

name सेट या हटाने के लिए विस्तारित विशेषता का नाम है

value विस्तारित विशेषता का नया मूल्य है


setfacl: फ़ाइल अभिगम नियंत्रण सूचियों को बदलें

उपयोग:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option निम्नलिखित में से एक को शामिल करना चाहिए:

  • --set पिछले ACL की जगह किसी फ़ाइल या निर्देशिका के ACL को सेट करें
  • -m| --modifyएक फ़ाइल या निर्देशिका के एसीएल को संशोधित करें
  • -x| --remove किसी फ़ाइल या निर्देशिका की ACL प्रविष्टियाँ निकालें

    targetअक्षरों में से एक है ugmo(या नीचे दिखाया गया लंबा रूप):

  • u, usersएक नामित उपयोगकर्ता की अनुमति के द्वारा की पहचान param, फ़ाइल मालिक को चूक uidकरता है, तो छोड़े गए

  • g, groupद्वारा की पहचान एक नाम वाले समूह की अनुमति param, समूह के मालिक के लिए डिफ़ॉल्ट uidअगर छोड़े गए
  • m, maskप्रभावी अधिकार मुखौटा
  • o, otherदूसरों की अनुमति

    permsअक्षरों का एक संयोजन है rwxX, जो अनुमतियों के अनुरूप है:

  • r पढ़ना

  • w लिखना
  • x निष्पादित
  • X केवल तभी निष्पादित करें जब फ़ाइल एक निर्देशिका है या पहले से ही कुछ उपयोगकर्ता के लिए अनुमति निष्पादित है

    वैकल्पिक रूप से, permsएक ऑक्टल अंक ( 0- 7) हो सकता है जो अनुमतियों के सेट को दर्शाता है।


setcap: फ़ाइल क्षमताओं को बदलें

उपयोग:

    setcap <capability-clause> file 

एक capability-clauseके एक अल्पविराम से अलग किए होते क्षमता ऑपरेटर-ध्वज जोड़ों की सूची के बाद नाम।

उपलब्ध ऑपरेटर हैं =, +और -। उपलब्ध झंडे हैं e, iऔर pजो प्रभावी , विरासत और अनुमति क्षमता के अनुरूप हैं ।

=ऑपरेटर निर्दिष्ट क्षमता सेट उठाते हैं और दूसरों को रीसेट कर देगा। यदि =ऑपरेटर के साथ संयोजन में कोई झंडे नहीं दिए गए हैं तो सभी क्षमता सेट रीसेट हो जाएंगे। +और -ऑपरेटरों क्रमशः बढ़ा या एक या अधिक निर्दिष्ट क्षमता सेट कम करेगा।


chcon: फ़ाइल SELinux सुरक्षा संदर्भ बदलें

उपयोग:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

उपयोगकर्ता SELinux उपयोगकर्ता है, जैसे कि user_u, system_uया root

भूमिका SELinux भूमिका है (हमेशा object_rफ़ाइलों के लिए)

प्रकार SELinux विषय प्रकार है


chsmack: SMACK विस्तारित विशेषताएँ बदलें

उपयोग:

    chsmack -a <value> file

valueSMACK64विस्तारित फ़ाइल विशेषता के लिए सेट किया जाने वाला SMACK लेबल है


setrichacl : रिच एक्सेस कंट्रोल लिस्ट बदलें।

richacl s एक ऐसी सुविधा है जो अधिक उन्नत ACL जोड़ देगा।

वर्तमान में एक कार्य प्रगति पर है, इसलिए मैं आपको उनके बारे में ज्यादा नहीं बता सकता। मैंने उनका उपयोग नहीं किया है।

यह प्रश्न भी देखें कि क्या पारंपरिक 'rwx' और POSIX ACL से परे अधिक उन्नत फाइल सिस्टम ACL हैं? और मैन पेज


5
+1 यदि आपने प्रत्येक cmd के उपयोग के उदाहरण जोड़े हैं, तो यह उत्तर अत्यंत उपयोगी होगा, एक विहित उत्तर के रूप में हम सड़क को संदर्भित कर सकते हैं!
स्लम

1
@ एसएलएम सुझाव के लिए धन्यवाद। मैंने प्रत्येक कमांड के लिए एक संक्षिप्त उपयोग विवरण जोड़ा।
थॉमस निमन

यहां दिखाए गए से अधिक क्षमताओं को लेने की इच्छा रखने वाले किसी भी व्यक्ति को चेतावनी। मैंने यहाँ उल्लिखित क्षमता का उपयोग किया है। हालांकि कांटा और निष्पादन पर उन्हें (उपयोगी) विरासत में देने की कोशिश असंभव लगती है। मुझे लगता है कि एक बग देखना है unix.stackexchange.com/questions/196483/…
ctrl-alt-delor-

पिछली कॉमेन्ट में जिस बग का मैंने उल्लेख किया था, वह एक डिज़ाइन बग था और कर्नेल 4.3 में परिवेशी क्षमताओं के साथ तय किया गया था, देखें man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor

1
मैं इस सब पर एक उदाहरण देखना पसंद करूंगा जो एक विहित उत्तर बन जाएगा!
प्रतिमाक

1

एक उच्च स्तर से:

  • सभी लिनक्स और सभी फाइलसिस्टम द्वारा समर्थित बेसिक फाइल सिस्टम अनुमतियाँ , जिन्हें -rwxrwxrwxसंभाला जाता है chmod, मालिक और ग्रुप आइडेंटिफ़ायर द्वारा हैंडल की गई फाइल chownऔर फोल्डर पर हर फाइल या फोल्डर से बंधा होता है chgrp; हर कोई मूल रूप से इस टुकड़े को जानता है।
  • विस्तारित फ़ाइल विशेषताएँ जो संक्षिप्त या xattr द्वारा जानी जाती हैं । वे फाइल सिस्टम विशेषताएं हैं जो उपयोगकर्ताओं को कंप्यूटर फाइल को मेटाडेटा के साथ संबद्ध करने में सक्षम बनाती हैं, जो कि फाइलसिस्टम द्वारा व्याख्या नहीं की जाती हैं, जबकि नियमित विशेषताओं का उद्देश्य फाइल सिस्टम द्वारा सख्ती से परिभाषित किया गया उद्देश्य है; विशेषताएँ नाम हैं: फ़ाइलें और निर्देशिकाओं के साथ स्थायी रूप से जुड़े मूल्य जोड़े, एक प्रक्रिया से जुड़े पर्यावरण के तार के समान। इस मेटाडेटा को विभिन्न फ़ाइलों / फ़ोल्डरों में बस सेट करने से संबंधित विशिष्ट लिनक्स कमांड हैं।
  • SELINUX को सुरक्षित लिनेक्स के रूप में जाना जाता है । आप उस पर इतिहास खोज सकते हैं। यह भी जानिए कि AppArmor जैसे SELINUX के विकल्प हैं, और संभवतः अन्य हैं। इस बिंदु पर, ये कर्नेल मॉड्यूल हैं जो Xattr का उपयोग करके MAC (अनिवार्य अभिगम नियंत्रण) करने के लिए कार्यक्षमता और तंत्र प्रदान करते हैं ; selinux xattrs में फ़ाइल सुरक्षा लेबल संग्रहीत करता है । और विशिष्ट सेलिनक्स संबंधित कमांड हैं।

अन्य मुख्य बिंदु:

  • जो उपलब्ध है और जो कार्य करता है उसके लिए xattr और selinux के बारे में gnu / linux का युग और संस्करण मायने रखता है।
  • यह बताया गया है कि सभी फ़ाइल सिस्टम xattr का समर्थन नहीं करते हैं; 1960 के दशक से उपयोग किए जा रहे linux के वितरण और संस्करण के आधार पर व्यक्तिगत अनुसंधान के लिए सबसे अच्छा बचा है (1960 से 1960 के दशक में rhel / suse / debian, irix, Solaris, aix, unix)
  • यह वास्तव में केवल अंतर्निहित मूल फ़ाइल / फ़ोल्डर अनुमतियाँ है जिसमें यूआईडी / जीआईडी ​​का प्लस एक्सट्रा है जो सब कुछ संभव बनाता है; SELinux फ़ाइल / फ़ोल्डर सुरक्षा लेबल को स्टोर करने के लिए xattr का उपयोग करता है ... सेलिनक्स के साथ सभी निम्न स्तर की लेगवर्क कुछ हद तक / xattr के लिए परिभाषित है जिसका आप उपयोग करते हैं। इसलिए यदि आपका प्राचीन फ़ाइल सिस्टम xattr का समर्थन नहीं करता है, तो आप सेलिनक्स का उपयोग नहीं करेंगे।
  • आप selinux (या apparmor या किसी अन्य कर्नेल मॉड्यूल को सक्षम या अक्षम कर सकते हैं)
  • लिनक्स के आपके संस्करण के आधार पर, किसी दिए गए फ़ाइल सिस्टम के लिए xattr को सक्षम या अक्षम करने में सक्षम हो सकता है; मुझे SLES 11 में याद है कि fstab आरोह विकल्प user_xattrऔर मैं स्थापित समय पर रूट फाइल सिस्टम पर उपलब्ध xattr नहीं चुन सकता था; मुझे लगता है कि अब RHEL / CentOS 7 के साथ है कि xattr डिफ़ॉल्ट रूप से है और आपके पास नहीं है।
  • lsयदि आप ऐसा करते हैं, तो आप देखते हैं -rwxrwxrwx+कि +एक विस्तारित फ़ाइल विशेषता उस वस्तु पर मौजूद है ।
  • एक्सेस कंट्रोल लिस्ट (ACL): किसी ऑब्जेक्ट से जुड़ी अनुमतियों की एक सूची है। एक एसीएल निर्दिष्ट करता है कि किन उपयोगकर्ताओं या सिस्टम प्रक्रियाओं को वस्तुओं तक पहुंच प्रदान की जाती है, साथ ही दिए गए ऑब्जेक्ट पर क्या संचालन की अनुमति है।
  • सेंटो विकी सेलिनक्स से: सेलिनक्स एक मैक सुरक्षा तंत्र है जिसे कर्नेल में लागू किया जाता है; बिना SELinux ने केवल पारंपरिक विवेकाधीन अभिगम नियंत्रण (DAC) विधियों को सक्षम किया जैसे कि फ़ाइल अनुमतियाँ या अभिगम नियंत्रण सूचियाँ (ACLs) का उपयोग उपयोगकर्ताओं की फ़ाइल पहुँच को नियंत्रित करने के लिए किया जाता है; उपयोगकर्ताओं और कार्यक्रमों को समान रूप से असुरक्षित फ़ाइल अनुमति दूसरों को देने की अनुमति है या, इसके विपरीत, सिस्टम के कुछ हिस्सों तक पहुंच प्राप्त करने के लिए जो अन्यथा सामान्य ऑपरेशन के लिए आवश्यक नहीं होना चाहिए; पारंपरिक DAC मॉडल के तहत अनिवार्य रूप से, दो विशेषाधिकार स्तर, रूट और उपयोगकर्ता हैं, और कम से कम विशेषाधिकार वाले मॉडल को लागू करने का कोई आसान तरीका नहीं है। कई प्रक्रियाएं जो रूट द्वारा लॉन्च की जाती हैं, बाद में एक प्रतिबंधित उपयोगकर्ता के रूप में चलाने के उनके अधिकारों को छोड़ देती हैं
  • एक्सट्रा और एसीएल के उपयोग को परिप्रेक्ष्य में रखने के लिए पढ़ने के लायक है, क्योंकि लिनक्स [कर्नेल] एक फाइल (ब्लॉक डिवाइस या नेटवर्क पोर्ट) के रूप में सब कुछ मानता है आप एक्सट्रा के साथ लगभग कुछ भी टैग कर सकते हैं और सेलिनक्स के माध्यम से किसी प्रकार की पहुंच को लागू कर सकते हैं, यह न सिर्फ फाइलें / फोल्डर। https://wiki.centos.org/HowTos/SELinux
  • xattr सिस्टम और फ़ाइल सिस्टम और NFS के बीच बढ़ते डेटा के साथ समस्या पैदा कर सकता है, जहाँ एक [नए] सिस्टम में xattr बनाम पुराने सिस्टम का पूर्ण समर्थन है, जो इन सभी विस्तारित विशेषताओं को पहचान नहीं सकता है [अगर बिल्कुल भी]। tarXattr के साथ सामान का उपयोग करने के लिए सावधान रहें , अगर यह उस प्रणाली पर रहता है तो कोई समस्या नहीं है, लेकिन अगर यह कहीं और समस्याग्रस्त हो सकता है अगर xattr महत्वपूर्ण हैं (यानी samba और win10 ntfs और linux ext3 / 4, btrfs, xfs के बीच प्रतिलिपि बनाना; या वापस) और नेटवर्क संलग्न भंडारण उपकरणों के बीच आगे)
  • अगर वहाँ कोई सेलिनक्स या अन्य मैकेनिसम नहीं है जो एस में परिभाषित किया गया है xattr, तो xattrएस सैद्धांतिक रूप से कुछ भी नहीं मतलब है और गिरा या छीन लिया जा सकता है क्योंकि उस बिंदु पर यह सिर्फ अतिरिक्त सामान है।
  • rel / centos 7 में अब सेलेनक्स को निष्क्रिय करने में सावधानी बरतें क्योंकि अगर xattr के माध्यम से फाइल सिस्टम लैबल खो जाता है तो सेलिनक्स को वापस लागू करने या अनुमति देने के दौरान इसे बदलने में समस्या होगी ; फिर से यह आपके Linux के संस्करण पर निर्भर करता है और यह selinux के माध्यम से xattr का उपयोग कैसे कर रहा है।

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

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

आप आगे इस सांबा शेयर के साथ लिनक्स सिस्टम पर, इस सांबा शेयर के तहत फाइलों / फ़ोल्डरों पर प्रतिबंध लागू करने के लिए (जो भी विस्तारित विशेषता का उपयोग करते हैं) का उपयोग करें। क्योंकि इन फ़ाइलों / फ़ोल्डरों को साझा किया जाता है, एक उपयोगकर्ता वैध रूप से अपने win10 पीसी पर कुछ कॉपी करता है और फिर विस्तारित विशेषता को खो देता है। अब उसके बाद आगे और पीछे की नकल पर, उस linux सिस्टम पर selinux उक्त फाइलों तक पहुंच को सीमित कर देगा क्योंकि आवश्यक xattr अब मौजूद नहीं है, और उपयोगकर्ता / व्यवस्थापक धमाके करते हैं, यह सोचकर सिर चकरा जाता है कि अभी-अभी काम क्यों नहीं किया गया ... selinux सेट करें xattrऑडिट लॉग्स में खोए हुए दिखाने की समस्या को अनुमति देने और पहचानने के लिए, लेकिन यह सीधे संकेत नहीं देगा कि यह xattr से आगे और पीछे की कॉपी का परिणाम है। डेटा बैकअप और पुनर्स्थापना, और याद रखने के लिए आवश्यक कार्य पर भी विचार करेंxattrयदि आप सुरक्षा को सही xattrs के आधार पर लागू करना चाहते हैं, तो uid / gid के अलावा ।

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