/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) पर सेट करना है। यदि आपका सेटअप बिना पासवर्ड के जिस यूनिक्स खाते का उपयोग कर रहा है और जिस सेवा का उपयोग कर रहा है उसे बिना किसी शेल की आवश्यकता के उपयोगकर्ता प्रमाणित कर सकता है, तो यह लॉगिन को रोक देगा।