सवाल / Sbin / nologin और / bin / false के बीच क्या अंतर है?


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

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

मैं यह भी देखता हूं /sbin/nologin में सूचीबद्ध है /etc/shells, जबकि /bin/false नहीं है।

मैन पेज का कहना है कि एफ़टीपी उपयोगकर्ताओं के लिए खोल खोल देगा नहीं में सूचीबद्ध /etc/shells और इसका तात्पर्य है कि अन्य कार्यक्रम भी ऐसा ही कर सकते हैं। क्या इसका मतलब यह है कि कोई व्यक्ति उस खाते के साथ एफ़टीपी कर सकता है जिसमें है /sbin/nologin इसके खोल के रूप में?

यहां क्या अंतर है? इनमें से किस उपयोगकर्ता का उपयोग उपयोगकर्ता खाते को अक्षम करने के लिए किया जाना चाहिए, और किस परिस्थितियों में? लिस्टिंग में अन्य प्रभाव क्या हैं /etc/shells है?


65
2018-06-28 04:58


मूल


unix.stackexchange.com/questions/10852/... - dmourati
सामान्य जानकारी के रूप में काम करता है। मैं विशेष रूप से सिस्टम प्रशासन के परिप्रेक्ष्य से सोच रहा हूं। - Michael Hampton♦
बस एक पृष्ठभूमि के रूप में मतलब था। - dmourati


जवाब:


/bin/false एक उपयोगिता कार्यक्रम है, साथी के साथ /bin/true, यह सुनिश्चित करने के लिए कि कुछ यूनिक्स सुविधा पूर्ण है, कुछ अमूर्त अर्थों में उपयोगी है। हालांकि, इन कार्यक्रमों के लिए उभरते उद्देश्य पाए गए हैं; बाश स्टेटमेंट पर विचार करें /some/program || /bin/true, जो हमेशा बूलियन-मूल्यांकन के लिए मूल्यांकन करेगा ($? = 0) कोई फर्क नहीं पड़ता /some/program

का एक उभरती हुई उपयोग /bin/false, जैसा कि आपने पहचाना है, उपयोगकर्ताओं के लिए एक शून्य खोल के रूप में लॉग इन करने की अनुमति नहीं है। इस मामले में सिस्टम बिल्कुल व्यवहार करेगा जैसे कि खोल चलाने में विफल रहा।

POSIX (हालांकि मैं गलत हो सकता हूं और यह एसयूएस हो सकता है) इन दोनों आदेशों को उचित बूलियन मान वापस करने के अलावा कुछ भी करने के लिए बाध्य नहीं करता है।

/sbin/nologin एक बीएसडी उपयोगिता है जिसका समान व्यवहार है /bin/false (बूलियन झूठी देता है), लेकिन आउटपुट प्रिंट भी करता है, जैसा कि /bin/false करने से मना कर दिया गया है। यह उपयोगकर्ता को यह समझने में मदद करता है कि क्या हुआ, हालांकि अभ्यास में कई टर्मिनल अनुकरणकर्ता बंद हो जाएंगे जब शेल समाप्त हो जाएगा, संदेश को सभी मामलों में किसी भी तरह से पढ़ा जा सकता है।

लिस्टिंग करने के लिए बहुत कम उद्देश्य है /sbin/nologin में /etc/shells। का मानक प्रभाव /etc/shells उपयोग के लिए अनुमत कार्यक्रमों की सूची है chsh जब उपयोगकर्ता अपना स्वयं का खोल बदल रहे हैं (और आपके स्वयं के खोल को बदलने का कोई विश्वसनीय कारण नहीं है /sbin/nologin)। सुपरसुर किसी के खोल को किसी भी चीज़ में बदल सकता है। हालांकि, आप दोनों को सूचीबद्ध करना चाह सकते हैं /sbin/nologin तथा /bin/false में /etc/rsh, जो उपयोगकर्ताओं को इन खोलों के साथ अपने खोल को बदलने से रोक देगा chsh दुर्भाग्यपूर्ण घटना में उन्हें एक खोल मिलती है।

एफ़टीपी डिमॉन्स उपयोगकर्ताओं के लिए / etc / shells में खोल वाले उपयोगकर्ताओं तक पहुंच को अस्वीकार कर सकता है, या वे किसी भी अन्य तर्क का उपयोग कर सकते हैं। एफ़टीपी चलाना किसी भी मामले में टालना है क्योंकि sftp (जो समान कार्यक्षमता प्रदान करता है) समान लेकिन सुरक्षित है। कुछ साइट्स का उपयोग करें /sbin/nologin एसएफटीपी एक्सेस को इसमें डालकर अनुमति पहुंच को अक्षम करने के लिए /etc/shells। यदि उपयोगकर्ता को cronjobs बनाने की अनुमति है तो यह एक पिछवाड़े खोल सकता है।

किसी भी स्थिति में, scp एक अवैध खोल के साथ काम नहीं करेगा। scponly इस उदाहरण में एक खोल के रूप में इस्तेमाल किया जा सकता है।

इसके अतिरिक्त, खोल की पसंद के संचालन को प्रभावित करता है su - (उर्फ su -l)। विशेष रूप से, का उत्पादन /sbin/nologin यदि यह खोल है तो stdout पर मुद्रित किया जाएगा; यह मामला नहीं हो सकता है /bin/false। किसी भी मामले में आदेश के साथ चलते हैं su -cl असफल हो जायेगी।

अंत में, जवाब:

किसी खाते को अक्षम करने के लिए, इनमें से किसी पर निर्भर नहीं है, लेकिन खोल को सेट करें /sbin/nologin सूचनात्मक उद्देश्यों के लिए (जब तक /sbin/nologin में है /etc/shells, जिस बिंदु पर आपको उपयोग करना चाहिए /bin/false, जो नहीं होना चाहिए)। इसके बजाय, पासवर्ड फ़ील्ड सेट करें /etc/passwd सेवा मेरे !, जिसकी गारंटी है crypt किसी भी पासवर्ड के लिए वैध होने के लिए। हैश को सेट करने पर विचार करें /etc/shadow बग से बचने के लिए एक ही तरीका है। passwd -l यह तुम्हारे लिए करेगा।

खाता अक्षम करने का तीसरा तरीका खाता समाप्ति तिथि फ़ील्ड को एक प्राचीन तिथि (उदाहरण के लिए) सेट करना है। usermod --expiredate 1)। यह लॉग इन को रोक देगा यदि आपका सेटअप उपयोगकर्ता को बिना किसी पासवर्ड के अपने यूनिक्स खाते के खिलाफ प्रमाणित करने की अनुमति देता है और जिस सेवा का उपयोग कर रहे हैं, उसके लिए कोई खोल नहीं है।


68
2018-06-28 05:34



हालांकि यह उत्तर पूरी तरह से अलग-अलग विकल्पों का सारांश देता है (और प्रश्न का उत्तर देता है), मुझे इस उपयोग के मामले के लिए उपयोगी संसाधन को इंगित करने की आवश्यकता महसूस हुई, जो कम से कम स्टॉक डेबियन रिपॉजिटरीज़ में उपलब्ध है, titantools पैकेज: noshell। यह छद्म-खोल लेखा परीक्षा क्षमताओं को प्रदान करता है, जिसमें खातों का उपयोग करने के लिए syslog प्रयासों पर लॉग ऑन किया जाता है noshellइसके खोल के रूप में, अभी भी पहुंच को अस्वीकार करते हुए। - dawud
यह किसी भी तरह से apocryphal नहीं है, लेकिन वास्तव में उपयोग करने के लिए एक निश्चित विंटेज (खांसी) के sysadmins के बीच काफी आम है /bin/false उन लोगों के लिए लॉगिन खोल के रूप में जो लॉग इन नहीं करना चाहिए। - MadHatter
Apocryphal इस अर्थ में कि यह मूल उद्देश्य का उपयोग नहीं है। मैंने अनाकवादी नहीं कहा; मैं हर दिन इसे देखता हूं :) - Falcon Momot
अमान्य पासवर्ड से खाता को अक्षम करना ssh के साथ बहुत अच्छा काम नहीं करता है। यदि उपयोगकर्ता पहले सार्वजनिक कुंजी प्रमाणीकरण स्थापित करने में कामयाब रहा था तो वह वैसे भी प्राप्त करने में सक्षम हो सकता है। - joshudson
sshd को उन खातों को जांचने के लिए दस्तावेज किया गया है जो कुछ तरीकों से लॉक हैं (पासवर्ड हैंश के साथ शुरुआत! विशेष रूप से उल्लेख किया गया है) यहां तक ​​कि पब्की ऑथ के साथ भी। - Falcon Momot


इस पर कुछ शोध करने के बाद, आपके द्वारा उपयोग की जाने वाली विधि इस बात पर निर्भर करती है कि आपको क्या लॉक करना है। यदि कोई उपयोगकर्ता इस सेट के साथ खोल में लॉग इन करता है तो उन्हें प्रभाव के लिए प्रदर्शित एक संदेश मिलेगा This account is currently unavailable. ध्यान दें कि आप फ़ाइल बनाकर इसे बदल सकते हैं /etc/nologin.txt कम से कम आरएचईएल डेरिवेटिव्स पर।

जैसा कि आप जानते हैं /bin/false एक खोल नहीं है जिस तरह से यह काम करता है वह यह है कि यह झूठी रिटर्न देता है जो द्विआधारी निकास के तुरंत बाद लॉग आउट करता है। ध्यान दें कि /bin/true एक ही प्रभाव प्राप्त होगा।

अपने एफ़टीपी प्रश्न के बारे में: हाँ, आप उसमें सही हैं जिसमें खोल सेट है /sbin/nologin उपयोगकर्ताओं को एफ़टीपी में लॉगिन करने की अनुमति देगा /bin/false या /bin/true पूरी तरह से उपयोगकर्ता को लॉग इन करने से रोक देगा कोई भी सर्विस।

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


12
2018-06-28 05:30





उम, किसी ने किया प्रयत्न साबित करने के लिए कि / bin / false FTP एक्सेस को अस्वीकार कर देगा?

मैंने बस अपने उपयोगकर्ता के खोल को / bin / false में बदल दिया, और बस ठीक से एफ़टीपी में सक्षम था।

मैं / dev / null का उपयोग करता हूं पूरी तरह उपयोगकर्ता को लॉक करें (ठीक है, ईमेल को छोड़कर, वे अभी भी पीओपी 3 कर सकते हैं)।


2
2017-09-01 02:24



क्या आपके पास यह था /etc/shells? आपका एफ़टीपी सर्वर कैसे कॉन्फ़िगर किया गया है? - Michael Hampton♦
कोई नियम नहीं कह रहा है कि किसी उपयोगकर्ता को एफ़टीपी-सर्वर में लॉग इन करने के लिए खोल की आवश्यकता होती है। - Petter H
यह कुछ एफ़टीपी डिमों पर इसे अस्वीकार कर देगा, न कि दूसरों को। विभिन्न लोगों के बीच कार्यक्षमता में काफी भिन्नता है। शास्त्रीय कार्यान्वयन किसी भी व्यक्ति तक पहुंच को अस्वीकार नहीं करेगा, जिसकी शेल नहीं है, लेकिन इसका मतलब यह नहीं है कि सभी कार्यान्वयन करना है। - Falcon Momot