विशिष्ट कमांड चलाने से sudo उपयोगकर्ताओं को कैसे रोकें?


29

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

मैं उन्हें दौड़ने से रोकना चाहता हूं

service NetworkManager restart
service network restart

आदेशों।

क्या कोई ऐसा तरीका है जिससे मैं इसे हासिल कर सकता हूं?


आप किस वितरण का उपयोग कर रहे हैं? सेवा के नाम डिस्ट्रो विशिष्ट हैं और मुझे आपके पास मौजूद नामों का उपयोग करने वाले किसी भी डिस्ट्रो का पता नहीं है। क्या आपका मतलब networkingऔर है network-manager? इसके अलावा, आपके उपयोगकर्ताओं की sudoपहुंच क्यों है ? उन्हें तब तक नहीं करना चाहिए जब तक कि आप उन्हें पूरे रूट विशेषाधिकार न दें।
टेराडन

@terdon मैंने इसे हल कर दिया है। धन्यवाद। मैं इसे उत्तर के रूप में पोस्ट नहीं कर सकता क्योंकि मैं
शेखर

हाँ आप कर सकते हैं, कृपया। मुझे आपके द्वारा दिए गए उत्तर को भी जानना है।
टेराडॉन

@terdon यकीन है, लेकिन यह कह रही है कि मुझे अपना जवाब पोस्ट करने के लिए 8 बजे तक प्रतीक्षा करने की आवश्यकता है क्योंकि मेरे पास 10 प्रतिष्ठा भी नहीं है
शेखर

1
आह, हाँ, क्षमा करें, आपको वास्तव में प्रतीक्षा करने की आवश्यकता है। मैंने अभी-अभी उतारा, आपके पास अब प्रतिनिधि है :)
टेराडॉन

जवाबों:


47

CmndAlias ​​का उपयोग करना ALLकभी सुरक्षित नहीं होगा

service network restartबिना किए चलाने के 1000 तरीके हैं sudo service network restart। यहाँ एक शरारती उपयोगकर्ता क्या प्रयास कर सकता है इसका एक उदाहरण है:

$ echo "service network restart" > /tmp/hax
$ chmod a+x /tmp/hax
$ sudo /tmp/hax

यदि आप उपयोगकर्ताओं को ALLआदेश उपनाम के साथ प्रदान करते हैं , और फिर एक ब्लैकलिस्ट बनाने का प्रयास करते हैं, तो वे हमेशा इसके चारों ओर एक रास्ता खोजने में सक्षम होंगे। ब्लैकलिस्ट बैश, और वे अजगर का उपयोग करेंगे। ब्लैक लिस्ट अजगर, और वे पर्ल का उपयोग करेंगे। ब्लैकलिस्ट पर्ल, और वे PHP का उपयोग करेंगे। कोई नहीं चाहता है कि!

क्या तुम सच में किसी को कुछ करने के लिए नहीं करना चाहते हैं, तो आप थॉमस का कहना है के रूप में करते हैं, और चीजों को वे की एक श्वेत सूची बनाना चाहिए रहे हैं करने की अनुमति दी।


एक अपवाद के साथ एक श्वेतसूची स्थापित करना

बहिष्करण के साथ एक छोटे श्वेतसूची का एक उदाहरण नीचे के पास पाया जा सकता है man sudoers:

 pete           HPPA = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

The user pete is allowed to change anyone's password except for root on the HPPA
machines.  Note that this assumes passwd(1) does not take multiple user names
on the command line.

(वास्तव में मैनपेज का यह उदाहरण असुरक्षित है और रूट के पासवर्ड को बदलने के लिए इसका फायदा उठाया जा सकता है! नीचे दिए गए कमेंट्स देखें कि कैसे)।

हम आपके मामले को अनुकूलित करने का प्रयास कर सकते हैं service, स्टाफ समूह को सभी आदेशों की पेशकश करने के लिए, लेकिन उनservice network कमांडों को बाहर करें जो आपकी चिंता करते हैं:

%staff ALL =   /usr/sbin/service *,                            \
             ! /usr/sbin/service *network*,                    \
             ! /usr/sbin/service *NetworkManager*

( ALLउस स्थिति में Host_Alias ​​को संदर्भित करता है, Cmnd_Alias ​​को नहीं - भ्रमित करना यह नहीं है?)

