अगर मुझे सूडो एक्सेस है तो कैसे जांचें?


104

मैं हाल ही में इस वजह से मुश्किल में पड़ गया।

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

वहाँ एक तरह से जाँच करने के लिए है कि क्या मेरे पास सूडो एक्सेस है या नहीं?


अपने सिस्टम व्यवस्थापक से पूछें?
mdpc

1
@ mdpc: क्या इसके अलावा कोई और तरीका है?
ब्रूस

आपने उल्लेख नहीं किया है कि आप रूट एक्सेस प्राप्त कर सकते हैं या नहीं।
mdpc

जवाबों:


121

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

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

मैन पेज का अंश:

यदि -v (वैध) विकल्प दिया जाता है, तो sudo उपयोगकर्ता के समय टिकट को अपडेट करेगा, यदि आवश्यक हो तो उपयोगकर्ता के पासवर्ड के लिए संकेत देगा। यह एक और 5 मिनट (या जो कुछ समयआउट sudoers में सेट किया गया है) के लिए sudo टाइमआउट का विस्तार करता है, लेकिन एक कमांड नहीं चलाता है।

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


2
धन्यवाद। sudo -v मेरे लिए काम करता है। मैन पेज कहता है कि मैं sudo -l भी चला सकता हूं लेकिन वह पासवर्ड मांगता है। ऐसा क्यों है?
ब्रूस

2
@ क्योंकि मैं यहां अनुमान लगा रहा हूं, लेकिन अन्यथा कोई (या आपके द्वारा चलाया गया कोई प्रोग्राम) यह पता लगा सकता है कि आपके वर्तमान उपयोगकर्ता द्वारा कौन से प्रोग्राम निष्पादित किए जा सकते हैं (संभवतः पासवर्ड दर्ज किए बिना) और दुर्भावनापूर्ण रूप से उस जानकारी का उपयोग करने का प्रयास करें।
डैनियल बेक

जब आप इसे वापस लेते हैं तो इसका क्या मतलब है patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>? मैंने अपना पासवर्ड दर्ज किया और अनधिकृत के बारे में कुछ नहीं मिला। मुझे पता है कि मेरे पास sudoअन्य आदेशों को सफलतापूर्वक चलाने से है, लेकिन उस unable to resolve hostसंदेश ने मुझे चिंतित किया है कि मेजबान पर कुछ और मजेदार हो सकता है।
पैट्रिक एम

@PatrickM यह sudoersफ़ाइल के साथ एक समस्या की तरह दिखता है । इसमें आप यह निर्दिष्ट कर सकते हैं कि किस उपयोगकर्ता को एक विशिष्ट कमांड चलाने के लिए अधिकृत किया गया है (यह एक sudoersसे अधिक मशीनों पर एक ही फ़ाइल का उपयोग करते समय उपयोगी है )। संभवतः उस फ़ाइल में निर्दिष्ट होस्टनाम को हल नहीं किया जा सकता है। hostउदाहरण के लिए इसे कमांड के साथ जाँचने का प्रयास करें ।
अले

आरएचईएल 6 पर मेरे लिए काम नहीं करता है, sudo -vदिया "xx sudoers फ़ाइल में नहीं है। इस घटना की सूचना दी जाएगी।"
79E09796

43

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


1
शायद इसलिए हतोत्साहित किया गया क्योंकि यह लगभग दो साल पहले डैनियल बेक ने कहा था।
जी-मैन

1
या बताते हैं कि क्या होता है, यह एक टिप्पणी है, सबसे अच्छा
रामहाउंड

2
@ जोनाथन: यदि यू अब ubuntu रिग में स्क्रिप्ट करेगा, sudo -lतो पासवर्ड के लिए पूछ सकता है कि क्या यू सूडो कर सकते हैं या नहीं। sudo -vकेवल तभी "$(whoami)" != "root"पूछ सकता है जब आप किसी भी लिनक्स में कुछ भी नहीं पूछ सकते हैं।
दोपहर

@bksunday आप सही हैं। मैंने अब एक साफ डेबियन जेसी पर परीक्षण किया और आपके परिणामों की पुष्टि की। मेरी पिछली (अब हटाई गई) टिप्पणी संभवतः एक मशीन पर परीक्षण का परिणाम थी, जिस पर मेरे पास कुछ निजी थे sudo
जोनाथन बेन-एवराम

@ जी-मैन लेकिन इस सरल उत्तर ने मुझे संभवतः अधिक सटीक डैनियल के उत्तर से अधिक मदद की, जहां यह आदेश बहुत ही दुर्भाग्यपूर्ण है ...
बेटलिस्टा

11

यहाँ स्क्रिप्ट के अनुकूल संस्करण है:

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

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

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

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

नोट: macOS पर, आपको स्थापित करने की आवश्यकता है coreutils, उदा brew install coreutils


timeoutडिफ़ॉल्ट रूप से उपलब्ध नहीं होने के लिए कोई विकल्प , उदाहरण के लिए OS X पर?
हैरी

1
आपको स्थापित करने की आवश्यकता है coreutils, उदा brew install coreutils
केनोरब

2
यह मेरे लिए स्क्रिप्ट में काम नहीं करता है। अस्पष्टीकृत कारण के लिए स्क्रिप्ट तब तक लटकी रहती है जब तक मैं उसे मार नहीं देता।
बेरिक

7

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

उपयोग

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

2

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

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

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

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




2

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

btw मेरा समाधान:

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

(2015 मुहूर्त के अंत से)


1
" आपको टिप्पणी करने के लिए 50 प्रतिष्ठा की आवश्यकता क्यों है" पढ़ें, ताकि आप समझ सकें कि आप टिप्पणी कैसे शुरू कर सकते हैं।
दलाल रस आईटी

1

फ्लेवर में "सूडो एक्सेस" आता है। दो प्राथमिक जायके: सबसे पहले, या आप के एक सदस्य, / / ​​/ sudorers फ़ाइल में sudo का उपयोग करने के लिए सेटअप होने की जरूरत है।

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

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

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

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

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


-4

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

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

11
ओपी चलाने के लिए "मुसीबत में मिल गया" sudo, तो वह शायद नहीं है सिस्टम प्रशासक, और न ही कुलीन सिस्टम प्रशासक की एक भी। वह शायद सिर्फ एक उपयोगकर्ता है जिसने सोचा कि उसे कुछ सीमित शक्तियां दी गई हैं। आपको क्या संदेह है कि वह जा सकता है ? su
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.