SUDOERS के माध्यम से विशिष्ट निर्देशिका में कमांड चलाने के लिए प्रतिबंधित कैसे करें?


13

मैं उपयोगकर्ता को सिस्टम में किसी भी फ़ाइल या निर्देशिका को चलाने chownऔर chmodआदेश देने के लिए sudo (sudoers फ़ाइल के माध्यम से) कॉन्फ़िगर कर सकता हूं । हालाँकि, मैं केवल इन कमांड को उन फाइलों पर चलाने की अनुमति देना चाहता हूं जो /var/www/htmlनिर्देशिका के नीचे रहती हैं ।

मैं विशेषाधिकार प्राप्त आदेशों को कैसे प्रतिबंधित कर सकता हूं ताकि उपयोगकर्ता उन्हें केवल पूर्व-निर्दिष्ट निर्देशिका में चला सके?

उदाहरण के लिए: निम्नलिखित कमांड index.htmlफाइल करने के लिए 777 अनुमतियाँ देती है ।

sudo chmod 777 /var/www/html/index.html

अब मैं दो क्रियाएं करना चाहता हूं

  1. sudoऐसे प्रतिबंधित करें कि उपयोगकर्ता केवल chmodऔर chownभीतर से ही चल सकता है/var/www/html

  2. प्रणाली में कहीं और इन आदेशों को क्रियान्वित करने (जैसे आदेशों में नहीं चलाया जा सकता से उपयोगकर्ता की अनुमति रद्द /var/wwwया /var/ftp)


1
कृपया क्रॉसपोस्ट न करें - superuser.com/questions/456662/…
उलरिच डेंगल

7
क्या यह वास्तव में सही तरीका है? कैसे एक www-dataसमूह के बारे में chmod/ chownकुछ भी करने की आवश्यकता को समाप्त ?
sr_

ठंडा। इस तरह से आपको रूट बहुत आसान लगता है। दूर देना बहुत बुरा विचार है chown। इसके अलावा मुझे कोई कारण नहीं दिखता कि मुझे chmodरूट के रूप में क्यों चलना पड़े।
निल्स

जवाबों:


13

यदि आप पूछ रहे हैं तो असंभव नहीं तो मुश्किल है। यहां तक ​​कि अगर आपने किसी विशिष्ट निर्देशिका के तहत chownऔर chmodफ़ाइलों के अनुप्रयोग को प्रतिबंधित किया है , तो भी कोई व्यक्ति प्रतीकात्मक लिंक को पारित कर सकता है और इसलिए फ़ाइलों को कहीं भी प्रभावित कर सकता है।

सौभाग्य से, यह अत्यधिक संभावना है कि आप जो करने का प्रयास कर रहे हैं वह आपकी वास्तविक समस्या का सही समाधान नहीं है, और एक और तरीका है जो काम करता है।

आमतौर पर, जिन उपयोगकर्ताओं को फ़ाइलों को बनाने और संशोधित करने के लिए अतिरिक्त अनुमतियों की आवश्यकता /var/wwwहोती है www-data, उन्हें एक समूह में जोड़ा जाता है (अक्सर , या आपके पास साइट के विभिन्न भागों के लिए अलग-अलग समूह हो सकते हैं)। आप समूह स्वामित्व और सेटगेड निर्देशिकाओं का उपयोग कर सकते हैं: समूह chgrp www-data /var/www/html; chmod g+ws /var/www/htmlमें सभी www-dataको /var/www/htmlनिर्देशिका में लिखने की अनुमति देता है , और उस निर्देशिका में बनाई गई फ़ाइलें www-dataउपयोगकर्ता के प्राथमिक समूह के बजाय समूह द्वारा स्वामित्व में होंगी , जिन्होंने फ़ाइल बनाई थी। हालांकि, यह बहुत लचीला नहीं है।

आपको शायद जो करना चाहिए, वह है फ़ाइलों के लिए एक्सेस कंट्रोल लिस्ट सेट अप करना /var/www। सबसे पहले, सुनिश्चित करें कि ACL सक्षम हैं: फ़ाइल सिस्टम जो विकल्प के /var/wwwसाथ आरोहित होना चाहिए acl। देखें एक निर्देशिका में सभी नई फ़ाइलों के एक समूह के लिए सुलभ बनाने पर मदद के लिए। ACL उपयोगिताओं ( getfaclऔर setfacl) को भी स्थापित करें । फिर /var/www/htmlउन उपयोगकर्ताओं के लिए पेड़ को अतिरिक्त अनुमति दें जो उन्हें होना चाहिए। आप प्रति-उपयोगकर्ता ACLs सेट कर सकते हैं, लेकिन अक्सर उन उपयोगकर्ताओं को रखना आसान होता है, जिनके पास एक समूह में फाइल सिस्टम के हिस्से पर समान अधिकार होना चाहिए और उस समूह के लिए ACL सेट करना चाहिए। उदाहरण के लिए, यदि समूह में उपयोगकर्ताओं html-writersको पेड़ के नीचे पढ़ने-लिखने की सुविधा होनी चाहिए /var/www/html:

setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html

"यह बहुत लचीला नहीं है" के विषय में (पैराग्राफ 3 के अंत में) - यह क्यों नहीं है? क्या इसलिए कि लोगों को एक निश्चित समूह में होना चाहिए? (मैं अनुमतियों और एसीएल और संबंधित चीजों के बारे में बमुश्किल कुछ भी नहीं जानता।)
काजागमनस

3
@KajMagnus यह अनम्य है क्योंकि रूट को समूहों का प्रबंधन करना है, और फाइलें केवल एक समूह से संबंधित हो सकती हैं। एसीएल किसी भी उपयोगकर्ता को चुन सकता है जो अपने पास मौजूद फ़ाइलों का उपयोग कर सकते हैं, और एक एसीएल में कई उपयोगकर्ताओं और समूहों का उल्लेख किया जा सकता है।
गिलेस एसओ- बुराई को रोकना '

2

आप "myuser" द्वारा /etc/sudoersकमांड visudoजोड़ने के साथ फाइल में सभी तर्कों के साथ उपयोग की जाने वाली कमांड को प्रतिबंधित कर सकते हैं:

## Allows myuser to chmod the html dir and chmod 755 the html2 dir
myuser  ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt 

हर ऑपरेशन को जोड़ने के लिए लॉगिंग सक्षम करें:

Defaults logfile=/var/log/sudo.log

नमूना उत्पादन:

[root@myhost /]# su - myuser
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/index.html 
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/*
-sh-3.1$ sudo /bin/chmod 777 /var/www/html2/myapp/*.txt
Sorry, user myuser is not allowed to execute '/bin/chmod 777 /var/www/html2/myapp/*.txt' as root on myhost.mydomain.
-sh-3.1$ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt 
-sh-3.1$ 

जब आप सुडो का उपयोग करते हैं, तो आधार यह होना चाहिए कि "माईसर" एक विश्वसनीय व्यक्ति है। फ़ाइल अनुमतियों के साथ लापरवाह रहें, दुर्भावनापूर्ण sudo उपयोगकर्ता को किसी फ़ाइल को बाहरी संसाधन से लिंक करने से रोकने और इसे बदलने का कोई सरल तरीका नहीं है।


मैंने इसे पहले भी आजमाया है, लेकिन इसने त्रुटि दी है: क्षमा करें, उपयोगकर्ता prashant को prashant.xyz.com पर रूट / बिन / chmod 777 / var / www / html / a को रूट के रूप में निष्पादित करने की अनुमति नहीं है।
प्रशांत १२

क्या आपने उपयोगकर्ता के साथ स्विच किया है su - prashantया su prashant?
टॉमबोलिनक्स

हाँ, मैं प्रशांत उपयोगकर्ता द्वारा कमांड निष्पादित कर रहा हूं। मैं मंचों को पढ़ता हूं, वे कहते हैं कि कमांड सिस्टम-वाइड हैं। इस तरह के मुद्दे के बारे में किसी ने नहीं लिखा है।
प्रशांत

मैं इसे चलाऊ हू :)। लेकिन यह स्टैटिक कमांड होगा। क्या हम इसे सामान्य कर सकते हैं ताकि मैं / var / www / html के तहत किसी भी फाइल पर कोई अनुमति लागू कर सकूं?
प्रशांत

3
यह पूरी तरह से असुरक्षित है: sudo /bin/chmod 666 /var/www/html/../../../etc/passwdऔर यदि आप किसी भी तरह से ठीक करते हैं, तोln -s /etc /var/www/html/foo/etc; sudo /bin/chmod 666 /var/www/html/foo/etc/passwd
गिल्स एसओ- बुराई को रोकना '

1

ऐसा करने के लिए वास्तव में एक सरल तरीका है, किसी विशेष फ़ाइल या निर्देशिका में किए गए संशोधनों को प्रतिबंधित करने के लिए एक बैश (या अपनी पसंद का शेल) स्क्रिप्ट बनाकर।

आपके उदाहरण में, यह इस तरह दिखेगा:

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

तब आप sudoers फ़ाइल को बदलकर www-data को निष्पादित / usr / स्थानीय / बिन / mychmod करने की अनुमति देंगे।

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


यह असाधारण रूप से खतरनाक है और वास्तव में समाधान नहीं करता है ...
SomeGuy
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.