उपयोगकर्ता को चलाने के लिए सक्षम नहीं होगा sudo bashया sudo teeया sudo wgetया sudo /path/to/malicious_script। यदि आप सावधान हैं तो आप अपने उपयोगकर्ताओं के लिए अधिक व्यवस्थापक आदेश श्वेतसूची में रख सकते हैं। बस विशिष्ट हो!

नोट: मैंने उपरोक्त *शब्द networkसे पहले जोड़ा , बस अगर serviceभविष्य में उपकरण में एक हानिरहित झंडा कभी जोड़ा जाता है । आइए कल्पना करें कि --verboseभविष्य में एक ध्वज जोड़ा गया था, तब उपयोगकर्ता निम्नलिखित चला सकेंगे:

$ sudo service --verbose network restart

इसलिए हमें *सेवा नाम से पहले किसी भी झंडे का उपभोग करने की आवश्यकता है । एक नुकसान यह है कि यह अन्य सेवाओं को अवरुद्ध कर सकता है, जिन्हें आप वास्तव में चलाने वाले उपयोगकर्ताओं को पसंद नहीं करते हैं, उदाहरण के लिए एक सेवा को बुलाया safe-networkया network-monitorअस्वीकार भी किया जाएगा।


उपयोगकर्ताओं को समूह अनुमतियों का उपयोग करके एक फ़ाइल संपादित करने दें

नीचे आप का उपयोग कर विभिन्न प्रयास पा सकते हैं rnanoके माध्यम से sudoएक फ़ाइल या फ़ाइलों बताने के लिए उपयोगकर्ताओं को संपादित। लेकिन वास्तव में वे अधिक जटिल और अधिक खतरनाक हैं जितना उन्हें होना चाहिए।

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

### Give steve the ability to edit his nginx config:
$ chgrp steve /etc/nginx/sites-available/steves_dodgy_project
$ chmod g+rw /etc/nginx/sites-available/steves_dodgy_project

### Let all members of the staff group edit the group_website config:
$ chgrp staff /etc/nginx/sites-available/group_website
$ chmod g+rw /etc/nginx/sites-available/group_website

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


उपयोगकर्ताओं को किसी फ़ाइल को संपादित करने दें sudo

इस उत्तर के शेष भाग की जांच हो गई कि sudoआपके उपयोगकर्ताओं को लचीलापन प्रदान करने का प्रयास करते समय आपके कॉन्फ़िगरेशन में छेद छोड़ना कितना आसान है । मैं निम्नलिखित में से कोई भी करने की सलाह नहीं दूंगा!

यदि आप किसी विशिष्ट फ़ाइल को संपादित करने के लिए अपने उपयोगकर्ताओं को एक्सेस देना चाहते हैं, तो आप उपयोग करने का प्रयास कर सकते हैं rnano:

%staff ALL = /bin/rnano /etc/nginx/sites-available/host

rnanoकेवल उन्हें निर्दिष्ट फ़ाइल को संपादित करने देगा। एक दुर्भावनापूर्ण उपयोगकर्ता को एक अलग अपस्टार्ट सेवा (उदाहरण के लिए /etc/init.d/urandom) को संपादित करने से रोकने के लिए , और उस पर एक पंक्ति जोड़ना महत्वपूर्ण है जो चलेगा service network restart

दुर्भाग्य से मुझे rvimपर्याप्त रूप से प्रतिबंधित करने का कोई तरीका नहीं मिला (उपयोगकर्ता अभी भी किसी भी फ़ाइल का उपयोग करके खोल सकता है :e), इसलिए हम इसके साथ फंस गए हैं nano

दुर्भाग्य से उपयोगकर्ताओं को कई फ़ाइलों को संपादित करने की अनुमति देना बहुत कठिन है ...


उपयोगकर्ताओं को कई फ़ाइलों को संपादित करने दें (जिस तरह से इसे और अधिक कठिन होना चाहिए)

1. असुरक्षित दृष्टिकोण

वाइल्डकार्ड से सावधान रहें! यदि आप बहुत अधिक लचीलापन (या किसी भी लचीलेपन) की पेशकश करते हैं, तो इसका फायदा उठाया जा सकता है:

