Яка різниця між / 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?
baptx

4
Мені цікаво, чому / bin / false бере 21k коду, щоб повернути код повернення "1"! (і / sbin / nologin займає лише 4.7k)
Марк Стюарт


1
@nxnev Так, не думав про накладні витрати ELF. І з моїх старих днів IBM існувала програма IEFBR14, яка була простою інструкцією зі збирання оп-коду: BR 14 - Відділення для реєстрації 14, яке припиняло б програму з кодом повернення, встановленим на те, що було в реєстрі 14!
Марк Стюарт

Відповіді:


198

Якщо /sbin/nologinвстановлено як оболонку, якщо користувач із цією оболонкою увійде, він отримає ввічливе повідомлення із записом "Цей обліковий запис наразі недоступний". Це повідомлення можна змінити разом із файлом /etc/nologin.txt.

/bin/falseце просто бінарний файл, який негайно виходить, повертаючи помилку, коли він викликається, тому коли хтось, хто має falseоболонку, входить, він негайно виходить із системи, коли falseвиходить. Встановлення оболонки /bin/trueмає той самий ефект, що не дозволяє комусь увійти, але false, ймовірно, використовується як умова, trueоскільки набагато краще передавати концепцію, що людина не має оболонки.

Переглядаючи nologinсторінку чоловіка, вона говорить про те, що вона була створена в 4.4 BSD (на початку 1990-х), тому вона з’явилася задовго після того, як falseбула створена. Використання falseяк оболонки, ймовірно, є лише умовою, перенесеною з перших днів UNIX.

nologinє більш зручним для користувача варіантом, з налаштованим повідомленням, що надається користувачеві, який намагається увійти, тому теоретично ви хочете використовувати це; але обидва nologinі falseматимуть однаковий кінцевий результат того, що хтось не має оболонки і не зможе ввійти.


10
/usr/sbin/nologinдля дистрибутивів на основі Debian.
Дімо

3
Принаймні реалізація BSD також реєструє спроби входу в syslog, як це видно в opensource.apple.com/source/system_cmds/system_cmds-735/… , тоді як / bin / false нічого не запише
Сергій Колодяжний

28

Деякі сервери FTP дозволять вам отримати доступ до FTP, лише якщо у вас є дійсна оболонка. /sbin/nologinвважається дійсною оболонкою, тоді /bin/falseяк ні.

(Я думаю, що "дійсний" означає, що його вихідний статус дорівнює 0, але він /etc/shellsможе також входити в нього, ймовірно, це залежить від системи, програмного забезпечення FTP та вашої конфігурації.)


1
так, це, ймовірно, частина програми ftp, що використовує pam, і pam, використовуючи pam_shells, який, як ви вже сказали, перевіряє /etc/shells. Просто здогадка ... я можу помилитися.
xenoterracide

4
Я щойно перевірив і Ubuntu 8.04 і 14.04. Команда nologin виходить зі статусом 1, подібним до false, і жодне з істинних, хибних чи нологінів не входить у / etc / shell. Якби вони були, користувач міг би використовувати chsh, щоб вибрати таку оболонку та заблокувати себе зі свого облікового запису.
пінгвін359

12

/bin/false- це системна команда, яка використовується в будь-який час, коли вам потрібно передати команду програмі, яка не повинна робити нічого, крім виходу з помилкою. Це супутник /bin/true. Обидва вони є дуже старими і стандартними утилітами POSIX і не дають жодного результату за визначенням. true іноді використовується для скрипту оболонки, який повинен циклічно фіксуватись, наприклад:

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для облікових записів з відключеними.
ксенотеррацид

1
Яка ваша ОС? nologinВерсія Centos не бере аргументів, але може читати повідомлення від /etc/nologin.txt.
Олександр Гончій

3

/ bin / false лише завданням є вихід з ненульовим кодом виходу.

Спробуйте в командному рядку:

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

Деякі установи використовують / bin / false у полі оболонки файла пароля. Якщо користувач намагається увійти, оболонка є / bin / false, тому вони виходять відразу


2

Що /sbin/nologinстосується linux, він походить від проекту util-linux , тоді як /bin/falseє частиною GNU Coreutils . Вони виконують різні ролі, і нологін має можливість надрукувати повідомлення для людей, які мають його як оболонку, які входять у систему. Команди linux походять від BSD, де вони, здається, мають давню історію різниці. FreeBSD falseпросто повертає 1 , тоді як nologinперевіряє, чи впевнений він, що він працює на TTY і надсилає повідомлення в syslog під час спроб входу. Версії Linux трохи складніші ( falseроблячи всілякі цікаві речі з інтернаціоналізацією для виведення --help, я припускаю), але по суті працюють так само.


1

Вони можуть бути однією і тією ж програмою, але вони мають різні значення. Назва програми все це говорить.

  • / bin / false призначений для повернення помилкового значення. Він запускається як програма.
  • / bin / nologin призначений для того, щоб вказати користувачеві, що не дозволяється входити в обліковий запис. (Використовується оболонка для входу.)

-4

Обидва виконують більш-менш однакову роботу, але /bin/falseкорисні для непривілейованих користувачів. З іншого боку, /sbin/nologinпризначено для пільгових користувачів.


4
О, як ти дійшов такого висновку?
fpmurphy

Напевно, він заглянув /etc/passwd. Я щойно подивився на /etc/passwdщойно встановлену розтяжку Debian. У цьому полі майже всі системні облікові записи (ідентифікатори користувачів <1000) мають /usr/sbin/nologinоболонку, за кількома винятками. Зауважте, що я не згоден з відповіддю @ pythondetective. Я просто міркую, що могло б привести його до такого висновку. Хоча мій коментар трохи пізній.
Бінарус

немає! оболонка для входу за замовчуванням не збігається з привілеями.
МУЙ Бельгія

не великий "детектив"
Емобе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.