/ Sbin / nologin और / bin / false में क्या अंतर है?


69

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

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

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

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

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



1
सामान्य जानकारी के रूप में जो काम करता है। मैं विशेष रूप से सिस्टम प्रशासन के दृष्टिकोण से सोच रहा हूं।
माइकल हैम्पटन

बस एक बैकग्राउंडर के रूप में मतलब था।
दमतौर

जवाबों:


70

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

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

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

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

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

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

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

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

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

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

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


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

1
यह एपोक्रीफाल का कोई मतलब नहीं है, लेकिन वास्तव में एक निश्चित विंटेज (खाँसी) के sysadmins के बीच काफी आम है, /bin/falseउन लोगों के लिए लॉगिन शेल के रूप में उपयोग करने के लिए जो लॉग इन नहीं करना चाहिए।
MadHatter

2
Apocryphal इस अर्थ में कि यह मूल इच्छित उपयोग नहीं है। मैंने एनाक्रोनोस्टिक नहीं कहा; मैं इसे हर दिन देखता हूं :)
फाल्कन मोमेंट

1
अमान्य पासवर्ड द्वारा खाता अक्षम करना ssh के साथ बहुत अच्छा काम नहीं करता है। यदि उपयोगकर्ता पहले से ही सार्वजनिक कुंजी प्रमाणीकरण स्थापित करने में कामयाब रहा है, तो वह वैसे भी प्राप्त करने में सक्षम हो सकता है।
जोशेडसन

3
sshd को यह जांचने के लिए प्रलेखित किया जाता है कि कुछ निश्चित तरीकों से लॉक किए गए खाते (पासवर्ड हैश शुरुआत के साथ हैं!
फाल्कन मोमेंट

13

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

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

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

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


2

उम, क्या किसी ने यह साबित करने की कोशिश की कि / बिन / झूठी एफ़टीपी पहुंच को रोक देगा?

मैंने अभी-अभी अपने उपयोगकर्ता के शेल को / bin / false में बदल दिया है, और केवल ठीक से FTP में सक्षम था।

मैं पूरी तरह से उपयोगकर्ता को बंद करने के लिए / dev / null का उपयोग करता हूं (अच्छी तरह से, ईमेल को छोड़कर, वे अभी भी POP3 हैं)।


क्या आपके पास इसमें था /etc/shells? आपका एफ़टीपी सर्वर कैसे कॉन्फ़िगर किया गया है?
माइकल हैम्पटन

यह कहते हुए कोई नियम नहीं है कि एक उपयोगकर्ता को एफ़टीपी-सर्वर में प्रवेश करने के लिए एक शेल की आवश्यकता होती है।
पेट्टर एच।

यह कुछ एफ़टीपी डेमॉन पर इसे अस्वीकार कर देगा, और दूसरों को नहीं। विभिन्न लोगों के बीच कार्यक्षमता में काफी भिन्नता है। शास्त्रीय कार्यान्वयन उन लोगों तक पहुंच को रोक देगा, जिन्होंने शेल नहीं किया है, लेकिन इसका मतलब यह नहीं है कि सभी कार्यान्वयन हैं।
फाल्कन मोमोट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.