शेल कार्यक्रमों को निष्पादित करने की अनुमति देने वाले उपयोगकर्ताओं के शेल को कैसे प्रतिबंधित करें


9

क्या किसी भी उपयोगकर्ता को ls, rm और अन्य सिस्टम कमांड जैसे कमांड का उपयोग न करने के लिए रोकना संभव है जो सिस्टम को नुकसान पहुंचा सकता है। लेकिन उपयोगकर्ताओं को शेल कार्यक्रमों को निष्पादित करने में सक्षम होना चाहिए।


तुमने ऐसा क्यों करना चाहोगे? क्या आप एक कार्यक्रम नहीं लिख सकते हैं जिसके साथ वे बातचीत करते हैं?
जो

उन्हें किस तरह के शैल कार्यक्रम निष्पादित करने चाहिए?
माइक

क्या आपका मतलब है "अपनी खुद की रचना के शैल कार्यक्रम चलाएं", जिसमें स्पष्ट सुरक्षा समस्या है ..
pjc50

13
ओह, नहीं, खतरनाक lsआदेश नहीं!
Womble

जवाबों:


11

आपका प्रश्न यह होना चाहिए:

मुझे अपने उपयोगकर्ताओं पर भरोसा नहीं है। गूंगा लोग इंटरनेट पर कुछ देखते हैं और उसे समझे बिना यह कोशिश करते हैं कि वह क्या करता है। कुटिल लोगों को चारों ओर सूँघना और अन्य लोगों की फाइलों को देखना और उनके विचारों को चुराना पसंद है। और आलसी, मुझे आलसी लोगों पर शुरू मत करो।

मैं अपने उपयोगकर्ताओं से अपने सिस्टम और अपने उपयोगकर्ताओं की सुरक्षा कैसे करूं?


सबसे पहले, यूनिक्स में एक बहुत व्यापक फाइल सिस्टम अनुमति प्रणाली है। यह यूनिक्स फाइलसिस्टम अनुमतियों पर एक सभ्य ट्यूटोरियल लगता है । इसका सार यह है कि निर्देशिकाओं को ऐसे सेट किया जा सकता है कि कोई उपयोगकर्ता किसी निर्देशिका में जा सकता है और उस निर्देशिका से प्रोग्राम चला सकता है, लेकिन उस निर्देशिका की सामग्री को नहीं देख सकता है। यदि आप ऐसा करते हैं, उदाहरण के लिए, / घर पर, यदि उपयोगकर्ता ls / home चलाता है, तो उन्हें अनुमति अस्वीकृत त्रुटि मिलती है।

यदि आप वास्तव में अपने उपयोगकर्ताओं से डरते हैं और उन्हें एक सुपरमैक्स प्रकार के प्रतिबंधित वातावरण में चिपकाना चाहते हैं, तो फ्रीबर्ड की जेल या सोलारिस ज़ोन जैसे कुछ का उपयोग करें - प्रत्येक उपयोगकर्ता को अपने स्वयं के दर्जी वातावरण मिलता है। अतिरिक्त बिंदुओं के लिए ZFS का उपयोग करें ताकि आप पर्यावरण का एक स्नैपशॉट ले सकें जब वे लॉग इन करें यदि वे अपनी फ़ाइलों को हटा दें तो आप उन्हें केवल स्नैपशॉट से बाहर निकाल सकते हैं।


9

तीन चीजें हैं जो पूरी तरह से करने के लिए जगह की जरूरत है जो आप के लिए पूछ रहे हैं:

  1. एक कस्टम शेल जिसमें आपकी रुचि के आदेशों का अभाव है । यह प्राप्त करने के लिए एक कठिन बात है, लेकिन अगर आप वास्तव में वास्तव में उपयोगकर्ताओं को कुछ शेल प्रिमिटिव तक पहुंच नहीं चाहते हैं, तो उन्हें हटाने का एकमात्र तरीका है।
  2. फ़ाइल अनुमतियों को सही ढंग से सेट करें । उपयोगकर्ताओं को सिस्टम को नुकसान नहीं पहुंचाना चाहते हैं? अनुमतियाँ सेट करें ताकि वे सही उपकरण होने पर भी सिस्टम को नुकसान न पहुंचा सकें। इन तीन चरणों में से, यह सबसे आसान चरण है।
  3. AppArmor की तरह एक अनिवार्य एक्सेस कंट्रोल टेक्नोलॉय का उपयोग करें । AppArmor और SELinux जैसे MAC कर्नेल में अनुमतियाँ एम्बेड करते हैं। ये उपयोगकर्ताओं को सही उपकरण चलाने से रोकते हैं, भले ही वे उन्हें कहीं भी पाते हों (और फ़ाइल अनुमति की तरह, उन्हें प्रतिबंधित बॉक्स के बाहर उपयोग करने से रोकते हैं)।