%staff ALL = /bin/rnano /etc/nginx/sites-available/*                # UNSAFE!

इस स्थिति में, एक दुर्भावनापूर्ण उपयोगकर्ता किसी अन्य अपस्टार्ट सेवा स्क्रिप्ट को संपादित करने में सक्षम होगा, और फिर उसे चलाएगा:

$ sudo rnano /etc/nginx/sites-available/../../../any/file/on/the/system

(सूडो वास्तव में आदेश पर रोकथाम .और ..विस्तार करते हैं, लेकिन दुर्भाग्य से तर्कों पर नहीं।)

मैं उम्मीद कर रहा था कि ऐसा कुछ हो सकता है, लेकिन यह अभी भी असुरक्षित है:

%staff ALL = /bin/rnano /etc/nginx/sites-available/[A-Za-z0-9_-]*   # UNSAFE!

चूंकि sudoवर्तमान में केवल ग्लोब पैटर्न प्रदान करता है , जो कि *किसी भी चीज़ से मेल खाएगा - यह एक regexp नहीं है!

(संपादित करें: मैंने विचार किया कि क्या आप अपनी स्थिति में उपरोक्त के साथ दूर हो सकते हैं, क्योंकि नीचे कोई उप-फ़ोल्डर नहीं हैं sites-available। हमने मांग की थी कि फ़ोल्डर के बाद एक चार मिलान किया जाए, और /..एक फ़ाइल नाम के बाद विफल होना चाहिए। हालांकि यह एक नहीं है। व्यावहारिक समाधान, क्योंकि rnanoकई तर्कों को स्वीकार करता है। और वैसे भी सामान्य रूप से यह अभी भी एक फ़ोल्डर पर असुरक्षित होगा जिसमें सबफ़ोल्डर थे!)

यहां तक ​​कि अगर हमारे पास कोई सबफ़ोल्डर नहीं है, और हम किसी भी लाइन को शामिल नहीं करते हैं /../, तो एक *ग्लोब की पेशकश करने वाले नियम का अभी भी शोषण किया जा सकता है, क्योंकि rnanoकई तर्क (उन पर साइकिल चलाना) स्वीकार करते हैं <C-X>, और अंतरिक्ष को *ग्लोब द्वारा खुशी से स्वीकार किया जाता है ।

$ rnano /etc/nginx/sites-available/legal_file /then/any/file/on/the/system

2. लिफाफा धक्का (भी असुरक्षित)

तो क्या होगा यदि हम रिक्त स्थान वाली किसी भी रेखा को अस्वीकार कर दें, या पहुँचने का प्रयास करें /..? तब एक अंतिम व्यावहारिक समाधान यह हो सकता है:

# I tried hard to make this safe, but in the end I failed again.
# Please don't use this unless you are really smart or really stupid.

%staff ALL =   /bin/rnano /etc/nginx/sites-available/*,    \
             ! /bin/rnano */..*,                           \
             ! /bin/rnano /etc/nginx/sites-available/,     \
             ! /bin/rnano */.,                             \
             ! /bin/rnano * *

# CONCLUSION: It is still NOT SAFE if there are any subfolders, due to
# the bug in rnano described below.

हम "के तहत" फ़ोल्डर कुछ भी स्वीकार लेकिन हम भी करने के लिए कोई कॉल को अस्वीकार rnanoकरता है, तो /..या /.या पारित कर रहे हैं, या फ़ोल्डर सीधे लक्षित है, तो। (तकनीकी रूप से /.बहिष्करण /..बहिष्करण को निरर्थक बनाता है , लेकिन मैंने स्पष्टता के लिए दोनों को छोड़ दिया है।)

मुझे फ़ोल्डर मिला और /.बहिष्करण की आवश्यकता थी क्योंकि अन्यथा उपयोगकर्ता फ़ोल्डर को ही लक्षित कर सकता है। अब आप सोच सकते हैं कि rnanoयदि एक फ़ोल्डर में बताया गया है, लेकिन आप गलत होंगे। वास्तव में मेरा संस्करण (2.2.6-1ubuntu1) एक हल्की चेतावनी और एक खाली फ़ाइल के साथ शुरू होता है, फिर <C-X>मुझे किसी भी फ़ाइलनाम को इनपुट करने के लिए कहता है जिसे मैं सहेजना चाहता हूं , एक नया हमला वेक्टर खोलना! अच्छी तरह से कम से कम यह एक मौजूदा फ़ाइल (मैंने किया एक परीक्षण में) को अधिलेखित करने से इनकार कर दिया। वैसे भी, चूंकि सूडो के साथ सबफ़ोल्डर्स को ब्लैकलिस्ट करने का कोई तरीका नहीं है, इसलिए हमें यह निष्कर्ष निकालना चाहिए कि यह दृष्टिकोण फिर से असुरक्षित है। क्षमा करें उपयोगकर्ता!

