सुडोल कितना सार्वभौमिक है?


26

मैं कुछ इंस्टाल करने के बारे में कुछ निर्देश लिख रहा था (TeX-related - यदि आप नहीं पूछते हैं, तो मैं अधिक विवरण देकर आपका दिन बर्बाद नहीं करूँगा) और sudoसिस्टम-वाइड स्थापित करने के लिए उपयोग किया जाता है। किसी ने टिप्पणी की कि उन्हें नहीं लगता कि sudoसभी लिनक्स (या यूनिक्स) वितरण पर उपलब्ध था।

क्या यूनिक्स वितरण हैं जो नहीं हैं sudo, और यदि ऐसा है तो वे क्या हैं? वहाँ एक सार्वभौमिक स्वीकार किया "मुझे विशेषाधिकार SuperUser जाओ" कमांड कि है है सभी सिस्टम पर?

जवाबों:


34

sudo सार्वभौमिक नहीं माना जा सकता है:

  • Red Hat Enterprise Linux : sudoRed Hat Enterprise Linux और उसके डेरिवेटिव पर डिफ़ॉल्ट रूप से संस्थापित है, 1 लेकिन यह केवल RHEL 7 और नए में रेडी-टू-यूज़ को स्थापित करता है।

    Red Hat Enterprise Linux 7 ने संस्थापन स्क्रीन में एक नया विकल्प जोड़ा जहाँ आप पहला गैर-रूट उपयोक्ता बनाते हैं , एक चेकबॉक्स जिसे "इस व्यवस्थापक फाइल को" कहा जाता है। इसका उद्देश्य इंस्टॉलेशन गाइड के उस पेज पर प्रलेखित नहीं है, लेकिन इसका एक प्रभाव उस उपयोगकर्ता को किसी भी कमांड को चलाने की अनुमति देना है sudo। यह उस उपयोगकर्ता को wheelसमूह में जोड़कर ऐसा करता है , जो स्टॉक sudoपैकेज कॉन्फ़िगरेशन के तहत किसी भी कमांड को चला सकता है।

    Red Hat Enterprise Linux 3 6 के माध्यम से भी sudoडिफ़ॉल्ट रूप से, 2 द्वारा स्थापित किया गया है, लेकिन RHEL 7 तक, यह इस तरह से कॉन्फ़िगर किया गया है कि केवल rootइसके माध्यम से कमांड चला सकता है। इसे ठीक करने का सबसे आसान तरीका wheelसमूह में एक या अधिक उपयोगकर्ता जोड़ना है , फिर visudoरूट के रूप में चलाएं और %wheel ALL=(ALL)...लाइन को अनकम्प्लीट करें ।

  • डेबियन : डेबियन 9 के रूप में, एक न्यूनतम स्थापना शामिल है sudo

    डेबियन 7 और 8 में, आपको प्राप्त करने के लिए स्थापना के दौरान सेट " मानक सिस्टम उपयोगिताओं " पैकेज का चयन करना था sudo। यदि आप sudoइस तरह से इंस्टॉल करते हैं, तो ओएस इंस्टॉलर स्वचालित रूप से आपके द्वारा पहले बनाए गए गैर-प्रशासनिक उपयोगकर्ता को sudoसमूह में जोड़ देगा , जिसके पास सभी कमांड चलाने की अनुमति है।

    डेबियन 6 और पहले में, आपको इंस्टॉलेशन के sudoमाध्यम से इंस्टॉल करना था apt-getऔर गैर-रूट उपयोगकर्ताओं को इसे उपयोग करने की क्षमता प्रदान करने के लिए इसे हाथ से कॉन्फ़िगर करना था।

  • FreeBSD : FreeBSDsudo में डिफ़ॉल्ट रूप से स्थापित नहीं है। आपको इसे पोर्ट्स से बनाना होगा।

  • NetBSD : FreeBSD के समान।

  • OpenBSD : sudoOpenBSD में डिफ़ॉल्ट रूप से स्थापित किया जाता था, पर वे गए बंद करने doasके रूप में 5.8, अक्टूबर 2015 को जारी कियाdoasजहाज डिफ़ॉल्ट रूप से अक्षम।

    sudoवर्तमान संस्करणों में प्राप्त करने के लिए , आपको इसे पैकेज रिपॉजिटरी से इंस्टॉल करना होगा। ओपनबीएसडी के sudoपैकेज को आरएचईएल 3 में 6 के माध्यम से बहुत कॉन्फ़िगर किया गया है, ताकि केवल rootइसके माध्यम से कमांड चला सकें, जो इसके उद्देश्य को हरा देता है sudo। यदि आपने rootस्थापना के दौरान एक गैर- उपयोगकर्ता जोड़ा है wheel, तो इसे समूह में जोड़ा गया था , इसलिए sudoOpenBSD सिस्टम पर उपयोगी बनाने का सबसे सरल तरीका %wheel ALL=(ALL)...लाइन के माध्यम से असहज करना है visudo

  • सोलारिस : sudoसोलारिस 11 में डिफ़ॉल्ट रूप से स्थापित है, लेकिन सोलारिस 10 और पुराने समान-लेकिन-नहीं-काफी समान का उपयोग करते हैं pfexec

    आप sudoपुराने सिस्टम के लिए प्राप्त कर सकते हैं , लेकिन डिफॉल्ट बात है। सोलारिस 10 और पुराने वर्ष हमारे साथ होंगे, इसलिए यदि आपके पास अपने वातावरण में सोलारिस है और आप व्यक्तिगत रूप से उन प्रणालियों के नियंत्रण में नहीं हैं और इसलिए यह सुनिश्चित कर सकते हैं कि sudoआप इस पर भरोसा नहीं कर सकते।

