सवाल कैसे जांचें कि मेरे पास सुडो पहुंच है या नहीं?


इस वजह से मुझे हाल ही में परेशानी हो गई।

$sudo vim /etc/motd 
[sudo] password for bruce: 
bruce is not in the sudoers file.  This incident will be reported.

क्या यह जांचने का कोई तरीका है कि मेरे पास सुडो पहुंच है या नहीं?


83
2018-02-18 19:36


मूल


अपने सिस्टम प्रशासक से पूछें? - mdpc
@ एमडीपीसी: क्या इसके अलावा कोई और तरीका है? - Bruce
आपने उल्लेख नहीं किया है कि क्या आप रूट पहुंच प्राप्त कर सकते हैं या नहीं। - mdpc
यह पहला उदाहरण होना चाहिए किसी को देखकर "इस घटना की सूचना दी जाएगी"। - slhck


जवाब:


रन sudo -v। आमतौर पर इसका उपयोग आपके सूडो पासवर्ड टाइमआउट को बढ़ाने के लिए किया जाता है, लेकिन इसका उपयोग यह निर्धारित करने के लिए किया जा सकता है कि आपके पास कोई है या नहीं sudo विशेषाधिकार।

$ sudo -v
Sorry, user [username] may not run sudo on [hostname].

मैन पेज अंश:

यदि -v (मान्य) विकल्प दिया गया है, तो सूडो उपयोगकर्ता के टाइम स्टैम्प को अपडेट करेगा, यदि आवश्यक हो तो उपयोगकर्ता के पासवर्ड के लिए संकेत दे रहा है। यह सूडो टाइमआउट को 5 मिनट के लिए बढ़ाता है (या जो भी टाइमआउट सूडर्स में सेट होता है) लेकिन कमांड नहीं चलाता है।

यदि आपके उपयोगकर्ता को केवल चलाने की अनुमति है विशिष्ट आदेश, यह आदेश काम करेगा, यह दर्शाता है कि आपको चलाने की अनुमति है कुछ कुछ विभिन्न विशेषाधिकारों के साथ। जबकि कमांड निष्पादित करने का प्रयास करते समय संदेश अलग दिखता है, आपको इस मामले में अनुमति नहीं है (और रूट पर कोई मेल नहीं भेजा जाता है), यह अभी भी संभव है यदि व्यवस्थापक पढ़ते हैं तो आपको परेशानी होगी /var/log/secure

$ sudo ls
[sudo] password for [username]: 
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].

पता करने के लिए क्या आपको विभिन्न विशेषाधिकारों के साथ चलाने की अनुमति है, आप इसका उपयोग कर सकते हैं sudo -l। ध्यान दें कि इस कमांड के लिए आपको अपना पासवर्ड दर्ज करना होगा।


102
2018-02-18 19:51



धन्यवाद। sudo -v मेरे लिए काम करता है। मैन पेज का कहना है कि मैं सुडो-एल भी चला सकता हूं लेकिन वह पासवर्ड मांगता है। ऐसा क्यों है? - Bruce
@ ब्रूस मैं अनुमान लगा रहा हूं, लेकिन अन्यथा कोई (या आपके द्वारा चलाए जाने वाले प्रोग्राम) को पता चल सकता है कि आपके वर्तमान उपयोगकर्ता द्वारा कौन से प्रोग्राम निष्पादित किए जा सकते हैं (संभवतः पासवर्ड दर्ज किए बिना) और उस जानकारी का दुर्भावनापूर्ण रूप से उपयोग करने का प्रयास करें। - Daniel Beck♦
आपको लगता है कि इसका मतलब यह है कि जब मैं इसे वापस प्राप्त करता हूं: patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>? मैंने अपना पासवर्ड दर्ज किया और अनधिकृत के बारे में कुछ भी नहीं मिला। मुझे पता है मेरे पास है sudo अन्य आदेशों को सफलतापूर्वक चलाने से, लेकिन वह unable to resolve host संदेश ने मुझे चिंतित किया है कि मेजबान पर कुछ और हो सकता है। - Patrick M
@PatrickM यह एक समस्या की तरह दिखता है sudoers फ़ाइल। वहां आप निर्दिष्ट कर सकते हैं कि एक होस्ट कमांड चलाने के लिए उपयोगकर्ता किस होस्ट को अधिकृत करता है (यह उपयोग करते समय उपयोगी होता है sudoers एकाधिक मशीनों पर फ़ाइल)। संभवतः उस फ़ाइल में निर्दिष्ट होस्टनाम को हल नहीं किया जा सका। इसे जांचने का प्रयास करें host उदाहरण के लिए आदेश। - Ale
आरएचईएल 6 पर मेरे लिए काम नहीं करता है, sudo -v दिया "xx sudoers फ़ाइल में नहीं है। इस घटना की सूचना दी जाएगी।" - 79E09796


