क्या मैं एक फ़ाइल को केवल स्क्रिप्ट के लिए सुलभ बना सकता हूं, और उपयोगकर्ता के लिए नहीं?


11

मेरे पास सिस्टम पर सीमित पहुंच वाला एक उपयोगकर्ता है (अर्थात, वह एक sudoer नहीं है); चलो उसे बॉब कहते हैं ।

मेरे पास एक स्क्रिप्ट या एक बाइनरी है जिसे मैं, सिस्टम एडमिनिस्ट्रेटर, ट्रस्ट और इसे रूट के रूप में चलाने में कोई समस्या नहीं होगी; चलो स्क्रिप्ट को बुलाओ get-todays-passphrase.sh। इस स्क्रिप्ट का काम एक "निजी" (बॉब के अलावा किसी उपयोगकर्ता / समूह के स्वामित्व में, या यहां तक ​​कि रूट) फ़ाइल से डेटा पढ़ने के लिए है /srv/daily-passphrases, और केवल फ़ाइल से एक विशिष्ट लाइन का उत्पादन होता है: वह रेखा जो आज की तारीख से मेल खाती है ।

बॉब जैसे उपयोगकर्ताओं को कल के पासफ़्रेज़ को जानने की अनुमति नहीं है , भले ही यह फ़ाइल में सूचीबद्ध हो। इस कारण से, फ़ाइल /srv/daily-passphrasesयूनिक्स अनुमतियों द्वारा सुरक्षित है, इसलिए बॉब जैसे गैर-रूट उपयोगकर्ताओं को सीधे फ़ाइल तक पहुंचने की अनुमति नहीं है । हालांकि, उन्हें get-todays-passphrase.shकिसी भी समय स्क्रिप्ट चलाने की अनुमति दी जाती है , जो "फ़िल्टर्ड" डेटा लौटाता है।


संक्षेप में, ( TL; DR संस्करण):

  1. बॉब संरक्षित फ़ाइल नहीं पढ़ सकता
  2. स्क्रिप्ट संरक्षित फ़ाइल पढ़ सकती है
  3. किसी भी समय, बॉब स्क्रिप्ट को चला सकता है जो फ़ाइल पढ़ सकता है

क्या यूनिक्स फ़ाइल अनुमतियों के भीतर ऐसा करना संभव है? या अगर बॉब एक ​​स्क्रिप्ट शुरू करता है, तो क्या स्क्रिप्ट हमेशा बॉब जैसी ही अनुमतियों के साथ चलने के लिए बर्बाद हो जाएगी?

जवाबों:


13

यह वास्तव में सामान्य और काफी सीधा है। sudoआपको उन विशिष्ट अनुप्रयोगों को सीमित करने की अनुमति देता है, जो एक उपयोगकर्ता कर सकता है। दूसरे शब्दों में, आपको उन्हें मूल या कुछ भी नहीं देना है; आप उन्हें एक विशिष्ट कमांड चलाने कीsudo अनुमति दे सकते हैं । यह वही है जो आप चाहते हैं, और उपयोगकर्ताओं के लिए SSH और इसी तरह से Git रिपॉजिटरी को पुश करने की अनुमति देने जैसी चीजों के लिए बहुत आम बात है।

ऐसा करने के लिए, आपको बस इतना करना होगा /etc/sudoersकि कुछ ऐसा दिखता है

bob ALL=(root) NOPASSWD: /path/to/command/you/trust

( NOPASSWD:भाग की आवश्यकता नहीं है, लेकिन इस स्थिति में बहुत आम है।) उस बिंदु पर, bobसुडो के /path/to/command/you/trustमाध्यम से आह्वान कर सकते हैं , लेकिन कुछ और नहीं।

किसी ने कहा कि हम जो कर रहे हैं, उसकी जड़ देते हैं — जो आप चाहते हैं वह काफी नहीं हो सकता। विशेष रूप से, यदि आपकी लिपि में कोई दोष था, तो आप अपने बॉक्स को जड़ से उखाड़ने देते हैं। कारण है कि, आप के बजाय, किसी उपयोगकर्ता को विशिष्ट बनाने के लिए विशेष फ़ाइल कहना ही पसंद कर सकते हैं specialuser-फिर chownउन्हें फ़ाइल, और राशि /etc/sudoersमेकअप bobकि विशेष उपयोगकर्ता होना। उस स्थिति में, आप जो लाइन जोड़ते हैं sudoersवह बस होगी

bob ALL=(specialuser) NOPASSWD: /path/to/command/you/trust

7
मैं "रूट" तरीके से नहीं जाने का सुझाव दूंगा - इस उद्देश्य के लिए एक विशेष उपयोगकर्ता / समूह बनाएं।
गुंटबर्ट

अच्छी बात; मैं जवाब दे दूँगा।
बेंजामिन पोलाक

7

प्रस्तावना:

के रूप में टिप्पणी में और कारणों के लिए बताया गया है में विस्तार से बताया इस जवाब लिनक्स कर्नेल ध्यान न दी setuid / setguid जब एक स्क्रिप्ट से निपटने बिट। मैं बेंजामिन के उत्तर की नकल नहीं करने जा रहा हूं, बल्कि अपने उत्तर को सही बनाने के लिए स्क्रिप्ट को एक्ज़ीकैबेल से बदल दूंगा।


संक्षिप्त उत्तर: सेटगिड का उपयोग करें

विस्तृत कदम:

  1. एक नया समूह बनाएं (उदाहरण के लिए रीडपास)
  2. उस समूह को पासफ़्रेज़ फ़ाइल का स्वामी बनाएँ sudo chown :readpass thatfile
  3. फ़ाइल को उसके समूह द्वारा ही पढ़ने योग्य बनाएं sudo chmod g=r,o= thatfile
  4. अपने निष्पादन योग्य sgid रीडपास बनाएं:sudo chmod g+s thatfile

इस तरह आपका निष्पादन योग्य समूह के अनुमतियों के साथ चलेगा और इस प्रकार फ़ाइल को पढ़ने में सक्षम होगा।


2
सेटगिड और सेतुइड लिपियों पर आसानी से काम करने योग्य नहीं हैं, है ना?
मुरु

1
आप लिनक्स पर स्क्रिप्ट सेटगाइड नहीं बना सकते हैं: सेटगिड बिट को अनदेखा किया जाएगा। इसके बजाय, एक सुडोल नियम जोड़ें जिसमें बॉब को thatfileसमूह के साथ चलने दिया जा सके readpass
गाइल्स का SO- बुराई पर रोक '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.