क्यों "chmod 1777" और "chmod 3777" दोनों चिपचिपा सा सेट करते हैं?


15

एक निर्देशिका पर चिपचिपा बिट सेट करने के लिए, कमांड chmod 1777और chmod 3777दोनों क्यों काम करते हैं?


2
आप एक संभावित जोखिम भरे ऑपरेशन का प्रस्ताव दे रहे हैं। सभी के लिए चिपचिपा सा और आरएक्सएक्स संयोजन संयोजन खराब अभ्यास है। कोई भी फ़ाइल को बदल सकता है और निष्पादित कर सकता है और एस-बिट बिना उपयोगकर्ता के रूट उपयोगकर्ता को स्विच करने की अनुमति देता है।
jippie

1
अगर फ़ाइल को संशोधित किया जाता है, तो @jippie setuid और setgid बिट चले जाते हैं, इसलिए आपको रूट एक्सेस नहीं मिल सकता है।
काइल जोन्स

@ केलीजोन, यह अभी भी खतरनाक है। यदि passwdबाइनरी विश्व-योग्य हैं, तो आप इसे संशोधित करके रूट एक्सेस प्राप्त करने में सक्षम नहीं होंगे, जैसा कि आप कहते हैं, लेकिन आप इसे कुछ अन्य बाइनरी के साथ बदल सकते हैं जो हर कोई उसके बाद चलेगा, यह सोचकर passwd
वाइल्डकार्ड

@Wildcard सहमत हुए।
काइल जोन्स

जवाबों:


29

उस समूहीकरण में प्रत्येक संख्या (इसे अष्टक के रूप में भी जाना जाता है क्योंकि यह आधार 8 है) 3 बिट्स का प्रतिनिधित्व करता है। यदि आप इसे बाइनरी में बदलते हैं तो यह बहुत आसान हो जाता है।

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1 है

इसलिए यदि आपने 1777, 3777, 5777, या 7777 किया, तो आप चिपचिपा बिट सेट करेंगे क्योंकि तीसरा कॉलम 1 होगा। हालांकि, 3777, 5777 और 7777 के साथ आप अन्य बिट्स (पहले कॉलम के लिए SUID) सेट कर रहे हैं, और दूसरे कॉलम के लिए SGID)।

इसके विपरीत, उस स्थान में कोई भी अन्य संख्या (अधिकतम 7 तक) चिपचिपा सा सेट नहीं होगा क्योंकि अंतिम कॉलम 1 या "चालू नहीं होगा।"

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0 है


3
एक अच्छा विवरण के लिए +1 कि ऑक्टल नंबर कैसे काम करते हैं और यह फ़ाइल अनुमति बिट पर कैसे लागू होता है।
एक CVn

1
इसे "बिटमास्क" कहा जाता है, और +1 यह समझाने और दिखाने के लिए भी है कि यह कैसे सेट और clearस्वामी समूह और अन्य कॉलम कर सकता है।
क्रिस के

16

Chmod के तर्क के रूप में पारित अनुमतियाँ एक अष्टाधारी मूल्य के रूप में निर्दिष्ट की जाती हैं । मूल्य में प्रत्येक अंक तीन बिट्स का प्रतिनिधित्व करता है। यदि तीन अंक दिए गए हैं, तो आप फ़ाइल के मालिक, समूह और अन्य (बाकी सभी) के लिए बिट्स पढ़, लिख और निष्पादित कर रहे हैं। यदि चार अंक दिए जाते हैं, तो सबसे बाईं संख्या सेट्युड, सेटगिड और चिपचिपा बिट्स सेट करती है। ऑक्टल 1 चिपचिपा सा सेट करता है। ऑक्टल 2 सेटगिट बिट सेट करता है। ऑक्टल 2 + ऑक्टल 1 ऑक्टल 3 है जो सेटगिड बिट और स्टिकी बिट दोनों को सेट करता है।


1
क्या यह अष्टक 2 नहीं है | ऑक्टल 1 की बजाय ऑक्टल 2 + ऑक्टल 1? इस मामले में समान परिणाम होने के लिए ऑपरेशन होते हैं, लेकिन सामान्य तौर पर यह एक बिटवाइज़ है या यह मायने रखता है, है न?
जेरिट

1
@gerrit हाँ, सामान्य मामले में आपको binary orऑपरेटर को देखना चाहिए । हालाँकि, जैसा कि आप बताते हैं, इस मामले में यह समान परिणाम के लिए काम करता है, और बहुत अधिक लोग इसके अलावा परिचित हैं।
एक CVn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.