क्या किसी भी उपयोगकर्ता को ls, rm और अन्य सिस्टम कमांड जैसे कमांड का उपयोग न करने के लिए रोकना संभव है जो सिस्टम को नुकसान पहुंचा सकता है। लेकिन उपयोगकर्ताओं को शेल कार्यक्रमों को निष्पादित करने में सक्षम होना चाहिए।
lsआदेश नहीं!
क्या किसी भी उपयोगकर्ता को ls, rm और अन्य सिस्टम कमांड जैसे कमांड का उपयोग न करने के लिए रोकना संभव है जो सिस्टम को नुकसान पहुंचा सकता है। लेकिन उपयोगकर्ताओं को शेल कार्यक्रमों को निष्पादित करने में सक्षम होना चाहिए।
lsआदेश नहीं!
जवाबों:
आपका प्रश्न यह होना चाहिए:
मुझे अपने उपयोगकर्ताओं पर भरोसा नहीं है। गूंगा लोग इंटरनेट पर कुछ देखते हैं और उसे समझे बिना यह कोशिश करते हैं कि वह क्या करता है। कुटिल लोगों को चारों ओर सूँघना और अन्य लोगों की फाइलों को देखना और उनके विचारों को चुराना पसंद है। और आलसी, मुझे आलसी लोगों पर शुरू मत करो।
मैं अपने उपयोगकर्ताओं से अपने सिस्टम और अपने उपयोगकर्ताओं की सुरक्षा कैसे करूं?
सबसे पहले, यूनिक्स में एक बहुत व्यापक फाइल सिस्टम अनुमति प्रणाली है। यह यूनिक्स फाइलसिस्टम अनुमतियों पर एक सभ्य ट्यूटोरियल लगता है । इसका सार यह है कि निर्देशिकाओं को ऐसे सेट किया जा सकता है कि कोई उपयोगकर्ता किसी निर्देशिका में जा सकता है और उस निर्देशिका से प्रोग्राम चला सकता है, लेकिन उस निर्देशिका की सामग्री को नहीं देख सकता है। यदि आप ऐसा करते हैं, उदाहरण के लिए, / घर पर, यदि उपयोगकर्ता ls / home चलाता है, तो उन्हें अनुमति अस्वीकृत त्रुटि मिलती है।
यदि आप वास्तव में अपने उपयोगकर्ताओं से डरते हैं और उन्हें एक सुपरमैक्स प्रकार के प्रतिबंधित वातावरण में चिपकाना चाहते हैं, तो फ्रीबर्ड की जेल या सोलारिस ज़ोन जैसे कुछ का उपयोग करें - प्रत्येक उपयोगकर्ता को अपने स्वयं के दर्जी वातावरण मिलता है। अतिरिक्त बिंदुओं के लिए ZFS का उपयोग करें ताकि आप पर्यावरण का एक स्नैपशॉट ले सकें जब वे लॉग इन करें यदि वे अपनी फ़ाइलों को हटा दें तो आप उन्हें केवल स्नैपशॉट से बाहर निकाल सकते हैं।
तीन चीजें हैं जो पूरी तरह से करने के लिए जगह की जरूरत है जो आप के लिए पूछ रहे हैं:
बेल्ट, सस्पेंडर्स और अच्छे उपाय के लिए स्टेपल-गन। वहां गलत हो जाना मुश्किल है।
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 प्रोफ़ाइल का निर्माण कर रहा है।
मेरी राय में, आपको केवल चरण 2 और 3 की आवश्यकता है, क्योंकि संयोजन में वे दोनों सावधानीपूर्वक निर्मित बॉक्स के बाहर हानिकारक कुछ भी करने की क्षमता को रोकते हैं जो आप उन दोनों चरणों में स्थापित करते हैं।
ठीक है, आप उपयोगकर्ता के शेल को एक प्रोग्राम में सेट कर सकते हैं जो आपने लिखा है कि केवल उन्हें कुछ शेल स्क्रिप्ट चलाने देता है।
बेशक यह केवल कार्यक्रम और शेल स्क्रिप्ट के रूप में सुरक्षित होगा; व्यवहार में, इस तरह का प्रतिबंधित शेल आमतौर पर एक स्मार्ट हमलावर के खिलाफ सुरक्षित नहीं है।
यदि आप चाहते हैं कि उपयोगकर्ता केवल कुछ स्क्रिप्ट / बायनेरिज़ को निष्पादित करने में सक्षम हो, तो आप एक प्रतिबंधित शेल का उपयोग कर सकते हैं । यह (जैसा कि विकिपीडिया लेख में उल्लेख किया गया है) पूरी तरह से सुरक्षित नहीं है, लेकिन अगर आप गारंटी दे सकते हैं कि कोई भी एप्लिकेशन चलाने की अनुमति नहीं देता है तो वह एक नए शेल को निष्पादित करने में सक्षम है तो यह एक अच्छा विकल्प है।
उपयोगकर्ताओं को प्रतिबंधित शेल सेट करने के लिए, उपयोगकर्ता शेल के रूप में/bin/rbash बाइनरी का नाम *** नाम *) होने पर अधिकांश शैलें प्रतिबंधित मोड में प्रवेश करती हैं । फिर, ** bashrc (या समतुल्य) को संपादित करें और $PATHएक निर्देशिका में सेट करें जहां सभी अनुमत बायनेरिज़ / स्क्रिप्ट संग्रहीत हैं।
हां, यह संभव है, लेकिन व्यवहार में यह बहुत काम और योजना बना लेगा। आप स्क्रिप्ट बना सकते हैं और उन्हें एक विशेषाधिकार प्राप्त उपयोग के रूप में चला सकते हैं, फिर प्रश्न में उपयोगकर्ता से सभी विशेषाधिकार हटा दें। या, आप उपयोगकर्ता के शेल को अपने स्वयं के कुछ बनाने के लिए सेट कर सकते हैं जो उन्हें केवल वही करते हैं जो आप स्पष्ट रूप से अनुमति देते हैं।
हालांकि, लिनक्स में मानक अनुमतियाँ सामान्य उपयोगकर्ता के लिए "सिस्टम को नुकसान पहुंचाने" के लिए लगभग असंभव बना देती हैं। आप किस तरह के नुकसान को रोकने की कोशिश कर रहे हैं? यह उपयोगकर्ताओं को सॉफ़्टवेयर को इंस्टॉल करने या अपने होम डायरेक्टरी के बाहर प्रोग्राम चलाने से रोकने के लिए तुच्छ है, और आप सिस्टम को आगे भी लॉक करने के लिए चेरोट का उपयोग कर सकते हैं।
आप [lshell] [1] (सीमित शेल) आज़माना चाह सकते हैं।
lshell Python में एक शेल कोडेड है, जो आपको उपयोगकर्ता के वातावरण को आदेशों के सीमित सेट तक सीमित रखने देता है, SSH (जैसे SCP, SFTP, rsync, आदि) पर किसी भी कमांड को सक्षम / अक्षम करने के लिए चुनता है, उपयोगकर्ता के आदेशों को लॉग इन करता है, प्रतिबंध लागू करता है, और अधिक।
[१]: http://lshell.agantoos.org/Overview lshell
जिस तरह से मैं आमतौर पर इस तरह के प्रतिबंधों को लागू करता हूं, उसके लिए आवश्यक है कि कई शर्तें पूरी हों, अन्यथा प्रतिबंध को आसानी से रोका जा सकता है:
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चर)।
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) या कोई भी नहीं।