'chmod g + s' कमांड


44

हैलो, मैं chmod g+sयूनिक्स में कमांड की भूमिका को समझना चाहता हूं ।

मैं यह भी जानना चाहूंगा कि इस विशेष संदर्भ में यह क्या करता है:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

मैं सिवाय सभी कमांड रोल्स को समझता हूं chmod g+sऔर मैं फाइलों के बीच के अंतर को जानना चाहता हूं unऔर deuxइस आदेश की श्रृंखला के परिणामस्वरूप।

जवाबों:


60
chmod g+s .;

यह आदेश वर्तमान निर्देशिका पर समूह आईडी (सेटगिड) सेट करता है, जिसे लिखा जाता है .

इसका मतलब यह है कि वर्तमान निर्देशिका के भीतर बनाई गई सभी नई फ़ाइलों और उपनिर्देशिकाओं ने फ़ाइल बनाने वाले उपयोगकर्ता के प्राथमिक समूह आईडी के बजाय, निर्देशिका के समूह आईडी को विरासत में लिया है। यह वर्तमान निर्देशिका में निर्मित नई उपनिर्देशिकाओं पर भी पारित किया जाएगा।

g+s फ़ाइल के समूह आईडी को प्रभावित करता है लेकिन मालिक आईडी को प्रभावित नहीं करता है।

ध्यान दें कि यह केवल नव-निर्मित फ़ाइलों पर लागू होता है । फ़ाइलें है कि कर रहे हैं ले जाया गया ( mv) निर्देशिका में setgid सेटिंग से अप्रभावित रहे हैं। जिन फ़ाइलों की प्रतिलिपि बनाई गई है cp -pवे भी अप्रभावित हैं।

उदाहरण

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

इस मामले में, deuxसमूह से संबंधित होगा , canardलेकिन unउपयोगकर्ता के समूह से संबंधित होगा जो इसे बना रहा है, जो कुछ भी है।

शेल कमांड्स में अर्धविराम के उपयोग पर मामूली ध्यान दें

इसके विपरीत cया perl, एक शेल कमांड को केवल अर्धविराम द्वारा पालन करने की आवश्यकता होती है यदि उसी कमांड लाइन पर एक और शेल कमांड है । इस प्रकार, निम्नलिखित कमांड लाइन पर विचार करें:

chgrp canard .; chmod g+s .;

अंतिम अर्धविराम अतिरेकपूर्ण है और इसे हटाया जा सकता है:

chgrp canard .; chmod g+s .

इसके अलावा, यदि हम दो आदेशों को अलग-अलग पंक्तियों में रखते हैं, तो शेष अर्धविराम अनावश्यक है:

chgrp canard .
chmod g+s .

1
कॉपी की गई फ़ाइलें (जैसे cp) वास्तव में नई बनाई गई हैं। यदि वे समूह की अनुमति प्राप्त नहीं करते हैं, तो कॉपी करने वाला प्रोग्राम गेम खेल रहा है, जैसे एक अस्थायी फ़ाइल की प्रतिलिपि बनाना और फिर उसे लक्ष्य निर्देशिका में ले जाना।
कज़

1
@ काज़ गुड पॉइंट। मैंने उत्तर को स्पष्ट करने के लिए अपडेट किया कि यह वह है cp -pजो सेटगिड सेटिंग को ओवरराइड करता है।
जॉन 1024

लेकिन क्या cp -pसेटगिड सेटिंग को ओवरराइड करता है ? अस्तित्व में हर एक यूनिक्स कार्यान्वयन पर? POSIX का कहना है कि यह अनिर्दिष्ट है कि निदान संदेश में cp -p परिणामों के तहत उपयोगकर्ता ID या समूह ID की प्रतिलिपि बनाने में विफलता है या नहीं! हालाँकि, क्रमशः S_SUID और S_SGID बिट्स को उस स्थिति में साफ़ किया जाना आवश्यक है (अर्थात यदि कोई फ़ाइल setuid बॉब है, लेकिन बॉब के स्वामित्व की प्रतिलिपि नहीं बनाई जा सकती है, ताकि फ़ाइल पर स्वामित्व हो, इसे setuid न करें janet।)
कज़

" cp -pसेटगाइड सेटिंग को ओवरराइड करता है ?" POSIX कल्पना के अनुसार, यह वही है जो करना चाहिए। यह सभी यूनिक्स सिस्टम पर ऐसा करता है जिसका मैंने उपयोग किया है। आपने उस समूह के आईडी को डुप्लिकेट नहीं किया जा सकता है , तो सुरक्षा के लिए क्या करना है, इसके बारे में कल्पना का हिस्सा उद्धृत किया है । मैं ऐसी "नहीं" स्थिति में कभी नहीं चला, क्या आपके पास है?
जॉन 1024

7

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

यूनिक्स / लिनक्स में उपयोगकर्ता और उपयोगकर्ता समूह हैं जिन्हें फ़ाइल एक्सेस के लिए सौंपा जा सकता है

विकल्प g + s निम्नानुसार हैं:

जी - फाइल के समूह के अन्य उपयोगकर्ताओं के लिए इसके लिए अनुमति

निष्पादन पर उपयोगकर्ता या समूह आईडी सेट करें

यहाँ एक नमूना उपयोग है:

chmod =rwx,g+s filename

