मैं हाल ही में इस वजह से मुश्किल में पड़ गया।
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
वहाँ एक तरह से जाँच करने के लिए है कि क्या मेरे पास सूडो एक्सेस है या नहीं?
मैं हाल ही में इस वजह से मुश्किल में पड़ गया।
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
वहाँ एक तरह से जाँच करने के लिए है कि क्या मेरे पास सूडो एक्सेस है या नहीं?
जवाबों:
भागो 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
। ध्यान दें कि इस कमांड के लिए आपको अपना पासवर्ड डालना होगा।
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
? मैंने अपना पासवर्ड दर्ज किया और अनधिकृत के बारे में कुछ नहीं मिला। मुझे पता है कि मेरे पास sudo
अन्य आदेशों को सफलतापूर्वक चलाने से है, लेकिन उस unable to resolve host
संदेश ने मुझे चिंतित किया है कि मेजबान पर कुछ और मजेदार हो सकता है।
sudoers
फ़ाइल के साथ एक समस्या की तरह दिखता है । इसमें आप यह निर्दिष्ट कर सकते हैं कि किस उपयोगकर्ता को एक विशिष्ट कमांड चलाने के लिए अधिकृत किया गया है (यह एक sudoers
से अधिक मशीनों पर एक ही फ़ाइल का उपयोग करते समय उपयोगी है )। संभवतः उस फ़ाइल में निर्दिष्ट होस्टनाम को हल नहीं किया जा सकता है। host
उदाहरण के लिए इसे कमांड के साथ जाँचने का प्रयास करें ।
sudo -v
दिया "xx sudoers फ़ाइल में नहीं है। इस घटना की सूचना दी जाएगी।"
यह बहुत सरल है। भागो sudo -l
। यह आपके पास किसी भी sudo विशेषाधिकार को सूचीबद्ध करेगा।
sudo -l
तो पासवर्ड के लिए पूछ सकता है कि क्या यू सूडो कर सकते हैं या नहीं। sudo -v
केवल तभी "$(whoami)" != "root"
पूछ सकता है जब आप किसी भी लिनक्स में कुछ भी नहीं पूछ सकते हैं।
sudo
।
यहाँ स्क्रिप्ट के अनुकूल संस्करण है:
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 पर?
coreutils
, उदा brew install coreutils
।
गेराल्ड शेहडे का जवाब यहाँ , अभी भी सुधारा जा सकता है!
उपयोग
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
मेरे लिए, ' 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 के लिए अधिकृत नहीं है, या:
- - के लिए एक प्रश्न पाठ पासवर्ड (इस मामले में, उपयोगकर्ता अधिकृत है)।
("एस्सरोव" एक अंग्रेजी "पासवर्ड" के साथ-साथ जर्मन "पासवॉर्ट" के लिए भी फिट होगा)।-n
sudo
$A
sudo -n -v 2>&1
मुझे वोट देने और टिप्पणी करने के लिए निम्न रैंक मिली है, लेकिन मैं जेराल्ड स्कैडे के उत्तर को बढ़ाना चाहता था, जैसा कि मैंने पाया है कि एकमात्र तरीका पहले, और सोचा था कि नंबर 1 और इसे नहीं जानता है - अब तिल: डी
btw मेरा समाधान:
[[ "$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'* ]]
(2015 मुहूर्त के अंत से)
फ्लेवर में "सूडो एक्सेस" आता है। दो प्राथमिक जायके: सबसे पहले, या आप के एक सदस्य, / / / 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 पहुँच है या नहीं।
Sudoers फ़ाइल देखने के लिए इन चरणों का पालन करें। यदि आप वहां हैं, तो आपके पास सूडो है। यदि नहीं, तो आप खुद को जोड़ सकते हैं।
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
sudo
, तो वह शायद नहीं है सिस्टम प्रशासक, और न ही कुलीन सिस्टम प्रशासक की एक भी। वह शायद सिर्फ एक उपयोगकर्ता है जिसने सोचा कि उसे कुछ सीमित शक्तियां दी गई हैं। आपको क्या संदेह है कि वह जा सकता है ? su