मैं कुछ उदाहरणों के साथ कदम से कदम समझाने की कोशिश करूँगा।
लघु पृष्ठभूमि
प्रत्येक प्रक्रिया का अपना 'प्रक्रिया साख' जो जैसी विशेषताओं में शामिल है PID, PPID, PGID, session IDऔर भी वास्तविक और प्रभावी उपयोगकर्ता और समूह के आईडी:
RUID, EUID, RGID, EGID।
हम उन पर ध्यान केंद्रित करेंगे।
भाग 1: यूआईडी और जीआईडी को समझें
अब मैं अपने क्रेडेंशियल्स और रन के साथ एक शेल में लॉग इन करूँगा:
$ grep $LOGNAME /etc/passwd
rotem:x:1000:1000:rotem,,,:/home/rotem:/bin/bash
आप मेरा लॉग इन (रोटेम), यूआईडी और जीआईडी देख सकते हैं जो दोनों 1000 हैं, और अन्य विवरण जैसे शेल मैं लॉग इन हूं।
भाग 2: RUID और RGID को समझें
हर प्रक्रिया का एक मालिक होता है और एक समूह से संबंधित होता है ।
हमारे शेल में, अब चलने वाली प्रत्येक प्रक्रिया मेरे उपयोगकर्ता खाते के विशेषाधिकारों का उत्तराधिकार देगी और उसी यूआईडी और जीआईडी के साथ चलेगी।
इसे चेक करने के लिए एक सरल कमांड चलाते हैं:
$ sleep 10 & ps aux | grep 'sleep'
और UID और GID प्रक्रिया की जाँच करें:
$ stat -c "%u %g" /proc/$pid/
1000 1000
उन हैं रियल यूजर आईडी ( RUID) और वास्तविक समूह आईडी ( RGIDकी) प्रक्रिया ।
(*) यूआईडी और जीआईडी को देखने के लिए अन्य विकल्पों की जाँच करें और इसे एक-लाइनर में प्राप्त करने के तरीके ।
अभी के लिए, तथ्य यह है कि स्वीकार EUIDऔर EGIDविशेषताओं के निरर्थक 'कर रहे हैं और अभी के बराबर है RUIDऔर RGIDपर्दे के पीछे।
भाग 3: ईयूआईडी और ईजीआईडी को समझें
pingएक उदाहरण के रूप में कमांड लेते हैं ।
whichफिर कमांड के साथ बाइनरी लोकेशन की खोज करें ls -la:
-rwsr-xr-x 1 root root 64424 Mar 10 2017 ping
आप देख सकते हैं कि फ़ाइल का स्वामी और समूह हैं root। ऐसा इसलिए है क्योंकि pingकमांड को एक सॉकेट खोलने की आवश्यकता है और लिनक्स कर्नेल उसके rootलिए विशेषाधिकार की मांग करता है।
लेकिन pingअगर मैं rootविशेषाधिकार नहीं रखता तो मैं कैसे उपयोग कर सकता हूं ?
सूचना 'एस' फ़ाइल अनुमति के मालिक भाग में 'एक्स' के बजाय पत्र।
यह विशिष्ट द्विआधारी निष्पादन योग्य फ़ाइलों (जैसे pingऔर sudo) के लिए एक विशेष अनुमति बिट है जिसे सेट्यूड के रूप में जाना जाता है ।
यह जहां है EUIDऔर EGIDखेलने में आता है।
क्या होगा जब कोई सेट्यूड बाइनरी pingनिष्पादित करता है, तो प्रक्रिया इस प्रभावी बाइनरी निष्पादन योग्य फ़ाइल के मालिक के EUIDलिए डिफ़ॉल्ट से अपनी प्रभावी उपयोगकर्ता आईडी ( ) बदलती है RUIDजो इस मामले में है -root ।
यह सब साधारण तथ्य से किया जाता है कि इस फ़ाइल में setuidबिट है।
कर्नेल यह निर्णय लेता है कि क्या इस प्रक्रिया को देखने का विशेषाधिकार है EUID। क्योंकि अब EUIDबिंदु root, ऑपरेशन कर्नेल द्वारा अस्वीकार नहीं किया जाएगा।
सूचना : नवीनतम लिनक्स रिलीज पर pingकमांड का आउटपुट इस तथ्य के कारण अलग दिखाई देगा कि उन्होंने इस सेट्यूड दृष्टिकोण के बजाय लिनक्स क्षमताओं को अपनाया है - उन लोगों के लिए जो परिचित नहीं हैं - यहां पढ़ें ।
भाग 4: SUID और SGID के बारे में क्या?
सहेजे गए उपयोगकर्ता आईडी ( SUID) का उपयोग तब किया जा रहा है जब एक विशेषाधिकार प्राप्त प्रक्रिया चल रही है ( rootउदाहरण के लिए) और इसे कुछ अनपेक्षित कार्यों को करने की आवश्यकता है।
उस स्थिति में, EUIDपहले से प्रभावी यूआईडी ( ) को अंदर सहेजा जाएगा SUIDऔर फिर एक अनपेक्षित कार्य में बदल दिया जाएगा। जब अनपेक्षित कार्य पूरा EUIDहो जाता है, तो वसीयत को मान SUIDसे हटाकर विशेषाधिकार प्राप्त खाते में वापस ले लिया जाता है ।