क्या / usr / sbin / nologin एक लॉगिन शेल के रूप में एक सुरक्षा उद्देश्य है?


76

अपनी /etc/passwdफ़ाइल में, मैं देख सकता हूं कि www-dataApache द्वारा उपयोग किए गए उपयोगकर्ता, साथ ही साथ सभी प्रकार के सिस्टम उपयोगकर्ता, उनके लॉगिन शेल में /usr/sbin/nologinया तो हैं /bin/false। उदाहरण के लिए, यहां लाइनों का चयन है:

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
games:x:5:60:games:/usr/games:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
syslog:x:101:104::/home/syslog:/bin/false
whoopsie:x:109:116::/nonexistent:/bin/false
mark:x:1000:1000:mark,,,:/home/mark:/bin/bash

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

mark@lunchbox:~$ sudo su www-data
This account is currently not available.
mark@lunchbox:~$ sudo su syslog
mark@lunchbox:~$ 

बेशक, यह बहुत असुविधा नहीं है, क्योंकि मैं अभी भी इस तरह से एक विधि के माध्यम से उनके लिए एक खोल लॉन्च कर सकता हूं:

mark@lunchbox:~$ sudo -u www-data /bin/bash
www-data@lunchbox:~$ 

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

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

- https://serverfault.com/a/559315/147556

उपयोगकर्ता www-data के लिए शेल / usr / sbin / nologin पर सेट है, और यह एक बहुत अच्छे कारण के लिए सेट है।

- https://askubuntu.com/a/486661/119754

[सिस्टम खाते] सुरक्षा छेद हो सकते हैं , खासकर यदि उनके पास एक शेल सक्षम है:

  • खराब

    bin:x:1:1:bin:/bin:/bin/sh
  • अच्छा

    bin:x:1:1:bin:/bin:/sbin/nologin

- https://unix.stackexchange.com/a/78996/29001

सुरक्षा कारणों से मैंने टॉमकैट सर्वर चलाने के लिए कोई लॉगिन शेल नहीं बनाया है:

# groupadd tomcat
# useradd -g tomcat -s /usr/sbin/nologin -m -d /home/tomcat tomcat

- http://www.puschitz.com/InstallingTomcat.html

हालांकि ये पोस्ट सर्वसम्मत समझौते में हैं कि सिस्टम उपयोगकर्ताओं को वास्तविक लॉगिन गोले नहीं देना सुरक्षा के लिए अच्छा है, उनमें से एक भी इस दावे को सही नहीं ठहराता है, और मैं कहीं भी इसका स्पष्टीकरण नहीं पा सकता हूं।

इन उपयोगकर्ताओं को वास्तविक लॉगिन गोले न देकर हम खुद को बचाने के लिए क्या हमला कर रहे हैं?


5
यह भी देखें कि क्या है / sbin / nologin और / bin / false
Gilles

जवाबों:


51

यदि आप nologinमैन पेज पर एक नज़र डालेंगे तो आपको निम्नलिखित विवरण दिखाई देगा।

अंश

nologin एक संदेश प्रदर्शित करता है कि कोई खाता उपलब्ध नहीं है और गैर-शून्य से बाहर निकलता है। यह एक खाते के लिए प्रवेश की अनुमति से इनकार करने के लिए एक प्रतिस्थापन खोल क्षेत्र के रूप में करना है।

यदि फ़ाइल /etc/nologin.txtमौजूद है, nologinतो डिफ़ॉल्ट संदेश के बजाय उपयोगकर्ता को इसकी सामग्री प्रदर्शित करता है।

द्वारा दिया गया निकास कोड nologinहमेशा 1 होता है।

तो इसका वास्तविक आशय nologinसिर्फ इतना है कि जब कोई उपयोगकर्ता किसी ऐसे खाते से लॉगिन करने का प्रयास करता है जो इसका उपयोग करता /etc/passwdहै, ताकि वे एक उपयोगकर्ता के अनुकूल संदेश के साथ प्रस्तुत हों, और यह कि कोई भी स्क्रिप्ट / आदेश जो उपयोग करने का प्रयास करता है यह लॉगिन 1 का निकास कोड प्राप्त करता है।