बेल्ट, सस्पेंडर्स और अच्छे उपाय के लिए स्टेपल-गन। वहां गलत हो जाना मुश्किल है।

AppArmor दिलचस्प है क्योंकि MAC एक विशिष्ट निष्पादन योग्य के लिए अपने सभी बच्चों को विरासत में मिला है। उपयोगकर्ता के लॉगिन को /bin/bash-bobसेट करें, उस विशिष्ट द्विआधारी अधिकार के लिए AppArmor प्रोफ़ाइल सेट करें, और जिस तरह से वे उस अनुमति जेल से बाहर निकल रहे हैं वह कर्नेल कारनामों के माध्यम से है। यदि कुछ आलसी स्थापित स्क्रिप्ट /var/opt/vendor/tmpकुछ मूर्खतापूर्ण कारणों से वैश्विक- लेखन योग्य रह जाती है , तो /bin/bash-bobउनके शेल के रूप में उपयोग करने वाला उपयोगकर्ता वहां लिखने में सक्षम नहीं होगा । केवल अपने होम डायरेक्टरी को लिखने की अनुमति देने के लिए bash-bob प्रोफ़ाइल सेट करें /tmp, और ऐसी अनुमति गलतियों का लाभ नहीं उठाया जा सकता है। यहां तक ​​कि अगर वे किसी भी तरह से रूट पासवर्ड पाते हैं, तब तक के लिए AppArmor प्रोफाइल तब /bin/bash-bobभी लागू होगा, जब तक वे suऊपर उठते हैं suऔर जिस bashप्रक्रिया से यह पैदा होता है, वे बच्चे हैं /bin/bash-bob

कठिन हिस्सा AppArmor प्रोफ़ाइल का निर्माण कर रहा है।

  1. / Bin / bash-bob के लिए एक AppArmor प्रोफाइल बनाएं और उसे ऑडिट मोड में सेट करें
  2. बॉब का लॉगिन-शेल / बिन / बैश-बॉब सेट करें
  3. बॉब के रूप में लॉगिन करें। सब कुछ आप बॉब करना चाहते हैं करने में सक्षम हो।
  4. AppArmor प्रोफाइल (SUSE के पास इसके लिए उपकरण हैं, अन्य लिनक्स डिस्ट्रो के बारे में निश्चित नहीं है) बनाने के लिए ऑडिटॉगल का उपयोग करें। यह राक्षसी रूप से थकाऊ है, लेकिन अगर आपको सुरक्षा के इस स्तर की आवश्यकता है, तो होने की जरूरत है।
    1. आप ऐसा कर रहे हैं:
      • अधिकांश सिस्टम लाइब्रेरी में रीड एक्सेस की स्वीकृति
      • चयनित कुछ अनुमत सिस्टम कमांड के अधिकारों को पढ़ने और निष्पादित करने की स्वीकृति देना
      • अस्थायी स्थानों तक लिखने की अनुमति
      • जरूरत पड़ने पर सॉकेट निर्माण को मंजूरी
  5. लागू करने के लिए नीति निर्धारित करें।
  6. बॉब के रूप में लॉग इन करें, चीजें करें।
  7. समायोजन करें।

मेरी राय में, आपको केवल चरण 2 और 3 की आवश्यकता है, क्योंकि संयोजन में वे दोनों सावधानीपूर्वक निर्मित बॉक्स के बाहर हानिकारक कुछ भी करने की क्षमता को रोकते हैं जो आप उन दोनों चरणों में स्थापित करते हैं।


4

ठीक है, आप उपयोगकर्ता के शेल को एक प्रोग्राम में सेट कर सकते हैं जो आपने लिखा है कि केवल उन्हें कुछ शेल स्क्रिप्ट चलाने देता है।

बेशक यह केवल कार्यक्रम और शेल स्क्रिप्ट के रूप में सुरक्षित होगा; व्यवहार में, इस तरह का प्रतिबंधित शेल आमतौर पर एक स्मार्ट हमलावर के खिलाफ सुरक्षित नहीं है।


3

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


2

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

उपयोगकर्ताओं को प्रतिबंधित शेल सेट करने के लिए, उपयोगकर्ता शेल के रूप में/bin/rbash बाइनरी का नाम *** नाम *) होने पर अधिकांश शैलें प्रतिबंधित मोड में प्रवेश करती हैं फिर, ** bashrc (या समतुल्य) को संपादित करें और $PATHएक निर्देशिका में सेट करें जहां सभी अनुमत बायनेरिज़ / स्क्रिप्ट संग्रहीत हैं।


