Translated ['src/linux-hardening/privilege-escalation/euid-ruid-suid.md'

This commit is contained in:
Translator 2025-02-12 14:29:37 +00:00
parent 3dbf3a8572
commit 275f0f9916

View File

@ -6,7 +6,7 @@
### User Identification Variables ### User Identification Variables
- **`ruid`**: **वास्तविक उपयोगकर्ता आईडी** उस उपयोगकर्ता को दर्शाता है जिसने प्रक्रिया शुरू की। - **`ruid`**: **वास्तविक उपयोगकर्ता आईडी** उस उपयोगकर्ता को दर्शाता है जिसने प्रक्रिया शुरू की।
- **`euid`**: **प्रभावी उपयोगकर्ता आईडी** के रूप में जाना जाता है, यह उस उपयोगकर्ता पहचान का प्रतिनिधित्व करता है जिसका उपयोग प्रणाली प्रक्रिया के विशेषाधिकारों का निर्धारण करने के लिए करती है। सामान्यतः, `euid` `ruid` के समान होता है, सिवाय उन मामलों के जैसे कि SetUID बाइनरी निष्पादन, जहां `euid` फ़ाइल के मालिक की पहचान ग्रहण करता है, इस प्रकार विशिष्ट संचालन अनुमतियाँ प्रदान करता है। - **`euid`**: **प्रभावी उपयोगकर्ता आईडी** के रूप में जाना जाता है, यह उस उपयोगकर्ता पहचान का प्रतिनिधित्व करता है जिसका उपयोग प्रणाली प्रक्रिया के विशेषाधिकारों का निर्धारण करने के लिए करती है। सामान्यतः, `euid` `ruid` के समान होता है, सिवाय उन मामलों के जैसे कि SetUID बाइनरी निष्पादन, जहां `euid` फ़ाइल के मालिक की पहचान ग्रहण करता है, इस प्रकार विशिष्ट संचालन अनुमतियों को प्रदान करता है।
- **`suid`**: यह **सहेजी गई उपयोगकर्ता आईडी** महत्वपूर्ण है जब एक उच्च-विशेषाधिकार प्रक्रिया (आमतौर पर रूट के रूप में चल रही) को कुछ कार्य करने के लिए अस्थायी रूप से अपने विशेषाधिकारों को छोड़ने की आवश्यकता होती है, केवल बाद में अपनी प्रारंभिक ऊंची स्थिति को पुनः प्राप्त करने के लिए। - **`suid`**: यह **सहेजी गई उपयोगकर्ता आईडी** महत्वपूर्ण है जब एक उच्च-विशेषाधिकार प्रक्रिया (आमतौर पर रूट के रूप में चल रही) को कुछ कार्य करने के लिए अस्थायी रूप से अपने विशेषाधिकारों को छोड़ने की आवश्यकता होती है, केवल बाद में अपनी प्रारंभिक ऊंची स्थिति को पुनः प्राप्त करने के लिए।
#### Important Note #### Important Note
@ -18,7 +18,7 @@
- **`setuid`**: प्रारंभिक धारणाओं के विपरीत, `setuid` मुख्य रूप से `euid` को संशोधित करता है न कि `ruid`। विशेष रूप से, विशेषाधिकार प्राप्त प्रक्रियाओं के लिए, यह `ruid`, `euid`, और `suid` को निर्दिष्ट उपयोगकर्ता, अक्सर रूट, के साथ संरेखित करता है, प्रभावी रूप से इन आईडी को `suid` द्वारा ओवरराइड करके मजबूत करता है। विस्तृत जानकारी [setuid मैन पेज](https://man7.org/linux/man-pages/man2/setuid.2.html) पर मिल सकती है। - **`setuid`**: प्रारंभिक धारणाओं के विपरीत, `setuid` मुख्य रूप से `euid` को संशोधित करता है न कि `ruid`। विशेष रूप से, विशेषाधिकार प्राप्त प्रक्रियाओं के लिए, यह `ruid`, `euid`, और `suid` को निर्दिष्ट उपयोगकर्ता, अक्सर रूट, के साथ संरेखित करता है, प्रभावी रूप से इन आईडी को `suid` द्वारा ओवरराइड करके मजबूत करता है। विस्तृत जानकारी [setuid मैन पेज](https://man7.org/linux/man-pages/man2/setuid.2.html) पर मिल सकती है।
- **`setreuid`** और **`setresuid`**: ये कार्य `ruid`, `euid`, और `suid` के सूक्ष्म समायोजन की अनुमति देते हैं। हालाँकि, उनकी क्षमताएँ प्रक्रिया के विशेषाधिकार स्तर पर निर्भर करती हैं। गैर-रूट प्रक्रियाओं के लिए, संशोधन वर्तमान `ruid`, `euid`, और `suid` के मानों तक सीमित हैं। इसके विपरीत, रूट प्रक्रियाएँ या वे जिनके पास `CAP_SETUID` क्षमता है, इन आईडी को मनमाने मान सौंप सकती हैं। अधिक जानकारी [setresuid मैन पेज](https://man7.org/linux/man-pages/man2/setresuid.2.html) और [setreuid मैन पेज](https://man7.org/linux/man-pages/man2/setreuid.2.html) से प्राप्त की जा सकती है। - **`setreuid`** और **`setresuid`**: ये कार्य `ruid`, `euid`, और `suid` के सूक्ष्म समायोजन की अनुमति देते हैं। हालाँकि, उनकी क्षमताएँ प्रक्रिया के विशेषाधिकार स्तर पर निर्भर करती हैं। गैर-रूट प्रक्रियाओं के लिए, संशोधन वर्तमान `ruid`, `euid`, और `suid` के मानों तक सीमित हैं। इसके विपरीत, रूट प्रक्रियाएँ या वे जिनके पास `CAP_SETUID` क्षमता है, इन आईडी को मनमाने मान सौंप सकती हैं। अधिक जानकारी [setresuid मैन पेज](https://man7.org/linux/man-pages/man2/setresuid.2.html) और [setreuid मैन पेज](https://man7.org/linux/man-pages/man2/setreuid.2.html) से प्राप्त की जा सकती है।
ये कार्यक्षमताएँ सुरक्षा तंत्र के रूप में नहीं बल्कि इच्छित संचालन प्रवाह को सुविधाजनक बनाने के लिए डिज़ाइन की गई हैं, जैसे कि जब एक प्रोग्राम दूसरे उपयोगकर्ता की पहचान को अपने प्रभावी उपयोगकर्ता आईडी को बदलकर अपनाता है। ये कार्यक्षमताएँ सुरक्षा तंत्र के रूप में नहीं बल्कि अपेक्षित संचालन प्रवाह को सुविधाजनक बनाने के लिए डिज़ाइन की गई हैं, जैसे कि जब एक प्रोग्राम दूसरे उपयोगकर्ता की पहचान को अपने प्रभावी उपयोगकर्ता आईडी को बदलकर अपनाता है।
विशेष रूप से, जबकि `setuid` रूट के लिए विशेषाधिकार वृद्धि के लिए एक सामान्य विकल्प हो सकता है (क्योंकि यह सभी आईडी को रूट के साथ संरेखित करता है), इन कार्यों के बीच भेद करना विभिन्न परिदृश्यों में उपयोगकर्ता आईडी व्यवहार को समझने और हेरफेर करने के लिए महत्वपूर्ण है। विशेष रूप से, जबकि `setuid` रूट के लिए विशेषाधिकार वृद्धि के लिए एक सामान्य विकल्प हो सकता है (क्योंकि यह सभी आईडी को रूट के साथ संरेखित करता है), इन कार्यों के बीच भेद करना विभिन्न परिदृश्यों में उपयोगकर्ता आईडी व्यवहार को समझने और हेरफेर करने के लिए महत्वपूर्ण है।
@ -26,7 +26,7 @@
#### **`execve` System Call** #### **`execve` System Call**
- **Functionality**: `execve` एक प्रोग्राम शुरू करता है, जो पहले तर्क द्वारा निर्धारित होता है। यह दो ऐरे तर्क लेता है, `argv` तर्कों के लिए और `envp` पर्यावरण के लिए। - **Functionality**: `execve` एक प्रोग्राम शुरू करता है, जो पहले तर्क द्वारा निर्धारित होता है। यह दो ऐरे तर्क लेता है, `argv` तर्कों के लिए और `envp` वातावरण के लिए।
- **Behavior**: यह कॉलर की मेमोरी स्पेस को बनाए रखता है लेकिन स्टैक, हीप, और डेटा सेगमेंट को ताज़ा करता है। प्रोग्राम का कोड नए प्रोग्राम द्वारा प्रतिस्थापित किया जाता है। - **Behavior**: यह कॉलर की मेमोरी स्पेस को बनाए रखता है लेकिन स्टैक, हीप, और डेटा सेगमेंट को ताज़ा करता है। प्रोग्राम का कोड नए प्रोग्राम द्वारा प्रतिस्थापित किया जाता है।
- **User ID Preservation**: - **User ID Preservation**:
- `ruid`, `euid`, और अतिरिक्त समूह आईडी अपरिवर्तित रहते हैं। - `ruid`, `euid`, और अतिरिक्त समूह आईडी अपरिवर्तित रहते हैं।
@ -36,9 +36,9 @@
#### **`system` Function** #### **`system` Function**
- **Functionality**: `execve` के विपरीत, `system` `fork` का उपयोग करके एक बाल प्रक्रिया बनाता है और उस बाल प्रक्रिया के भीतर एक कमांड को `execl` का उपयोग करके निष्पादित करता है। - **Functionality**: `execve` के विपरीत, `system` एक बच्चे की प्रक्रिया बनाता है जिसका उपयोग `fork` करता है और उस बच्चे की प्रक्रिया के भीतर एक कमांड निष्पादित रता है जिसका उपय `execl` करता है।
- **Command Execution**: कमांड को `sh` के माध्यम से निष्पादित करता है `execl("/bin/sh", "sh", "-c", command, (char *) NULL);` का उपयोग करके। - **Command Execution**: कमांड को `sh` के माध्यम से निष्पादित करता है `execl("/bin/sh", "sh", "-c", command, (char *) NULL);` का उपयोग करके।
- **Behavior**: चूंकि `execl` `execve` का एक रूप है, यह समान रूप से कार्य करता है लेकिन एक नए बाल प्रक्रिया के संदर्भ में। - **Behavior**: चूंकि `execl` `execve` का एक रूप है, यह समान रूप से कार्य करता है लेकिन एक नए बच्चे की प्रक्रिया के संदर्भ में।
- **Documentation**: आगे की जानकारी [`system` मैन पेज](https://man7.org/linux/man-pages/man3/system.3.html) से प्राप्त की जा सकती है। - **Documentation**: आगे की जानकारी [`system` मैन पेज](https://man7.org/linux/man-pages/man3/system.3.html) से प्राप्त की जा सकती है।
#### **Behavior of `bash` and `sh` with SUID** #### **Behavior of `bash` and `sh` with SUID**
@ -50,10 +50,10 @@
- अधिक विवरण [`bash` मैन पेज](https://linux.die.net/man/1/bash) पर मिल सकते हैं। - अधिक विवरण [`bash` मैन पेज](https://linux.die.net/man/1/bash) पर मिल सकते हैं।
- **`sh`**: - **`sh`**:
- `bash` में `-p` के समान कोई तंत्र नहीं है। - `bash` में `-p` के समान कोई तंत्र नहीं है।
- उपयोगकर्ता आईडी के संबंध में व्यवहार स्पष्ट रूप से उल्लेखित नहीं है, सिवाय `-i` विकल्प के तहत, जो `euid` और `ruid` की समानता को बनाए रखने पर जोर देता है। - उपयोगकर्ता आईडी के संबंध में व्यवहार स्पष्ट रूप से उल्लेखित नहीं है, सिवाय `-i` विकल्प के, जो `euid` और `ruid` की समानता को बनाए रखने पर जोर देता है।
- अतिरिक्त जानकारी [`sh` मैन पेज](https://man7.org/linux/man-pages/man1/sh.1p.html) पर उपलब्ध है। - अतिरिक्त जानकारी [`sh` मैन पेज](https://man7.org/linux/man-pages/man1/sh.1p.html) पर उपलब्ध है।
ये तंत्र, अपने संचालन में भिन्न, प्रोग्रामों को निष्पादित करने और उनके बीच संक्रमण करने के लिए एक बहुपरकारी विकल्प प्रदान करते हैं, जिसमें उपयोगकर्ता आईडी के प्रबंधन और संरक्षण में विशिष्ट सूक्ष्मताएँ होती हैं। ये तंत्र, अपने संचालन में भिन्न, प्रोग्रामों को निष्पादित करने और उनके बीच संक्रमण के लिए विकल्पों की एक बहुपरकारी श्रृंखला प्रदान करते हैं, जिसमें उपयोगकर्ता आईडी के प्रबंधन और संरक्षण में विशिष्ट सूक्ष्मताएँ होती हैं।
### Testing User ID Behaviors in Executions ### Testing User ID Behaviors in Executions
@ -118,7 +118,7 @@ uid=1000(frank) gid=99(nobody) groups=99(nobody) context=system_u:system_r:uncon
**विश्लेषण:** **विश्लेषण:**
- `setreuid` दोनों ruid और euid को 1000 पर सेट करता है। - `setreuid` दोनों ruid और euid को 1000 पर सेट करता है।
- `system` bash को सक्रिय करता है, जो उनकी समानता के कारण उपयोगकर्ता आईडी को बनाए रखता है, प्रभावी रूप से फ्रैंक के रूप में कार्य करता है। - `system` bash को सक्रिय करता है, जो उनकी समानता के कारण उपयोगकर्ता आईडी को बनाए रखता है, प्रभावी रूप से frank के रूप में कार्य करता है।
#### मामला 3: execve के साथ setuid का उपयोग करना #### मामला 3: execve के साथ setuid का उपयोग करना
@ -163,7 +163,7 @@ uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconf
``` ```
**विश्लेषण:** **विश्लेषण:**
- हालाकि `euid` को `setuid` द्वारा 1000 पर सेट किया गया है, `bash` `-p` की अनुपस्थिति के कारण euid को `ruid` (99) पर रीसेट कर देता है। - हालाकि `euid` को `setuid` द्वारा 1000 पर सेट किया गया है, `bash` `-p` की अनुपस्थिति के कारण `euid` को `ruid` (99) पर रीसेट कर देता है।
**C कोड उदाहरण 3 (bash -p का उपयोग करते हुए):** **C कोड उदाहरण 3 (bash -p का उपयोग करते हुए):**
```bash ```bash