इस खोज ने मुझे nano'' प्रतिबंधित '' मोड की गहनता पर संदेह किया । वे कहते हैं कि एक श्रृंखला केवल सबसे कमजोर कड़ी के रूप में मजबूत है। मुझे sudoब्लैकलिस्ट-ब्लैक-मैजिक का संयोजन महसूस होने लगा है और rnanoयह डेज़ी की श्रृंखला से अधिक सुरक्षित नहीं हो सकता है।

3. सुरक्षित लेकिन सीमित दृष्टिकोण

ग्लब्स बहुत प्रतिबंधित हैं - वे हमें कई बार एक चरित्र वर्ग से मेल नहीं खाते। आप कई फ़ाइल संपादन पेश कर सकते हैं, यदि आपके सभी फ़ाइलनामों की लंबाई समान है (इस मामले में hostएक अंक के बाद):

%staff ALL = /bin/rnano /etc/nginx/sites-available/host[0-9]       # SAFE

लेकिन यदि आप उपयोगकर्ता को विभिन्न फ़ाइलों को संपादित करने के लिए पहुँच देना चाहते हैं, तो आपको प्रत्येक फ़ाइल को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता हो सकती है:

%staff ALL = /bin/rnano /etc/nginx/sites-available/hothost    \
             /bin/rnano /etc/nginx/sites-available/coldhost   \    # SAFE
             /bin/rnano /etc/nginx/sites-available/wethost    \
             /bin/rnano /etc/nginx/sites-available/steves_dodgy_project

*किसी भी बिंदु परउपयोग करने के लिए परीक्षा न करें । ऊपर के खंड 1. और 2. क्यों देखें! याद रखें: एक छोटी सी पर्ची पूरे सुपरसुअर खाते, और पूरे सिस्टम से समझौता कर सकती है।

4. अपने तर्क परीक्षक को लिखें (सुरक्षा अब आपकी जिम्मेदारी है)

मुझे आशा है कि वे sudoभविष्य में regexp समर्थन जोड़ देंगे ; अगर इसे सही तरीके से इस्तेमाल किया जाए तो यह बहुत सारी समस्याओं को हल कर सकता है। लेकिन हमें तर्कों के गुणों की जांच करने की क्षमता की आवश्यकता हो सकती है (केवल फ़ाइलों, केवल फ़ोल्डर्स या केवल कुछ झंडे की अनुमति देने के लिए)।

लेकिन सुडो में लचीलापन बनाने के लिए एक विकल्प है। उत्तरदायित्व मढ़ना:

%staff ALL = /root/bin/staffedit *

फिर staffeditयह जांचने के लिए कि उपयोगकर्ता द्वारा पारित किए गए तर्क कानूनी हैं या नहीं, यह जांचने के लिए अपनी खुद की स्क्रिप्ट या निष्पादन योग्य लिखें ।


5
इस उत्तर में लंबा समय लगा, लेकिन अंत में मुझे लगता है कि मैं समझता हूं कि सूडो कैसे काम करते हैं। मैंने पूर्व में विभिन्न अवसरों पर ALL=(ALL:ALL) ALLहार मान ली थी, लेकिन शब्दार्थ में बहुत कमी पाई गई, लेकिन मैंने हमेशा यह माना कि कहीं न कहीं यह एक अच्छा तर्क परीक्षक होगा ... मैं गलत था। यह वास्तव में बहुत सीमित है। यहां तक कि पासवर्ड जड़ मानव पेज में की पेशकश बहिष्कार, एक सरल कमांड लाइन तर्क के साथ तोड़ा जा सकता है sudo passwd -q root। वैसे सूडो लेखक अपनी वेबसाइट पर [कुछ विकल्प] (sudo.ws/sudo/other.html) सूची बनाते हैं। मुझे उम्मीद है कि वे भविष्य में regexp समर्थन जोड़ देंगे।
joeytwield

क्या आप rnanoयहाँ अपने विवरण में विशेष रूप से उपयोग करते हैं क्योंकि यह नैनो का एक संस्करण है जिसमें 'सेव' के रूप में फ़ंक्शन की कमी है? मैं कार्यक्रम से परिचित नहीं हूँ।
शादुर

हाँ। यदि हम सुरक्षा के बारे में परवाह करते हैं, तो संपादक को केवल निर्दिष्ट एक फ़ाइल को संपादित करना चाहिए, और एक शेल खोलने में सक्षम नहीं होना चाहिए। जानकारी के लिए, $ man nanoतब/-R<Enter>
joeytwiddle

