मालिक / जड़ और आरयूआईडी / ईयूआईडी के बीच अंतर


24

मैं प्रश्न में वर्णित अवधारणाओं के लिए अपेक्षाकृत नया हूं और विभिन्न स्रोतों से उनके बारे में पढ़ना केवल उन्हें अधिक भ्रमित करता है। तो यह वही है जो मुझे अब तक समझ में आया है:

जब हमें किसी फ़ाइल के लिए अनुमति दी जाती है, तो वे इस तरह दिखते हैं:

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

हम मानते हैं कि एक उपयोगकर्ता user2जो समूह में है, usersनिष्पादित करने का प्रयास करता है file.bin। यदि सेट्युड बिट सेट नहीं किया गया था, तो इसका मतलब यह होगा कि आरयूआईडी और ईयूआईडी दोनों file.binयूआईडी के बराबर थे user2। लेकिन चूंकि setuid बिट सेट किया गया है, इसका मतलब है कि RUID अब है की यूआईडी के बराबर user2, जबकि EUID फ़ाइल के मालिक का UID है user1

मेरे प्रश्न हैं:

  1. फ़ाइल के स्वामी और के बीच अंतर क्या है root? क्या rootस्वामी के समान अनुमतियाँ हैं? या हमें अनुमतियों की सूची में एक अलग प्रविष्टि की आवश्यकता होगी root?
  2. RUID और EUID में अंतर?
    • जैसा कि मैं समझता हूं कि यह आरयूआईडी और ईयूआईडी केवल प्रक्रियाओं पर लागू होता है। अगर ऐसा है, तो उनके पास यूजर आईडी का मूल्य क्यों है?
    • यदि RUID प्रक्रिया को बनाने वाला उपयोगकर्ता है, और EUID वह उपयोगकर्ता है जो वर्तमान में प्रक्रिया चला रहा है, तो इस प्रश्न में पहले उत्तर का पहला वाक्य मेरे लिए कोई अर्थ नहीं रखता है।
    • क्या मुझे सही से समझ में आया कि सेतु बिट क्या करता है?

जवाबों:


35

यहाँ उत्तर हैं:

  1. rootहमेशा फ़ाइलों और निर्देशिकाओं तक पूरी पहुंच होती है। फ़ाइल के मालिक के पास आमतौर पर उनके पास भी होता है, लेकिन यह हमेशा सच नहीं होता है। उदाहरण के लिए:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1है मालिक ; हालाँकि वे केवल पढ़ सकते हैं और निष्पादित कर सकते हैं , लेकिन rootअभी भी फ़ाइल तक पूर्ण पहुँच ( rwx ) है।

  2. आरयूआईडी रियल यूजर आईडी है और यह कभी नहीं (लगभग) बदलता है। यदि user2सिस्टम में लॉग होता है, तो शेल को उसके असली आईडी सेट के साथ लॉन्च किया जाता है user2। शेल से शुरू होने वाली सभी प्रक्रियाएं वास्तविक आईडी user2को उनकी वास्तविक आईडी के रूप में प्राप्त करेंगी ।

    ईयूआईडी प्रभावी उपयोगकर्ता आईडी है , यह प्रक्रियाओं (उपयोगकर्ता के लिए नहीं) के लिए बदलता है जो उपयोगकर्ता निष्पादित करता है जिसने सेट बिट को निर्धारित किया है ।

    यदि user2निष्पादित किया जाता है file.bin, तो आरयूआईडी होगा user2और शुरू की गई प्रक्रिया का ईयूआईडी होगा user1

के मामले का उपयोग करते हैं passwd:

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • जब user2चाहता है उसे अपना पासवर्ड बदलने , वे निष्पादित /usr/bin/passwd

  • आरयूआईडी होगा, user2लेकिन उस प्रक्रिया का ईयूआईडी होगा root

  • user2केवल अपने स्वयं के पासवर्ड passwdको बदलने के लिए उपयोग कर सकते हैं क्योंकि आंतरिक रूप से आरयूआईडी की जांच करता है और यदि ऐसा नहीं है , तो इसके कार्य वास्तविक उपयोगकर्ता के पासवर्ड तक सीमित होंगे।passwdroot

  • यह neccesary है कि EUID rootमामले में बन जाता है passwdक्योंकि इस प्रक्रिया को लिखने/etc/passwd और / या करने की आवश्यकता होती है /etc/shadow


धन्यवाद! अब प्रत्येक स्पष्ट अधिक स्पष्ट है। मेरे पास एक और सवाल है, हालांकि। EUID केवल तभी बदलता है जब कोई उपयोगकर्ता किसी ऐसी प्रक्रिया को निष्पादित करता है जिसमें सेट बिट बिट सेट होता है? या क्या यह दूसरी स्थिति में भी बदल सकता है? और यदि हां, तो वह स्थिति क्या है?
user1956190

1
मुझे लगता है कि प्रक्रियाओं को निष्पादित करने के अलावा कोई अन्य तरीका नहीं है जो setuidथोड़ा सेट है।
jcbermu

3
एक प्रक्रिया जो "सेट्यूड" प्रोग्राम से चल रही है (यानी, एक प्रक्रिया जिसमें प्रभावी यूआईडी U रियल यूआईडी है) ईयूआईडी को आरयूआईडी पर वापस सेट कर सकता है। कुछ मामलों में, यह अपने प्रारंभिक मूल्य (यानी, प्रोग्राम फ़ाइल के मालिक) और आरयूआईडी के बीच ईयूआईडी को आगे-पीछे कर सकता है। इसके अलावा, यह अपने RUID को इसके EUID के बराबर सेट करने में सक्षम हो सकता है। … (Cont'd)
स्कॉट 19

2
(जारी) ... विशेषाधिकृत प्रक्रियाओं (EUID = 0 के साथ उन लोगों, उर्फ root) मनमाने ढंग से मूल्यों के EUID और RUID सेट कर सकते हैं (उदाहरण के लिए, login, su, और sudoप्रोग्राम हैं जो करते हैं)। आम तौर पर, एक बार एक विशेषाधिकार प्राप्त प्रक्रिया अपने यूआईडी को गैर-शून्य मानों में बदल देती है, यह अब विशेषाधिकार नहीं है और rootफिर से नहीं बन सकता है । आदमी पृष्ठ देखें setuid (2) , seteuid (2) , और setreuid (2)
स्कॉट

1
(Cont'd) ... यह एक समस्या को हल करने के लिए एक हैक के रूप में पेश किया गया था, जिसे बाद में व्यापक रूप से हल किया गया है। यह शायद लिनक्स से हटा दिया गया है कि इस तथ्य के अलावा कि इस तरह के एक प्रूनिंग उन कार्यक्रमों को तोड़ देगा जो इसका उपयोग करते हैं। माइकल केररिस्क, के लेखक लिनक्स इंटरफ़ेस प्रोग्रामिंग , कहते हैं, के बारे में उनकी संस्करण में setfsuid (2) आदमी पेज , " setfsuid()आजकल अनावश्यक है और नए अनुप्रयोगों में बचा जाना चाहिए।"
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.