पुराने सिस्टम, अधिक से अधिक मौका यह नहीं है sudo। हालाँकि sudoयह बहुत पुराना है , यह 2000 के दशक के मध्य तक लोकप्रिय नहीं हुआ। इससे अधिक पुराने सिस्टम की संभावना नहीं है sudo। यूनिक्स बॉक्स लंबे समय तक जीवित रहते हैं, इसलिए यह समझ से बाहर नहीं है कि आप आज भी इस तरह की प्रणाली में चलेंगे।

मैं केवल sudoउन प्रणालियों पर भरोसा करता हूं जिन्हें मैं व्यक्तिगत रूप से प्रबंधित करता हूं, या उबंटू, मैकओएस, या ओपनएसयूएसई जैसे जहां यह मूल विशेषाधिकार प्राप्त करने का एकमात्र तरीका है, डिफ़ॉल्ट रूप से।

suकी तुलना में एक सार्वभौमिक "मुझे सुपरसुअर विशेषाधिकार प्राप्त करें" कमांड के करीब है sudo, लेकिन फिर आपके पास उबंटू और मैकओएस जैसी प्रणालियां हैं जहां रूट खाता डिफ़ॉल्ट रूप से बंद कर दिया जाता है विशेष रूप से sudoइसके बजाय आपको उपयोग करने के लिए मजबूर करने के लिए su। तो, आप suसार्वभौमिक भी नहीं कह सकते ।


फ़ुटनोट्स :

  1. CentOS, Oracle Linux, वैज्ञानिक लिनक्स ...

  2. हां, न्यूनतम इंस्टॉल में भी।


9

sudoएक उपयोगिता है जो लगभग सभी लिनक्स-सिस्टम पर उपलब्ध है।
हालांकि, यह सभी डिस्ट्रोस में डिफ़ॉल्ट रूप से बंडल नहीं है। हालांकि सभी बड़े डिस्ट्रो ने इसे डिफ़ॉल्ट रूप से बंडल किया है।

लिनक्स वितरण जैसे आर्क लिनक्स, जेंटो, एलएफएस, आदि जो उपयोगकर्ता को पूर्ण अनुकूलन क्षमता की अनुमति देते हैं, डिफ़ॉल्ट रूप से sudo नहीं है।

आर्क लिनक्स पर, बेस सिस्टम sudoस्थापित के साथ नहीं आता है। उपयोगकर्ता को sudosudoers फ़ाइल को मैन्युअल रूप से डाउनलोड और संपादित करना होगा ।
Gentoo और LFS के लिए Ditto। मैं सूदो के बिना किसी अन्य प्रमुख डिस्ट्रो का नहीं जानता।

और नहीं, मुझे नहीं लगता कि sudoसुपर-उपयोगकर्ता विशेषाधिकारों को प्रदान करने की तुलना में कुछ भी मौजूद नहीं है । यही है, वास्तव में रूट के रूप में लॉगिंग के अलावा।


1
sudoअधिकांश डिस्ट्रोस पर बंडल किया जा सकता है, लेकिन उनमें से सभी इसे चलाने में सक्षम के रूप में प्रत्येक उपयोगकर्ता को कॉन्फ़िगर नहीं करते हैं।
jsbillings

एक और अच्छी बात। निर्भर करता है कि sudoers फ़ाइल क्या कहती है।
डेनिअर

7

सबसे व्यापक रूप से उपयोग किए जाने वाला वितरण, उबंटू sudoरूट बनने के लिए अनुशंसित विधि के रूप में उपयोग करता है (कमांड लाइन का उपयोग करते समय - जो उपयोगकर्ता GUI से चिपके रहते हैं, उन्हें समझे या हुड के नीचे क्या होता है, इसकी परवाह किए बिना एक पासवर्ड प्रॉम्प्ट मिलेगा)। अन्य वितरण सूडो सेट अप करने के लिए प्रोत्साहित कर सकते हैं या नहीं भी कर सकते हैं और इसे जहाज भी कर सकते हैं या नहीं भी। दूसरी ओर, suहर जगह उपलब्ध है, और अधिकांश सिस्टमों पर प्रयोग करने योग्य है, केवल जहां sudoउपलब्ध है, क्योंकि उपयोगकर्ता के पास रूट पासवर्ड नहीं होगा।

