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