मैं कुछ उदाहरणों के साथ कदम से कदम समझाने की कोशिश करूँगा।
लघु पृष्ठभूमि
प्रत्येक प्रक्रिया का अपना 'प्रक्रिया साख' जो जैसी विशेषताओं में शामिल है 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
से हटाकर विशेषाधिकार प्राप्त खाते में वापस ले लिया जाता है ।