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


169

तकनीकी रूप से, जब तक pamकि आपके शेल को जांचने के लिए सेट नहीं किया जाता है , तब तक pam_shellsइनमें से कोई भी वास्तव में आपके लॉगिन को रोक नहीं सकता है, यदि आप शेल पर नहीं हैं। मेरे सिस्टम पर वे अलग-अलग आकार के हैं, इसलिए मुझे संदेह है कि वे वास्तव में कुछ करते हैं। तो क्या अंतर है? वे दोनों क्यों मौजूद हैं? मैं एक का दूसरे पर प्रयोग क्यों करूंगा?

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin


पथ /bin/falseहर जगह मौजूद होना चाहिए लेकिन नहीं /sbin/nologin: '/ sbin / nologin': ऐसी कोई फ़ाइल या निर्देशिका नहीं। किसी भी विचार क्यों यह है /usr/sbin/nologinबजाय /sbin/nologinDebian और Ubuntu पर?
बपतिस्मा

4
मैं उत्सुक हूं कि "1" रिटर्न कोड वापस करने के लिए / बिन / झूठ क्यों 21k कोड लेता है! (और / sbin / nologin केवल 4.7k लेता है)
मार्क स्टीवर्ट


1
@nxnev हाँ, ELF के ओवरहेड के बारे में नहीं सोचा था। और मेरे पुराने आईबीएम दिनों से एक कार्यक्रम IEFBR14 था जो एक सरल एक ऑप-कोड असेंबली इंस्ट्रक्शन था: बीआर 14 - 14 रजिस्टर करने के लिए शाखा, जो कि रजिस्टर 14 में जो कुछ भी था, उसके लिए वापसी कोड सेट के साथ कार्यक्रम को समाप्त करेगा!
मार्क स्टीवर्ट

जवाबों:


198

जब /sbin/nologinशेल के रूप में सेट किया जाता है, यदि उस शेल के साथ उपयोगकर्ता लॉग इन करता है, तो उन्हें एक विनम्र संदेश मिलेगा, जिसमें लिखा होगा कि "यह खाता अभी उपलब्ध नहीं है।" यह संदेश फ़ाइल के साथ बदला जा सकता है /etc/nologin.txt

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

nologinमैन पेज को देखते हुए , यह कहता है कि इसे 4.4 बीएसडी (1990 के दशक के प्रारंभ में) falseमें बनाया गया था, इसलिए इसे बनाने के लंबे समय बाद आया । falseशेल के रूप में उपयोग संभवतः UNIX के शुरुआती दिनों से किया गया एक सम्मेलन है।

nologinअधिक उपयोगकर्ता के अनुकूल विकल्प है, जो उपयोगकर्ता को लॉग इन करने की कोशिश कर रहे अनुकूलन संदेश के साथ है, इसलिए आप सैद्धांतिक रूप से उसका उपयोग करना चाहते हैं; लेकिन दोनों nologinऔर falseकिसी एक खोल नहीं होने और में ssh में सक्षम नहीं होने का एक ही अंतिम परिणाम होगा।


10
/usr/sbin/nologinडेबियन आधारित वितरण के लिए।
दीमो

3
कम से कम बीएसडी कार्यान्वयन भी रूप में देखा तंत्र लॉग को प्रवेश करने के प्रयासों को लॉग opensource.apple.com/source/system_cmds/system_cmds-735/... , जबकि / bin / झूठा कुछ भी प्रवेश नहीं होगा
सर्गी Kolodyazhnyy

28

कुछ एफ़टीपी सर्वर आपको एफ़टीपी एक्सेस की अनुमति तभी देंगे जब आपके पास एक वैध शेल होगा। /sbin/nologinको वैध शेल माना जाता है, जबकि /bin/falseऐसा नहीं है।

(मुझे लगता है कि "वैध" का अर्थ है कि इसकी निकास स्थिति 0 है, लेकिन /etc/shellsइसमें भी आ सकता है, यह संभवतः सिस्टम, एफ़टीपी सॉफ़्टवेयर और आपके कॉन्फ़िगरेशन पर निर्भर करता है।)


1
हाँ, यह संभवतः pp, और pam_shells का उपयोग करके pp_shells का उपयोग करके FTP प्रोग्राम का हिस्सा है, जैसा कि आपने कहा था, जाँच करता है /etc/shells। बस एक अनुमान ... मैं गलत हो सकता है।
xenoterracide

4
मैंने सिर्फ Ubuntu 8.04 और 14.04 दोनों की जाँच की। नोग्लिन कमांड स्टेटस 1 के साथ बाहर निकलता है और झूठे के समान है, और कोई भी सही, गलत या नोलिन / / गोले में शामिल नहीं है। यदि वे थे, एक उपयोगकर्ता इस तरह के एक खोल का चयन करने के लिए chsh का उपयोग कर सकता है और अपने खाते से खुद को बंद कर सकता है।
पेंग्विन 359