सुरक्षा

सुरक्षा के संबंध में, आप आमतौर पर /sbin/nologinया तो या कभी-कभी /bin/false, उस क्षेत्र की अन्य चीजों के बीच देखेंगे । वे दोनों एक ही उद्देश्य से काम करते हैं, लेकिन /sbin/nologinशायद पसंदीदा तरीका है। किसी भी मामले में वे इस विशेष उपयोगकर्ता खाते के रूप में शेल तक सीधे पहुंच सीमित कर रहे हैं।

सुरक्षा के संबंध में इसे मूल्यवान क्यों माना जाता है?

"क्यों" पूरी तरह से वर्णन करना कठिन है, लेकिन इस तरीके से किसी उपयोगकर्ता के खाते को सीमित करने में मूल्य यह है कि यह loginआवेदन के माध्यम से प्रत्यक्ष पहुंच प्रदान करता है जब आप उक्त उपयोगकर्ता खाते का उपयोग करने का प्रयास करते हैं।

का उपयोग करते हुए या तो nologinया /bin/falseपूरा करता है। आपके सिस्टम की हमले की सतह को सीमित करना सुरक्षा दुनिया में एक सामान्य तकनीक है, चाहे वह विशिष्ट बंदरगाहों पर सेवाओं को अक्षम करना हो, या किसी के सिस्टम पर लॉगिन की प्रकृति को सीमित करना हो।

अभी भी उपयोग करने के लिए अन्य युक्तियां हैं nologin। उदाहरण के लिए, scpअब उस उपयोगकर्ता खाते के साथ काम नहीं करेगा जो वास्तविक शेल को नामित नहीं करता है, जैसा कि इस सर्वरफॉल्ट क्यू एंड ए शीर्षक में वर्णित है: / sbin / nologin और / bin / false के बीच क्या अंतर है?