बीच suऔर sudo, आप लगभग सभी अपने उपयोगकर्ताओं को कवर किया जाएगा। विदेशी कुछ है जो की जरूरत है califeया opया pfexecपता पहले से ही क्या करना है। यहां तक ​​कि अगर वे नहीं करते हैं, तो एक सिस्टम जो न तो उपयोग करता है और न suही sudoअपरिचित स्थानों में फाइलें होने की संभावना है और पर्याप्त चीजें जिन्हें आपने नहीं सोचा है कि आपके निर्देश शायद वैसे भी काम नहीं करेंगे।


6

आपके प्रश्न का उत्तर देने के लिए, सबसे सटीक रूप से, कोई sudoभी सार्वभौमिक नहीं माना जाता है। सच में 'सार्वभौमिक' की पूरी अवधारणा, अक्सर एक लाल हेरिंग है। यह विशेष रूप से सच है, क्रॉस-डिस्ट्रो संगतता के संबंध में। एक बार जब आप अलग-अलग सॉफ़्टवेयर संस्करणों की भीड़ में फेंक देते हैं, तो सार्वभौमिकता अर्ध-अवास्तविक हो जाती है। स्वभाव से स्क्रिप्टिंग व्यावहारिक है, अगर यह पांडित्यपूर्ण था, तो पोर्टेबल स्क्रिप्ट लिखना व्यावहारिक रूप से असंभव होगा।

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

अपने विशिष्ट स्क्रिप्टिंग केस को संबोधित करने के लिए,

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="`lsb_release -is`"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

वह चिपकाई गई स्क्रिप्ट POSIX शेल तारीफ है, मैं हमेशा डैश संगत लिखता हूं।


लेकिन क्या आपकी स्क्रिप्ट को सूडो को स्थापित करने की आवश्यकता नहीं है? क्या कोई ऐसा तरीका है जिससे हम सूडो के उपयोग के बिना सुपर-यूजर एक्सेस प्राप्त कर सकते हैं? सादे स्क्रिप्टिंग के माध्यम से?
दानीर

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

@ डार्नर: इसके अतिरिक्त वास्तव में कुछ भी नहीं है, "सादा स्क्रिप्टिंग"। लगभग सभी चीजें, शेल बिल्ट-इन को छोड़कर, नियमित बायनेरिज़ के माध्यम से की जाती हैं। यह शेल का पूरा बिंदु है, अन्य कमांड को कॉल करने के लिए, चाहे इंटरेक्टिव हो या स्वचालित। यह यह परिभाषित करने वाली विशेषता है, जो शेल को सामान्य प्रयोजन प्रोग्रामिंग भाषाओं से अलग करती है। तो इस बात की परवाह किए बिना कि आप सुपरसुअर का अधिग्रहण कैसे करते हैं, अपना काम बाहरी आदेशों के माध्यम से करते हैं ..., कच्चे कर्नेल इंटरफेस के साथ आपकी कोडिंग नहीं।
जेएम बेकर

1
@varesa: दिलचस्प उबंटू sudo / su डिफ़ॉल्ट कॉन्फ़िगरेशन पर सटीक विपरीत है। आप यह जांच कर सकते हैं कि उपयोगकर्ता ने कौन सी sudo अनुमतियाँ उपलब्ध कराई हैं, निष्पादित करके sudo -l। दुर्भाग्य से यह इस स्थिति में अनुपयोगी है, क्योंकि इसके लिए पासवर्ड प्रविष्टि की आवश्यकता हो सकती है। इस बारे में अधिक ध्यान से सोचने पर, मुझे वास्तव में लगता है कि पूरी अवधारणा को प्रति डिस्ट्रो टेस्ट के माध्यम से सर्वोत्तम रूप से प्राप्त किया जा सकता है। su -cजब तक कि suडिफॉल्ट अक्षम डिस्ट्रो नहीं चल रहा हो, तब तक उपयोग करना sudo su -c। जैसा कि दूसरों ने उल्लेख किया है, उपयोगकर्ता के लिए सुपरसुमर ऊंचाई को छोड़ना सबसे अच्छा है, मैं किसी भी विभाजन के आसपास एक सुविधा पर विचार करूंगा।
जेएम बेकर

1
@varesa: मैंने अन-कॉन्फिगर्ड के उपयोग की संभावना को कम करने के लिए, पेस्ट की गई स्क्रिप्ट को अपडेट किया है sudo। यह डिफ़ॉल्ट su/ sudoकॉन्फ़िगरेशन को मानते हुए, अधिकांश डिस्ट्रो में ठीक से निष्पादित होना चाहिए । मुझे पता है कि एक आउट-डेटेड उबंटू, पूर्व lsb_release, को संबोधित करने की आवश्यकता होगी ... लेकिन यह वास्तव में सिर्फ एक उदाहरण है, और स्पष्ट रूप से बढ़ाया जा सकता है।
जेएम बेकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.