2009-10-29 8 views
11

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

+1

हालांकि मैं * आम तौर पर * इस मूर्खतापूर्ण व्यवहार पर विचार करेंगे: * इसे चलाने के लिए जब तक अनुमतियों असफल चलो *; सिस्टम सेटअप किया जा सकता है कि ऑपरेशन को वर्तमान उपयोगकर्ता के रूप में सफलतापूर्वक निष्पादित किया जा सकता है और रूट को मजबूर कर इस विकल्प को हटा दिया गया है [मुझे उन स्क्रिप्ट को ठीक करना पड़ा जिन्होंने पहले समान धारणाएं की हैं]। दूसरी तरफ, रूट के रूप में चलाने पर मुझे एक बड़ी वसा चेतावनी को प्रदर्शित करने या प्रदर्शित करने के लिए एक और अधिक मामला है। –

+0

आपको सूडो का उपयोग करने का प्रयास करना चाहिए। लिनक्स के तहत, जब आप कुछ भी इंस्टॉल करते हैं तो आपको सामान्य उपयोगकर्ताओं को सिस्टम – masterLoki

+1

को नुकसान पहुंचाने वाले किसी भी चीज को स्थापित करने से रोकने के लिए रूट होना जरूरी है। वह चाहता है कि उसकी स्क्रिप्ट इस बात को ध्यान में रखे कि कुछ लोग भूल सकते हैं, या सूडो (या विशेषाधिकार वृद्धि के अन्य साधनों से अनजान हो सकते हैं))। कुछ और करने का प्रयास करने से पहले रन टाइम सैनिटी की जांच करना अच्छा अभ्यास है। –

उत्तर

27
#!/bin/bash 
if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

स्रोत: http://www.cyberciti.biz/tips/shell-root-user-check-script.html

+0

या, इसे कम रखने के लिए यूआईडी env: यदि [[$ UID -ne 0]]; तो – zlack

+1

@zlack $ UID मूल उपयोगकर्ता के यूआईडी को देगा यदि स्क्रिप्ट 'सुडो' के माध्यम से चलाया जाता है जबकि डेविड की स्क्रिप्ट को रूट के रूप में चलाने के रूप में माना जाएगा। आप जो कर रहे हैं उसके आधार पर, डेविड शायद बेहतर है। – pr1001

+0

जैसा कि pr1001 कहते हैं, यूआईडी काम नहीं करेगा अगर उपयोगकर्ता सूडो का उपयोग करके स्क्रिप्ट चला रहा है, लेकिन ईयूआईडी ठीक काम करेगा। – Tom

5

इस पर चारों ओर से खुदाई करने के बाद, आम सहमति बैश में id -u उपयोग करने के लिए कोई जरूरत नहीं है कि, के रूप में EUID (प्रभावी प्रयोक्ता आईडी) अलग-अलग सेट हो जाएगा हो रहा है। UID के विपरीत, EUID0 होगा जब उपयोगकर्ता root है या sudo का उपयोग कर रहा है। जाहिर है, यह करीब 100 गुना तेजी से id -u चलाने की तुलना में है:

#!/bin/bash 
if ((EUID != 0)); then 
    echo "You must be root to do this." 1>&2 
    exit 1 
fi 

स्रोत: https://askubuntu.com/questions/30148/how-can-i-determine-whether-a-shellscript-runs-as-root-or-not

+2

हालांकि यह बोर्न शेल में काम नहीं करता है। क्या आपके पास कोई सख्ती से POSIX अनुपालन समाधान है? –

संबंधित मुद्दे