They both serve the same purpose, but /sbin/nologin is probably the preferred method.सुरक्षा दृष्टिकोण से, `sbin / nologin`` पसंदीदा तरीका नहीं है; यह समय बर्बाद करता है और एक प्रतिक्रिया प्रदान करता है। यद्यपि न तो विशेष रूप से अच्छी सुरक्षा प्रदान करते हैं; वे रक्षा में गहराई से उपाय कर रहे हैं, लेकिन वे वास्तव में किसी को दिए गए उपयोगकर्ता के रूप में कमांड चलाने से नहीं रोकते हैं।
पार्थियन ने 19

4
@Parthian समय और चक्रों को एक ही हार्डकोड स्ट्रिंग को प्रतिध्वनित करने की आवश्यकता होती है, जो कुछ भी ओएस के लिए जो भी काम कर रहा है उसके सापेक्ष उपयोगकर्ता के लिए निष्पादित करने के लिए क्या खोलना है, सेवा से इनकार करने वाले किसी भी व्यक्ति के लिए महत्वपूर्ण महत्व के होने की संभावना नहीं है। हमला। स्लम सुझाव दे रहा nologinहै कि यूएक्स कारणों के लिए पसंदीदा तरीका है, सुरक्षा वाले नहीं - कर रहे हैं sudo su someuserऔर कुछ भी नहीं हो रहा है क्योंकि उनका लॉगिन शेल falseभ्रामक है। इसके अलावा, इन दोनों को करना कुछ परिस्थितियों, यहाँ जवाब में वर्णित में उसे किसी उपयोगकर्ता के रूप में एक आदेश चलाकर से किसी को रोकने।
मार्क अमेरी

28

निश्चित रूप से यह एक सुरक्षा उद्देश्य को पूरा करता है। उदाहरण के लिए, एक सिस्टम उपयोगकर्ता के लिए नीचे दिए गए बग को देखें, जिनके पास एक शेल था।

मेरे डेबिन सर्वर को डेमन खाते के पास एक वैध लॉगिन शेल होने और इंटरनेट एक्सेस के लिए सांबा खुला होने के कारण समझौता किया गया था। ब्रेक को डेमॉन खाते के लिए सांबा के माध्यम से एक पासवर्ड सेट करके और ssh के माध्यम से लॉगिंग द्वारा बनाया गया था। कुछ स्थानीय रूट शोषण के बाद मेरे सर्वर का उपयोग किया गया था।

मैं आपको गिल्स के इस शानदार जवाब को पढ़ने की सलाह दूंगा जहां उन्होंने कुछ बग्स के लिंक भी दिए हैं।

इस मुद्दे पर डेबियन (274229, 330882, 581899) में बग दर्ज किए गए हैं, वर्तमान में "इच्छा सूची" के रूप में खुले और वर्गीकृत हैं। मैं इस बात से सहमत हूं कि ये बग हैं और सिस्टम उपयोगकर्ताओं को अपने शेल के रूप में / बिन / झूठ होना चाहिए जब तक कि यह अन्यथा करने के लिए आवश्यक न प्रतीत हो।


... मैं नहीं देखता कि वास्तव में उपयोगकर्ता के लिए घोषित शेल पर विशेष रूप से निर्भर करता है। यदि हमलावर केवल भाग गया ssh user@site, और वह काम किया, तो वे प्रयास करना जारी नहीं रखेंगे ssh user@site /bin/bash, लेकिन मुझे पूरा यकीन है कि घोषित शेल की परवाह किए बिना काम करना होगा।
पार्थियन ने

2
@ParthianShot, उपाख्यान साक्ष्य: मेरे CentOS सर्वर पर, जब एक खाते का शेल / sbin / nologin पर सेट किया जाता है, तो ssh user@site /bin/bashएक साधारण This account is currently not available.संदेश देता है । इसके अलावा, इस उत्तर में कहा गया है कि बोलिन SSH पहुंच की रक्षा करता है
मेटाविडा

@ParthianShot विवरण के आधार पर, ऐसा नहीं हुआ। क्या हुआ है: सांबा को गलत ठहराया गया था; हमलावर ने Samba के माध्यम से ssh एक्सेस को कॉन्फ़िगर किया; हमलावर ssh के माध्यम से लॉग ऑन हुआ। हालाँकि यह मामला स्पष्ट रूप से सीसडमिन का दोष है, यदि आप "गलत सेवा" के साथ "गलत संगमन" की जगह लेते हैं, तो लॉगिन एक्सेस को रोकने से समझ में आता है, क्योंकि यह हमले की सतह को कम करता है। बेशक, अगर शोषण स्थानीय निष्पादन को बढ़ावा देता है, तो इसके बजाय ssh का उपयोग होने से बहुत कम फर्क पड़ता है।
मार्कस

18

@Slm और @ramesh के उत्कृष्ट उत्तरों को जोड़ने के लिए:

हां, जैसा कि आपने बताया है, आप अभी भी उपयोगकर्ताओं को अपने डिफ़ॉल्ट शेल के रूप में कोलोन के साथ स्विच कर सकते हैं, जो कि sudoपरिभाषित शेल के साथ चल रहा है, लेकिन इस मामले में, आपको निम्न करना होगा:

  1. एक अन्य उपयोगकर्ता के रूप में लॉग इन करें जिसके पास एक वैध शेल है
  2. suकमांड चलाने के लिए उस उपयोगकर्ता के लिए sudo अनुमतियाँ कॉन्फ़िगर की गई हैं, और
  3. यदि आपका सु प्रयास सूडो लॉग में लॉग इन किया गया (तो यह मानते हुए कि सूडो लॉगिंग सक्षम है)।

जिन उपयोगकर्ताओं को अपने डिफ़ॉल्ट शेल के रूप में परिभाषित किया गया है, उनके पास अक्सर उच्च विशेषाधिकार होते हैं / नियमित उपयोगकर्ता की तुलना में सिस्टम को अधिक नुकसान करने में सक्षम होते हैं, इसलिए उन्हें नुकसान को सीमित करने के लिए सीधे प्रयासों में लॉग इन करने में असमर्थ होने के कारण आपके सिस्टम का उल्लंघन हो सकता है। ।


7

दिए गए उत्कृष्ट उत्तरों के अलावा, यह एक और उद्देश्य प्रदान करता है।

यदि आप अपने सर्वर पर एक एफ़टीपी डेमॉन चलाते हैं, तो यह उन उपयोगकर्ताओं के लॉगिन शेल की जाँच करता है जो लॉगिन करने का प्रयास करते हैं। यदि शेल में सूचीबद्ध नहीं है /etc/shells, तो यह उन्हें लॉगिन करने की अनुमति नहीं देता है। इसलिए डेमॉन खातों को एक विशेष शेल देना किसी को एफ़टीपी के माध्यम से खाते को संशोधित करने से रोकता है।


7

पहले से दिए गए महान उत्तरों के आगे, मैं निम्नलिखित परिदृश्य के बारे में सोच सकता हूं।

प्रतिबंधित उपयोगकर्ता के रूप में चलने वाली सेवा में एक सुरक्षा बग उस उपयोगकर्ता के रूप में एक फ़ाइल लिखने की अनुमति देता है। यह फ़ाइल ~ / .ssh / अधिकृत_की हो सकती है।

यह हमलावर को एक शेल में सीधे लॉगिन करने की अनुमति देता है जिससे विशेषाधिकार वृद्धि को निष्पादित करना बहुत आसान हो जाएगा।

लॉगिन शेल को बंद करने से यह विकल्प और अधिक कठिन हो जाएगा।


1

आम तौर पर मैं कहूंगा / बिन / गलत और / sbin / nologin एक ही हैं - लेकिन मुझे लगता है कि यह उस SSH सर्वर पर निर्भर करता है जिसका आप उपयोग कर रहे हैं।

मेरे लिए यह समझदारी की बात होगी कि ओपनएसएसएच पर इस हालिया कारनामे का असर / बिन / झूठे लॉगिन पर नहीं बल्कि नॉन / सिन / नोलिन पर पड़ता है। हालांकि यह बताता है कि ड्रॉपबियर इस तरीके से अलग है (यह भी विशेष रूप से ओपनएसएसएच पर लागू होता है)।

शोषण अधिकांश संस्करणों को प्रभावित करता है:

7.2p1 और निम्न (सभी संस्करण; डेटिंग ~ 20 वर्ष) X11 अग्रेषण सक्षम होने के साथ

https://www.exploit-db.com/exploits/39569/

तो इसके आधार पर - मैं व्यक्तिगत रूप से / sbin / nologin करूँगा, लेकिन मुझे यकीन नहीं है कि यह उन सेवाओं को प्रभावित कर सकता है जो / etc / passwd में / bin / false प्रविष्टि बनाते हैं। आप अपने परिणाम देख और प्रयोग कर सकते हैं, लेकिन कृपया अपने जोखिम पर ऐसा करें! मुझे लगता है कि सबसे खराब स्थिति यह है कि आप इसे वापस बदल सकते हैं और किसी भी प्रभावित सेवा को पुनः आरंभ कर सकते हैं। मैं व्यक्तिगत रूप से काफी कुछ प्रविष्टियाँ / बिन / असत्य का उपयोग कर रहा हूँ - यकीन नहीं अगर मैं इससे परेशान होना चाहता हूँ क्योंकि X11 अग्रेषण कुछ ऐसा नहीं है जो मैंने सक्षम किया है;)

यदि आप OpenSSH का उपयोग करते हैं (बहुत से लोग मुझे लगता है ...) और X11 अग्रेषित करने में सक्षम हैं - आप / sbin / nologin (या शायद Dropbear पर स्विच करना) पर विचार करना चाह सकते हैं।


0

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

दूसरी ओर सिस्टम में एक बाहरी या अनधिकृत उपयोगकर्ता को पूरी तरह से उन खातों का उपयोग करके लॉगिन करने की कोई सुविधा नहीं होगी और यह एक सुरक्षा उपाय है।


0

हां, यह सुरक्षा के उद्देश्य से कार्य करता है। यह एक रक्षा में गहराई से उपाय है।

इसका मुख्य कारण यह है कि एक उद्देश्य यह है कि सॉफ्टवेयर के विभिन्न बिट्स हैं जो एक निर्दिष्ट उपयोगकर्ता के लिए लॉगिन क्रेडेंशियल के कुछ रूप को मान्य करेंगे और फिर कमांड चलाने के लिए उस उपयोगकर्ता के लॉगिन शेल का उपयोग करेंगे। शायद सबसे उल्लेखनीय उदाहरण एसएसएच है। यदि आप SSH पर एक उपयोगकर्ता के रूप में सफलतापूर्वक प्रमाणित करते हैं, तो SSH उपयोगकर्ता के लॉगिन शेल को लॉन्च करता है (या आपके द्वारा प्रदान किए गए कमांड को चलाने के लिए इसका उपयोग करता है, यदि आप ssh someuser@example.com 'command to run'सिंटैक्स का उपयोग करते हैं)।

बेशक, आदर्श रूप से एक हमलावर उपयोगकर्ता के रूप में प्रमाणित नहीं कर पाएगा। लेकिन मान लें कि निम्न स्थिति होती है:

  • आपके द्वारा नियंत्रित किया जाने वाला सर्वर एक वेब सेवा को एक उपयोगकर्ता के रूप में चला रहा है जिसमें एक होम डायरेक्टरी और एक लॉगिन शेल है
  • एक हमलावर उस सेवा में भेद्यता का पता लगाता है जो हमलावर को उपयोगकर्ता के होम डायरेक्टरी में फाइल लिखने की अनुमति देता है

अब आपका हमलावर SSH सार्वजनिक कुंजी को लिख सकता है ~/.ssh/authorized_keys, फिर SSH को और - बूम! - उन्हें आपके सर्वर पर शेल एक्सेस मिल गया है।

यदि उपयोगकर्ता इसके बजाय /usr/sbin/nologinउनके लॉगिन शेल के रूप में है, तो हमलावर द्वारा सफलतापूर्वक सार्वजनिक कुंजी लिखने के बाद भी authorized_keys, यह उनके लिए उपयोगी नहीं है। यह सब उन्हें दूर से चलाने की अनुमति देता है nologin, जो बहुत उपयोगी नहीं है। वे खोल नहीं सकते हैं, और उनके हमले को कम कर दिया गया है।

यदि यह परिदृश्य बहुत ही काल्पनिक लगता है, तो मैं ध्यान देना चाहूंगा कि यह प्रश्न पूछने के लगभग एक साल बाद, 2015 में इस हमले को मैंने ठीक-ठीक निशाना बनाया था । एक गोड्डम इडियट की तरह, मैंने रेडिस का उदाहरण छोड़ दिया, जिसका कोई पासवर्ड दुनिया के लिए खुला नहीं था। यह रेडिस क्रैकिट हमले से लक्षित हुआ , जिसमें हमलावर आपके रेडिस डेटाबेस में एक एसएसएच सार्वजनिक कुंजी डालता है, फिर रेडिस को डेटाबेस की सामग्री को लिखने के लिए एक कमांड भेजता है .ssh/authorized_keys, फिर एसएसएच को अंदर करने की कोशिश करता है। मैं परिणामों से बच गया। केवल इस तथ्य से मेरी स्वयं की अक्षमता है कि redis-serverApt पैकेज के अनुचर (जो मैं Redis को स्थापित करने के लिए उपयोग किया जाता था) के पास इसे Redis को चलाने के लिए बनाने का ज्ञान थाredisउपयोगकर्ता जिनके पास कोई घर निर्देशिका या लॉगिन शेल नहीं है; अगर यह उनके लिए नहीं होता, तो मेरा सर्वर संभवत: किसी हैकर के बोटनेट के हिस्से को फिर से तैयार या समाप्त कर दिया जाता।

उस अनुभव ने मुझे कुछ हद तक विनम्रता प्रदान की और मुझे गहराई से रक्षा के महत्व की सराहना की , और विशेष रूप से, वेबसर्वर, डेटाबेस और अन्य पृष्ठभूमि सेवाओं को चलाने वाले खातों में लॉगिन गोले न देने की।

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