12

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

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

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


4
ध्यान देने योग्य बात है /bin/trueऔर /bin/falseयह हमेशा नहीं होता है कि आपको शेल स्क्रिप्ट में क्या मिलेगा। में zsh trueऔर falseअंतर्निहित हैं, जहां संस्करणों bashका उपयोग करता है/bin/*
xenoterracide

4

मेरी मशीन पर, nologinतर्कों की अनदेखी करते हुए, अंग्रेजी में हमेशा एक ही संदेश प्रदर्शित करता है। द्वारा इंगित की गई भाषा में और उसके प्रति /bin/falseप्रतिक्रिया करता है । इन कॉस्मेटिक मतभेदों के अलावा, उनके पास समान प्रभाव है।--version--help$LC_CTYPE

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


4
ऐसा लगता है कि शायद falseसिस्टम खातों के लिए अधिक है जिनके पास कोई वास्तविक उपयोगकर्ता नहीं है, और nologinअक्षम खातों के लिए है।
xenoterracide

1
आपका ओएस क्या है? सेंटोस nologinसंस्करण कोई तर्क नहीं लेता है, लेकिन इससे संदेश पढ़ सकता है /etc/nologin.txt
अलेक्जेंडर गोंचिए

3

/ बिन / गलत केवल काम गैर-शून्य निकास कोड के साथ बाहर निकलना है।

इसे कमांड लाइन पर आज़माएं:

$:> /bin/false
$:> echo $?
1
$:>

कुछ संस्थान पासवर्ड फ़ाइल के शेल क्षेत्र में / बिन / झूठ का उपयोग करते हैं। यदि उपयोगकर्ता लॉगिन करने की कोशिश करता है, तो शेल / बिन / गलत है, इसलिए वे तुरंत बाहर निकल जाते हैं


2

लाइनक्स पर, /sbin/nologinउपयोग -लिनक्स परियोजना से आता है , जबकि जीएनयू कोरुटिल्स/bin/false का हिस्सा है । वे अलग-अलग भूमिकाएँ निभाते हैं, और नोलिन के पास उन लोगों के लिए एक संदेश छपवाने का विकल्प होता है, जिनके पास उनके शेल के रूप में होता है, जो लॉग इन कर रहे होते हैं। लिनक्स कमांड बीएसडी से आते हैं, जहाँ उन्हें अलग होने का एक लंबा इतिहास लगता है। FreeBSD बस 1 लौटाता है , जबकि यह सुनिश्चित करने के लिए कि यह एक TTY पर चल रहा है और लॉग इन के प्रयासों के दौरान syslog को एक संदेश भेजता है। लिनक्स संस्करण थोड़ा और अधिक जटिल हैं - --एचएलपी के आउटपुट के लिए अंतर्राष्ट्रीयकरण के साथ सभी प्रकार के मज़ेदार सामान हैं, मुझे लगता है) लेकिन अनिवार्य रूप से उसी तरह से प्रदर्शन करते हैं।falsenologinfalse


1

वे एक ही कार्यक्रम हो सकते हैं, लेकिन उनके अलग-अलग अर्थ हैं। कार्यक्रम का नाम यह सब बताता है।

  • / बिन / असत्य का उद्देश्य एक गलत मान लौटाना है। इसे प्रोग्राम के रूप में चलाया जाता है।
  • / बिन / बोलोगिन का उद्देश्य उपयोगकर्ता को इंगित करना है कि किसी खाते के लिए लॉगिन की अनुमति नहीं है। (यह एक लॉगिन शेल का उपयोग किया जाता है।)

-4

दोनों कमोबेश एक ही काम करते हैं लेकिन /bin/falseगैर-विशेषाधिकार प्राप्त उपयोगकर्ताओं के लिए उपयोगी है। दूसरी ओर, /sbin/nologinविशेषाधिकार प्राप्त उपयोगकर्ताओं के लिए है।


4
ओह, आप उस निष्कर्ष पर कैसे आए?
fpmurphy

संभवत: उसने गौर किया है /etc/passwd। मैं बस /etc/passwdएक ताजा स्थापित डेबियन खिंचाव में देखा था। इस बॉक्स में, लगभग सभी सिस्टम खातों (उपयोगकर्ता आईडी <1000) के पास /usr/sbin/nologinकुछ अपवादों के साथ शेल के रूप में है। कृपया ध्यान दें कि मैं @ pythondetective के उत्तर से सहमत नहीं हूं। मैं सिर्फ अनुमान लगा रहा हूं कि इस निष्कर्ष पर जाने के लिए उसे क्या हो सकता है। मेरी टिप्पणी थोड़ी देर की है, हालाँकि।
बिनरूस

नहीं! डिफ़ॉल्ट लॉगिन शेल विशेषाधिकारों के समान नहीं है।
MUY बेल्जियम

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