यह बहुत आसान है। रन sudo -l। यह आपके पास किसी भी सूडो विशेषाधिकारों की सूची देगा।


38
2017-12-17 22:55



शायद डाउनवॉटेड क्योंकि यह लगभग दो साल पहले डैनियल बेक ने क्या कहा था। - G-Man
या बताता है कि क्या होता है, यह एक टिप्पणी है, सबसे अच्छा - Ramhound
@ जोनाथन: अगर आप अब उबंटू रिग में लिपि करेंगे, sudo -l यदि आप सूडो या नहीं कर सकते हैं तो पासवर्ड मांगता है। sudo -v केवल पूछता है कि क्या आप कर सकते हैं, और "$(whoami)" != "root" किसी भी लिनक्स में कभी भी कुछ नहीं पूछेगा। - bksunday
@bksunday आप सही हैं। मैंने अब एक साफ डेबियन जेसी पर परीक्षण किया और आपके परिणामों की पुष्टि की। मेरी पिछली (अभी हटाई गई) टिप्पणी शायद उस मशीन पर परीक्षण का नतीजा था जिस पर मेरे पास कुछ था sudo privs। - Jonathan Ben-Avraham
@ जी-मैन लेकिन इस सरल उत्तर ने मुझे शायद अधिक सटीक डैनियल के उत्तर से अधिक मदद की, जहां यह आदेश दुर्भाग्य से बहुत अंत है ... - Betlista


स्क्रिप्ट-अनुकूल संस्करण यहां दिया गया है:

timeout 2 sudo id && echo Access granted || echo Access denied

चूंकि आपके पास पासवर्ड इनपुट पर फंस नहीं जाएगा क्योंकि आपके पास नहीं है sudo पहुंच।

आप इसे एक चर में भी सेट कर सकते हैं जैसे:

timeout 2 sudo id && sudo="true" || sudo="no"
echo "$sudo"

नोट: मैकोज़ पर, आपको इंस्टॉल करने की आवश्यकता है coreutils, उदा। brew install coreutils


6
2018-06-14 00:49



कहां के लिए कोई विकल्प timeout डिफ़ॉल्ट रूप से उपलब्ध नहीं है, उदा। ओएस एक्स पर? - Harry
आपको स्थापित करने की जरूरत है coreutils, उदा। brew install coreutils। - kenorb
यह एक स्क्रिप्ट में मेरे लिए काम नहीं करता है। अनजान कारण के लिए स्क्रिप्ट तब तक लटकती है जब तक कि मैं इसे मार नहीं जाता। - beruic


मेरे लिए, 'sudo -v' तथा 'sudo -l'एक स्क्रिप्ट में काम नहीं किया क्योंकि कभी-कभी इंटरैक्टिव (मुझे ऊपर बताए गए पासवर्ड के लिए पूछना)। 'sudo -n -l'काम भी नहीं किया, उसने निकास कोड' 1 'दिया, हालांकि मेरे पास लापता पासवर्ड की वजह से सुडो अनुमतियां हैं। लेकिन आदेश को विस्तारित करना:

A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor

लिपि के लिए मेरे लिए सफल रहा था। यह अभिव्यक्ति देता है 0 यदि वर्तमान उपयोगकर्ता 'सुडो' और कॉल कर सकता है 1 अगर नहीं।

स्पष्टीकरण:
अतिरिक्त पैरामीटर -n सेवा मेरे sudo अंतःक्रियाशीलता को रोकता है।
उत्पादन $A आदेश का 'sudo -n -v 2>&1' शायद:
 - खाली (इस मामले में, मौजूदा उपयोगकर्ता द्वारा सूडो को बुलाया जा सकता है), या:
 - एक नोट कि वर्तमान उपयोगकर्ता सूडो के लिए अधिकृत नहीं है, या:
 - पासवर्ड के लिए एक प्रश्न पाठ (इस मामले में, उपयोगकर्ता अधिकृत है)।
("asswor" एक अंग्रेजी "पासवर्ड" के साथ ही एक जर्मन "Passwort" के लिए फिट होगा)।


1
2018-02-28 02:27