सुधार: पीट उदाहरण को तोड़ने के लिए, -qबाद में आना चाहिए sudo passwd root -q:। पीट उदाहरण को छोड़कर कठोर किया जा सकता है *root*
joeytwield

sudoeditफ़ाइल संशोधन के साथ सुरक्षित रूप से सक्षम करने के लिए उपयोग करने पर विचार करें sudo
टॉटर

5

सबसे पहले, sudoers फ़ाइल को खोलें sudo visudouser ALL=!/usr/sbin/serviceIIRC को जोड़ने से serviceउपयोगकर्ता के लिए कमांड को हटा दिया जाएगा user

सूत्रों का कहना है: http://nixcraft.com/showthread.php/15132-Sudo-Exclude-Commands-And-Disable-sudo-su-Bash-Shell


यह अन्य सेवाओं को भी चलाना बंद कर देगा और मुझे वह नहीं चाहिए। जवाब के लिए धन्यवाद। :)
शेखर

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

2
हाँ, लेकिन फिर भी, जैसा कि दूसरों ने कहा है, आपको इससे बहुत सावधान रहना होगा। एक्सेस हासिल करने के कई तरीके हैं। कोई भी आदेश जो एक शेल वगैरह को स्पॉन कर सकता है। इसका तरीका यह पता लगाना आसान है कि उन्हें उन सभी आज्ञाओं को हटाने की क्या ज़रूरत है, जो उन्हें "निषिद्ध" वाले सभी को बाहर करने के बजाय अनुमति देती हैं।
बोन्सी स्कॉट

3
कई परिदृश्यों में श्वेतसूची असंदिग्ध है। हो सकता है कि असली लक्ष्य उन्हें कुछ करने से रोकना न हो , बल्कि उन्हें गलती से भी कुछ बुरा करने से रोकना है, अन्यथा उन्हें रोकें नहीं । इन मामलों में ब्लैकलिस्ट अच्छे हैं। आप उन तरीकों को ब्लैक लिस्ट करते हैं, जो एक उचित उपयोगकर्ता कार्य के बारे में बताएंगे। लेकिन sudo के माध्यम से ब्लैकलिस्ट करना पर्याप्त नहीं हो सकता है - लोग 'sudo bash' का उपयोग और कर सकते हैं। एक दृष्टिकोण 'सेवा' कमांड को लपेटना होगा, और जिन मामलों में आप उन्हें उपयोग नहीं करना चाहते हैं, उन्हें सूचित करें। लेकिन आप कभी भी एक श्वेत सूची में सभी अच्छे कार्यों को सूचीबद्ध नहीं करेंगे, और न ही सभी बुरे लोगों को एक ब्लैकलिस्ट में।
बॉब कर्न्स

1
मैं आपसे सहमत हूं बॉब। लचीलेपन की अनुमति देने के लिए, पूर्ण पहुंच की अनुमति के बिना, आपको अक्सर अपने स्वयं के समाधान को रोल करने की आवश्यकता होगी, एक सहायक स्क्रिप्ट के रूप में, और केवल उस स्क्रिप्ट को श्वेतसूची में। sudo श्वेतसूची वे कर सकते हैं जिनकी आपको आवश्यकता है, लेकिन अक्सर वे या तो बहुत सीमित होंगे, या शोषण करने में बहुत आसान होंगे।
joeytwield

5

मैंने इसका हल ढूंढ लिया है।

मैंने टर्मिनल खोला है और रूट यूजर में su -तब बदलाव किया है जब मैंने visudoसंपादित करने के लिए टाइप किया है।

फिर अंत में मैंने जैसी लाइनें लिखी हैं

user ALL=!/etc/init.d/NetworkManager restart
user ALL=!/etc/init.d/network restart

फिर मैंने सहेजा और बंद किया और पुनः आरंभ किया।

अब यदि मैं टाइप कर रहा हूं service network restartया service NetworkManager restartफिर इसकी अनुमति नहीं दे रहा हूं और जैसी त्रुटि दे रहा हूं

Sorry user is not allowed to execute '/sbin/service NetowkrManager restart' as root on localhost.localdomain

और इसी तरह service network restartकमांड के लिए भी।