1

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

हालांकि, लिनक्स में मानक अनुमतियाँ सामान्य उपयोगकर्ता के लिए "सिस्टम को नुकसान पहुंचाने" के लिए लगभग असंभव बना देती हैं। आप किस तरह के नुकसान को रोकने की कोशिश कर रहे हैं? यह उपयोगकर्ताओं को सॉफ़्टवेयर को इंस्टॉल करने या अपने होम डायरेक्टरी के बाहर प्रोग्राम चलाने से रोकने के लिए तुच्छ है, और आप सिस्टम को आगे भी लॉक करने के लिए चेरोट का उपयोग कर सकते हैं।


मैं rm -rf / bin, ls / home / *, rm -rf / usr / bin, ls / ……………… जैसे संभावित आदेशों को रोकने की कोशिश कर रहा हूं। .....

2
आप मानक linux फ़ाइल अनुमतियों का उपयोग करने वालों को रोक सकते हैं ...
ChristopheD

1

आप [lshell] [1] (सीमित शेल) आज़माना चाह सकते हैं।

lshell Python में एक शेल कोडेड है, जो आपको उपयोगकर्ता के वातावरण को आदेशों के सीमित सेट तक सीमित रखने देता है, SSH (जैसे SCP, SFTP, rsync, आदि) पर किसी भी कमांड को सक्षम / अक्षम करने के लिए चुनता है, उपयोगकर्ता के आदेशों को लॉग इन करता है, प्रतिबंध लागू करता है, और अधिक।

[१]: http://lshell.agantoos.org/Overview lshell


1

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

  • उपयोगकर्ता wheelसमूह से संबंधित नहीं है , केवल एक ही उपयोग करने के लिए अधिकृत है su(PAM के माध्यम से लागू)।
  • उपयोगकर्ता को एक निजी के लिए केवल पढ़ने के लिए इंगित करने के साथ ठीक से सुरक्षित दिया गया है , इस निर्देशिका में सरल उपयोगिताओं के लिंक हैं:rbashPATH~/bin~/bin/

    $ ll ~/bin
    total 0
    lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
    lrwxrwxrwx. 1 root dawud  7 Sep 17 08:58 df -> /bin/df*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
    lrwxrwxrwx. 1 root dawud  8 Sep 17 08:58 env -> /bin/env*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
    lrwxrwxrwx. 1 root dawud  9 Sep 17 08:58 grep -> /bin/grep*
    lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
    lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
    lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
    lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
    
  • उपयोगकर्ता एक प्रतिबंधित, केवल पढ़ने के लिए वातावरण दिया जाता है (जैसे सामान के बारे में सोच LESSSECURE, TMOUT, HISTFILEचर)।

  • उपयोगकर्ता को SELinux उपयोगकर्ता के लिए मैप किया जाता है staff_uऔर उसे अन्य उपयोगकर्ताओं के रूप में कमांड निष्पादित करने के अधिकार दिए जाते हैं sudo
  • उपयोगकर्ता /home, /tmpऔर संभवत : के /var/tmpमाध्यम से बहुसंख्या में हैं /etc/security/namespace.conf:

    /tmp       /tmp/.inst/tmp.inst-$USER-     tmpdir:create   root
    /var/tmp   /tmp/.inst/var-tmp.inst-$USER- tmpdir:create   root
    $HOME      $HOME/$USER.inst/              tmpdir:create   root
    

    इसके अलावा, /etc/security/namespace.initउपयोगकर्ता के लिए आसानी से और स्वामित्व में सभी कंकाल फाइलें बनाता है root

इस तरह से आप चुन सकते हैं कि क्या $USERवह अपनी ओर से किसी भी कमांड को निष्पादित कर सकता है (निजी ~/binनिर्देशिका में एक लिंक के माध्यम से /etc/skel, ऊपर बताए अनुसार, के रूप में प्रावधान किया गया है), अन्य उपयोगकर्ता (के माध्यम से sudo) या कोई भी नहीं।


0

हां, बस इन कमांड पर अनुमतियां बदल दें।

आपके पास शेल कमांड लिखकर बेहतर लड़ाई का मौका हो सकता है जो आपकी आवश्यकताओं के अनुसार व्यवहार करता है।

लिनक्स पर सामान्य उपयोगकर्ताओं के लिए डिफ़ॉल्ट अनुमतियों के लिए क्या उपयुक्त नहीं है?

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