मेरे पास एक लंबी और लंबे समय तक चलने वाली बैश स्क्रिप्ट है जहां मुट्ठी भर कमांडों को रूट के रूप में चलाने की आवश्यकता होती है, जबकि अधिकांश कमांड को सूडो से पहले नियमित उपयोगकर्ता के रूप में चलाने की आवश्यकता होती है, क्योंकि यह फ़ाइल स्वामित्व और इस तरह गड़बड़ करेगा।
मैं कुछ तरीकों के साथ आया था, लेकिन उनमें से प्रत्येक में कुछ समस्याएं हैं
विधि 1: फ़ाइल के अंदर sudo का उपयोग करना
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
यह अच्छा लगेगा, जिस तरह से कोड लिखा गया है। sudo
कुछ बयानों से पहले लिखा जाता है जिन्हें वास्तव में रूट द्वारा चलाने की आवश्यकता होती है, लेकिन यदि प्रत्येक sudo
कॉल के बीच का समय बहुत लंबा है, तो sudo
फिर से पासवर्ड मांगता है। इसके अलावा, यदि पहली बार sudo
फेल होने पर, जैसे कि अमान्य पासवर्ड के कारण, बाकी स्क्रिप्ट अभी भी निष्पादित की जाती है।
विधि 2: फ़ाइल को कॉल करने के लिए sudo का उपयोग करना और फिर ज़रूरत पड़ने पर मूल उपयोगकर्ता में वापस बदलना
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
यह भी बेकार है, क्योंकि मुझे su username -c
लगभग हर पंक्ति के सामने जोड़ने की आवश्यकता है । इसके अलावा मूल उपयोगकर्ता नाम खोजना sudo
संभव है, लेकिन बोझिल है।
क्या कोई बेहतर तरीका है?
संपादित करें: मैं केवल छोटी, निरर्थक लिपियों को यहां पोस्ट करता हूं, यह दिखाने के लिए कि मैं किस बारे में बात कर रहा हूं। वास्तविक लिपि में मेरी कुछ पंक्तियाँ हैं, जिन्हें sudo (शुरू और रुकने वाली सेवाएँ) की आवश्यकता है, कुछ पंक्तियाँ जहाँ यह मायने नहीं रखती हैं अगर वहाँ sudo है और काफी लाइनें हैं जिन्हें वास्तव में sudo के बिना चलाने की आवश्यकता है।
man sudo
? -v, --validate
'उपयोगकर्ता की कैश्ड क्रेडेंशियल्स को अपडेट करें, यदि आवश्यक हो तो उपयोगकर्ता को प्रमाणित करें। Sudoers प्लगइन के लिए, यह sudo टाइमआउट को डिफ़ॉल्ट रूप से एक और 15 मिनट तक बढ़ाता है, लेकिन कमांड नहीं चलाता है। सभी सुरक्षा नीतियां कैशेड क्रेडेंशियल्स का समर्थन नहीं करती हैं। ' (यदि आप इसे अक्सर पर्याप्त रूप से चलाते हैं, तो
sudo
अगर उसके लिए एलिवेटेड अनुमतियां होनी चाहिए। लेकिनsu username -c
चलाने के लिए स्विच करने का कोई मतलब नहीं हैecho
। दूसरे शब्दों में, यह एक [XY] जैसा लगता है। क्या आप संपादित कर सकते हैं और समझा सकते हैं कि आपकी स्क्रिप्ट वास्तव में क्या कर रही है और आपको ऐसा क्यों लगता है कि आपको उपयोगकर्ताओं को इतनी बार स्विच करने की आवश्यकता है?