12
यह अनुभवहीन और असभ्य उपयोगकर्ताओं के लिए काम करेगा, लेकिन सूडो प्रतिबंधों को दरकिनार करना आसान है, (उदाहरण के लिए sudo cp -p /etc/init.d/network /etc/init.d/network-not-in-sudoऔर फिर sudo /etc/init.d/network-not-in-sudo restart)। यही कारण है कि यह सूडोर्स फ़ाइल में अपवर्जन के बजाय समावेश बनाने के लिए अधिक सुरक्षित है, उदाहरण के लिए वे कौन सी सेवाओं के साथ बातचीत करने की अनुमति देते हैं।
थॉमस

सब कुछ जो 'सर्विस नेटवर्क रिस्टार्ट' करता है, आप अन्य कमांड जैसे नेटवर्क init.d स्क्रिप्ट में कर सकते हैं। मैं भी उन्हें यहाँ सूचीबद्ध करने का प्रयास नहीं करूँगा। लेकिन अगर आप चाहते हैं, उदाहरण के लिए, वास्तव में इंटरफ़ेस राज्य के संशोधनों को रोकने के लिए, तो एक SELinux नीति मुझे जाने का रास्ता प्रतीत होती है। यह एक जटिल विषय है, लेकिन जब एक श्वेतसूची बहुत अधिक प्रतिबंधात्मक या बोझ है, और एक ब्लैकलिस्ट अपर्याप्त है, तो यह संभवतः आपका सबसे अच्छा विकल्प है। इसे कर्नेल में लागू किया गया है, और आपको नेटवर्क इंटरफेस (और अन्य संसाधनों) तक पहुंच को प्रतिबंधित करने की अनुमति देता है, यहां तक ​​कि उपयोगकर्ताओं को sudo'd करने के लिए भी।
बॉब कर्न्स

यदि यह SELinux के साथ संभव है तो यह अधिक प्रसन्न होगा। @BusKerns धन्यवाद। मैं उस तरह से कोशिश करूंगा।
शेखर

3

इसका वास्तविक उत्तर यह है कि आप वास्तव में इसे रोक नहीं सकते। हो सकता है कि आप किसी अनजाने व्यक्ति को गलती से उस कमांड को अन्य उत्तरों में वर्णित विधियों के माध्यम से चलाने से रोक सकते हैं, लेकिन अगर कोई वास्तव में इसे चलाना चाहता है और सूडोर्स सूची में है, तो वे इसे चला सकते हैं। उदाहरण के लिए, वे निम्नलिखित कार्य कर सकते हैं:

joe@box:~$ sudo bash root@box:~# service network restart

या एक और मज़ेदार आदेश जो वे sudoers फ़ाइल में आपके प्रतिबंधों को कम करने के लिए उपयोग कर सकते हैं:

sudo visudo

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


हाँ। उन आदेशों से बचना चाहिए जो एक शेल को भीतर से खोल सकते हैं।
बोन्सी स्कॉट

1
समस्या यह है, यह वह कमांड नहीं है जिसे आप संरक्षित करना चाहते हैं, लेकिन कर्नेल ऑब्जेक्ट्स की स्थिति, जैसे रूटिंग टेबल, इंटरफेस, आदि - कोई भी आदेश (या सिस्टम कॉल) का उपयोग नहीं किया जाता है। और आप इसे कुछ लोगों से बचाना चाहते हैं, लेकिन सभी उपयोगकर्ताओं को नहीं। SELinux को इस प्रकार के परिदृश्य के चारों ओर डिज़ाइन किया गया है। लेकिन सबसे पहले, मैं इस बात की समीक्षा करना शुरू करूंगा कि इन सभी उपयोगकर्ताओं की सूडो पहुंच क्यों है। यदि उन्हें केवल कुछ विशिष्ट चीजें करने की आवश्यकता होती है, तो sudoers में श्वेतसूची संचालन आप सभी की आवश्यकता हो सकती है।
बॉब कर्न्स

2

सैंडबॉक्स वाले उपयोगकर्ताओं को प्रतिबंधित करने के लिए फायरजेल का उपयोग करें।

https://github.com/netblue30/firejail/

फायरजेल को शेल के बजाय / etc / passwd में सेट करें, हर उस उपयोगकर्ता के लिए जिसे आप प्रतिबंधित करना चाहते हैं। इसका उपयोग करना बहुत आसान है और इसका अच्छा प्रलेखन है।

उदाहरण:

user:x:1000:1000:user:/home/user:/usr/bin/firejail
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.