(सभी को किसी विशेष फ़ाइल को पढ़ने, लिखने और निष्पादित करने और सेट समूह-आईडी चालू करने की अनुमति दें)

फ़ाइल की अनुमतियों को सेट / संशोधित करने के लिए आपको chmod प्रोग्राम का उपयोग करना होगा। बेशक, फ़ाइल के अनुमतियों को बदलने के लिए केवल फ़ाइल का स्वामी ही chmod का उपयोग कर सकता है। chmod में निम्न सिंटैक्स है: chmod [विकल्प] मोड फ़ाइल (s) 'मोड' भाग फ़ाइल (ओं) के लिए नई अनुमतियों को निर्दिष्ट करता है जो तर्कों के रूप में अनुसरण करते हैं। एक मोड निर्दिष्ट करता है कि किस उपयोगकर्ता की अनुमतियाँ बदली जानी चाहिए, और बाद में कौन से एक्सेस प्रकार बदले जाने चाहिए। चलो उदाहरण के लिए कहते हैं: chmod ax socktest.pl

इसका मतलब है कि सभी उपयोगकर्ताओं के लिए निष्पादित बिट को हटा दिया जाना चाहिए (-)। (मालिक, समूह और बाकी दुनिया) अनुमतियाँ एक पत्र के साथ शुरू होती हैं, जो यह निर्दिष्ट करता है कि उपयोगकर्ताओं को परिवर्तन से क्या प्रभावित होना चाहिए, यह निम्नलिखित में से कोई भी हो सकता है:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

इसके बाद एक परिवर्तन निर्देश दिया जाता है जिसमें + (सेट बिट) या - (स्पष्ट बिट) और उस बिट के संगत अक्षर होते हैं जिन्हें बदलना चाहिए। आइए देखते हैं कुछ उदाहरण:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

अजीब संख्या ... आप का सामना करना पड़ा हो सकता है जैसे कि chmod 755 somefile और निश्चित रूप से आप सोच रहे होंगे कि यह क्या है। बात यह है, कि आप इस उदाहरण में एक की तरह एक नंबर का उपयोग करके किसी फ़ाइल की संपूर्ण अनुमति पैटर्न को बदल सकते हैं। प्रत्येक मोड में एक समान कोड संख्या होती है, और जैसा कि हम देखेंगे कि यह पता लगाने का एक बहुत ही सरल तरीका है कि कौन सी संख्या किसी भी मोड से मेल खाती है। मोड संख्या पर तीन अंकों में से हर एक तीन अनुमति तीनों में से एक से मेल खाती है। (यू, जी और ओ) एक ट्रिपलेट में प्रत्येक अनुमति बिट एक मूल्य से मेल खाती है: आर के लिए ४, डब्ल्यू के लिए २, एक्स के लिए १। यदि अनुमति बिट आप इस मूल्य को अनुमति ट्रिपल की संख्या में जोड़ते हैं। यदि यह साफ हो जाता है, तो आप कुछ नहीं जोड़ते हैं। (आप में से कुछ देख सकते हैं कि वास्तव में,

यू के लिए ट्रिपल: rwx => 4 + 2 + 1 = 7

जी के लिए ट्रिपल: r-x => 4 + 0 + 1 = 5

ओ के लिए ट्रिपल: r-x => 4 + 0 + 1 = 5

जो बनाता है : 755

तो, 755 यह कहने का एक तरीका है कि 'मुझे कोई आपत्ति नहीं है यदि अन्य लोग इस फाइल को पढ़ते हैं या चलाते हैं, लेकिन केवल मुझे इसे संशोधित करने में सक्षम होना चाहिए' और 777 का अर्थ है 'सभी के पास इस फाइल की पूरी पहुंच है'

प्रसंग संदर्भ


0

एलएस कमांड का परिणाम ओम्स्क पर निर्भर करेगा।

g + s फाइल में sgid सेट करेगा। चेक यहाँ SUID sgid के बारे में अधिक जानकारी के लिए गहरी

इसलिए यदि उदाहरण के लिए आपका umask 022 है तो परिणाम कुछ इस प्रकार होगा:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un

0

लिनक्स में एक ext के लिए डिफ़ॉल्ट माउंट विकल्प में से एक? fs है 'nogrpid | sysvgroups '। तो पहला स्पर्श संयुक्त राष्ट्र, एक फ़ाइल बनाता है जिसमें समूह आईडी के साथ fsgid बनाने की प्रक्रिया के बराबर है जहाँ fsgid = egid।

chmod g + s।, पेरेंट फ़ोल्डर से बाद की फ़ाइल / डीआईआर क्रिएशन इनहेरिट ग्रुप आईडी बनाता है और यदि बनाई गई चीज़ एक डीआईआर है तो यह जी + सेट को उसके माता-पिता के रूप में प्राप्त करता है।

यहां टच ड्यूक्स, ग्रुप कैनार्ड के साथ ड्यूक्स बनाता है।

यदि माउंट विकल्प 'ग्रिड' था, तो शब्दार्थ बदल जाता है उस मामले में bsdgroups ', नई फ़ाइल / डीआईआर सृजन अपने माता-पिता के फ़ोल्डर से समूह आईडी को ले जाएगा, यहां तक ​​कि स्वयं माता-पिता के लिए जी + सेट किए बिना।

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