2011-05-07 7 views
8

यह एक बेवकूफ सवाल हो सकता है।bud स्क्रिप्ट में एकल कमांड के लिए sudo

मेरे पास एक स्क्रिप्ट है जिसे मैं मैक ओएस एक्स और एक लिनक्स बॉक्स के बीच पोर्टेबल बनना चाहता हूं। ओएस एक्स में, स्क्रिप्ट में एक कमांड के लिए sudo की आवश्यकता होती है, जहां लिनक्स बॉक्स पर, ऐसा नहीं होता है।

लंबी कहानी छोटी, sudo के साथ एक स्क्रिप्ट में एक आदेश कैसे चलाता है, जबकि शेष स्क्रिप्ट के लिए ऊंचे विशेषाधिकारों को हटाया जाता है?

मैं

su - 

और

su -c 

उपयोग करने के लिए कोशिश की है, लेकिन वे दोनों बाहर त्रुटि के लिए लग रहे हैं। (वे कहते हैं "क्षमा करें" और आगे बढ़ें, मुझे लगता है क्योंकि यह root और root के रूप में चलाने की कोशिश कर रहा है पासवर्ड नहीं है)।

मुझे पता है कि ऐसा करने के लिए एक मूर्ख और आसान तरीका होना चाहिए, हर कोई क्या सुझाव देता है?

उत्तर

6

आप 'को रद्द' कर सकते हैं sudo अनुमति (वास्तव में: sudo समय खिड़की जल्दी बंद) करने से:

sudo -k 

इसके अलावा, आप sudo कॉन्फ़िगर कर सकते हैं केवल कुछ आदेश पर ऊंचा अनुमतियाँ, या यहाँ तक करने की अनुमति विशिष्ट आदेशों के लिए गैर-रूट का प्रतिरूपण करें। man sudoers देखें। उदाहरण अनुभाग लगभग sudo के configurability के लिए कोई सीमा नहीं है यह बेहद स्पष्ट है कि वहाँ (भूमिकाओं, होस्ट करता है, आदेश, से बचने के लिए अनुमति देते sudo लक्ष्य उपयोगकर्ताओं, अपवाद चीजों की अनुमति देते हैं, पासवर्ड कम प्राधिकरण आदि आदि) बनाता है।

उम्मीद है कि अपने संदर्भ में एक दिलचस्प उदाहरण:

उपयोगकर्ता फ्रेड एक पासवर्ड दिए बिना डीबी Runas_Alias ​​(ओरेकल या Sybase) में किसी भी उपयोगकर्ता के रूप में कमांड चलाने कर सकते हैं।

fred   ALL = (DB) NOPASSWD: ALL 

आप नहीं/नहीं वास्तव में/etc/sudoers साथ दखल करना चाहते हैं कर सकते हैं (visudo!) तो मैं बिना

{ 
    trap "sudo -k" EXIT INT QUIT TERM 
    sudo ls # whatever 
} 
+0

यह वही था जो मुझे चाहिए था। आदेश चलाएं, फिर सुडो-के चलाएं। बहुत बहुत धन्यवाद। – rick

+0

सूडोर्स के लिए धन्यवाद; सिर्फ वही था जो मुझे चाहिए था। –

0

नियमित उपयोगकर्ता पर वापस जाने के लिए su के बजाय sudo su आज़माएं।

+0

जब मैं कोशिश "sudo सु umount/देव/disk1", ​​मैं मिलता है "सु: अज्ञात लॉगिन: umount"। मनुष्य सुडो के माध्यम से देखकर, मैं केवल यह निष्कर्ष निकाल सकता हूं कि यह "umount" नामक उपयोगकर्ता की तलाश में है? – rick

+0

@rick: हां, यह 'umount' नामक उपयोगकर्ता की तलाश में है। 'su' किसी भिन्न उपयोगकर्ता (आमतौर पर रूट) में बदलने के लिए है और केवल रूट के रूप में चलाया जा सकता है, इसलिए जो तर्क होता है वह उपयोगकर्ता नाम है। 'sudo' एक अलग उपयोगकर्ता के रूप में एक एकल कमांड चलाने के लिए है।आपके उदाहरण में, आप कह रहे हैं कि आप 'su umount/dev/disk1' को रूट के रूप में कमांड करना चाहते हैं, जो तब कहता है कि आप उपयोगकर्ता' umount' (अतिरिक्त अनदेखी तर्क के साथ) में बदलना चाहते हैं। –

0

की तरह कुछ उपयोग करने का सुझाव का प्रयोग करें sudosu:

#!/bin/bash 
whoami # Runs under your regular account 
sudo whoami # Runs as root 
whoami # Runs under your regular account again 

जब मैं ru n यह:

$ ./sudotest 
gordon 
Password: 
root 
gordon 
संबंधित मुद्दे