मुझे वोट और टिप्पणी करने के लिए कम रैंक मिला है, लेकिन मैं जेराल्ड श्लेड के जवाब को ऊपर उठाना चाहता था, क्योंकि मैंने पाया कि पहले एकमात्र तरीका है, और सोचा था कि कोई और इसे जानता है - अब तक: डी

बीटीडब्ल्यू मेरा समाधान:

[[ "$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'* ]]

(2015 के अंत से mwhahaaa)


1
2017-10-01 22:31



पढ़ो "टिप्पणी करने के लिए मुझे 50 प्रतिष्ठा क्यों चाहिए" यह सुनिश्चित करने के लिए कि आप समझते हैं कि आप टिप्पणी कैसे शुरू कर सकते हैं। - Pimp Juice IT


जेराल्ड श्लेड का जवाब यहाँअभी भी सुधार किया जा सकता है!

उपयोग

prompt=$(sudo -nv 2>&1)
if [ $? -eq 0 ]; then
  # exit code of sudo-command is 0
  echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
  echo "has_sudo__needs_pass"
else
  echo "no_sudo"
fi

यहाँ एक है एक स्क्रिप्ट में उपयोग का पूरा उदाहरण:

#!/usr/bin/env bash

is_root () {
    return $(id -u)
}

has_sudo() {
    local prompt

    prompt=$(sudo -nv 2>&1)
    if [ $? -eq 0 ]; then
    echo "has_sudo__pass_set"
    elif echo $prompt | grep -q '^sudo:'; then
    echo "has_sudo__needs_pass"
    else
    echo "no_sudo"
    fi
}

elevate_cmd () {
    local cmd=$@

    HAS_SUDO=$(has_sudo)

    case "$HAS_SUDO" in
    has_sudo__pass_set)
        sudo $cmd
        ;;
    has_sudo__needs_pass)
        echo "Please supply sudo password for the following command: sudo $cmd"
        sudo $cmd
        ;;
    *)
        echo "Please supply root password for the following command: su -c \"$cmd\""
        su -c "$cmd"
        ;;
    esac
}

if is_root; then
    echo "Error: need to call this script as a normal user, not as root!"
    exit 1
fi


elevate_cmd which adduser

1
2017-12-30 18:57



पहली लिपि ने मेरी मदद की, धन्यवाद! - JRichardsz


"सूडो एक्सेस" स्वाद में आता है। दो प्राथमिक स्वाद: सबसे पहले, या आपके समूह का समूह, / etc / sudoers फ़ाइल में सुडो पहुंच के लिए सेट अप करने की आवश्यकता है।

दूसरा, आपको अपना पासवर्ड जानना होगा, या आपको हाल ही में एक सूडो कमांड करने की ज़रूरत है। हाल ही में पर्याप्त है कि टाइमआउट की समयसीमा समाप्त नहीं हुई है। (मजेदार तथ्य: आप अपने सूडोर फ़ाइल में समय निकाल सकते हैं।)

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

bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled

एसएस स्टडीन से पासवर्ड पढ़ने के लिए सुडो को बताता है। -पी एक खाली संकेत सेट करता है। -के पहुंच के दूसरे समय को साफ़ करता है।

चूंकि यह stderr को / dev / null भेजता है, यह भी जांच करेगा कि उपयोगकर्ता के पास पहले प्रकार की सूडो पहुंच है या नहीं।


1
2017-08-30 17:58





का पालन करें इन sudoers फ़ाइल देखने के लिए कदम। यदि आप वहां हैं, तो आपके पास सूडो है। यदि नहीं, तो आप स्वयं को जोड़ सकते हैं।

  1. su
  2. visudo
  3. फ़ाइल के नीचे, दर्ज करें your_username_here ALL=(ALL) ALL
  4. मारो ESC और टाइप करें :wq
  5. प्रकार exit
  6. आवश्यकतानुसार अपना आदेश दोबारा चलाएं sudo
  7. अपना पासवर्ड दर्ज करें (रूट का पासवर्ड नहीं)

-3
2018-02-18 19:41



ओपी चलाने के लिए "परेशानी में पड़ गया" sudo, तो वह शायद नहीं है  सिस्टम प्रशासक, न ही कुलीन सिस्टम प्रशासकों में से एक। वह शायद सिर्फ एक उपयोगकर्ता है जिसने सोचा कि उसे कुछ सीमित शक्तियां दी गई हैं। आपको क्या संदेह है कि वह जा सकता है su? - Scott