स्क्रिप्ट चलाने से रूट को कैसे रोकें


10

Glassfish अनुप्रयोग सर्वर अनुप्रयोग सर्वर प्रशासन के लिए है और यह भी शुरू करने और उन्हें रोकने और मैं इस स्क्रिप्ट चलाने से जड़ उपयोगकर्ता प्रतिबंधित करना चाहते हैं स्क्रिप्ट प्रदान करता है। कारण यह है कि कुछ प्रमुख डेवलपर्स सर्वर को गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में प्रबंधित करना भूल जाते हैं और यदि वे एप्लिकेशन सर्वर को रूट उपयोगकर्ता के रूप में पुनरारंभ करते हैं, तो एप्लिकेशन सर्वर को रूट उपयोगकर्ता [*] द्वारा चलाना होगा।

यह रूट एक्सेस देने से बचने का विकल्प नहीं है और डेवलपर्स भूल जाते हैं क्योंकि वे अपने स्थानीय मशीन पर ऐसा करने के लिए उपयोग किए जाते हैं। मैं चाहूंगा कि asadminस्क्रिप्ट को या तो गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में चलाने के लिए बदल दिया जाए या हर बार स्क्रिप्ट रूट द्वारा वैकल्पिक रूप से त्रुटि संदेश प्रदर्शित किया जाए।

बैश शैल का उपयोग किया जाता है।

:

जवाबों:


18

अन्य उत्तरों के समान, लेकिन आप जिस दिशा में चाहते थे।

if [[ $EUID -eq 0 ]]; then
  echo "This script must NOT be run as root" 1>&2
  exit 1
fi

वैकल्पिक रूप से, आप sudoस्क्रिप्ट को उपयोग -uकरने के लिए उपयोगकर्ता को निर्दिष्ट करने के लिए ध्वज का उपयोग करके गैर-विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में निष्पादन के लिए बाध्य कर सकते हैं । मैं ग्लासफिश का उपयोग नहीं करता, लेकिन यहां एक प्रोटो-उदाहरण छद्म स्क्रिप्ट है।

#!/bin/bash

if [ $1 == "start" ]; then
  sudo -u nobody /usr/bin/glassfish
fi

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


2

@ त्सेपंग का सही विचार है। मुझे नहीं पता कि कौन सा सबसे पोर्टेबल है, लेकिन यहां यह पता लगाने के अन्य तरीके हैं कि क्या उपयोगकर्ता रूट है:

id -u
$UID

वैकल्पिक रूप से, आप इसे उसी पैरामीटर के साथ किसी अन्य उपयोगकर्ता के रूप में चलाने के लिए बाध्य कर सकते हैं:

if [[ "$USER" != appuser ]]
then
    exec sudo -u appuser "$0" "$@"
fi

1
यह पिछड़ा हुआ है। वह चाहता है कि रूट इस स्क्रिप्ट को चलाए।
बहमट

डी'ओह, sudoथोड़ा भूल गया । अब यह काम करना चाहिए।
l0b0

@TobySpeight नहीं, यदि उपयोगकर्ता मूल है, तो स्क्रिप्ट कुछ भी नहीं करती है। मेरा मानना ​​है कि यदि आपका $@स्थान खाली है, तो अतिरिक्त परिवर्तन का परिणाम भी होता है, और मैंने इसे एक पैटर्न में कहीं और उपयोग करने के लिए बदल दिया है।
l0b0

धन्यवाद @TobySpeight, संशोधित मुझे यकीन था कि मैंने उस फॉर्म को कहीं और देखा है ताकि यह सुनिश्चित हो सके कि शून्य तर्क सही तरीके से पारित किए गए हैं। इसके अलावा चेक को ठीक किया, जिसमें निश्चित रूप से एक बग था (यह एक कांटा बम नहीं था, लेकिन बस खुद को अनिश्चित काल के लिए कॉल करेगा।
l0b0

मेरा तर्क है कि यह एक कांटा बम था, क्योंकि प्रत्येक उदाहरण के लिए एक नया शेल कांटा होगा sudo(इसका उपयोग नहीं कर रहा है exec) और माता-पिता इसके लिए इंतजार करेंगे, इसलिए आप अंततः पूरी प्रक्रिया तालिका के साथ समाप्त हो जाएंगे। यह अभी भी execवहाँ डालने लायक है (यदि आप के बाद कोड का इरादा नहीं हैfi गलत उपयोगकर्ता के रूप में चलाने हैं)।
स्पाइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.