/bin/false
це корисна програма, супутникова до /bin/true
якої, яка корисна в деякому абстрактному розумінні, щоб забезпечити, що unix є повноцінним. Однак нові програми цих програм були знайдені; розгляньте вислів BASH /some/program || /bin/true
, який завжди буде логічно оцінювати до true ( $? = 0
) незалежно від повернення /some/program
.
Використання /bin/false
, як Ви визначили, є як нульовою оболонкою для користувачів, яким не дозволяється входити в систему. Система в цьому випадку буде вести себе так, як ніби оболонка не запустилася.
POSIX (хоча я можу помилятися, і це може бути SUS) обмежує обидві ці команди не робити нічого, крім повернення відповідного булевого значення.
/sbin/nologin
це утиліта BSD, яка має подібну поведінку /bin/false
(повертає булеву помилку), але також друкує вихід, як /bin/false
це заборонено робити. Це повинно допомогти користувачеві зрозуміти, що сталося, хоча на практиці багато емулятори терміналів просто закриються, коли оболонка припиняється, і в деяких випадках повідомлення все-таки стає нечитабельним.
Цілі для перерахування /sbin/nologin
в них мало /etc/shells
. Стандартним ефектом /etc/shells
є перелік програм, дозволених для використання, chsh
коли користувачі змінюють власну оболонку (і немає вагомих причин змінювати власну оболонку на /sbin/nologin
). Суперусер може змінити будь-яку оболонку на будь-що. Однак ви можете перелічити як /sbin/nologin
і /bin/false
в /etc/rsh
, що заборонить користувачам із цими оболонками змінювати оболонку, використовуючи chsh
у нещасному випадку, що вони отримують оболонку.
Демони FTP можуть заборонити доступ користувачам із оболонкою, що не знаходиться в / etc / shell, або вони можуть використовувати будь-яку іншу логіку, яку вони бажають. Запуск FTP не можна уникати в будь-якому випадку, оскільки sftp
(який забезпечує подібну функціональність) схожий, але безпечний. Деякі сайти використовують /sbin/nologin
для відключення доступу до оболонки, дозволяючи sftp отримати доступ до неї /etc/shells
. Це може відкрити задній простір, якщо користувачеві буде дозволено створювати кронштейни.
В будь-якому випадку scp
не буде працювати з недійсною оболонкою. scponly
може використовуватися як оболонка в цьому випадку.
Крім того, вибір оболонки впливає на роботу su -
(AKA su -l
). Зокрема, вихідний /sbin/nologin
файл буде надрукований у stdout, якщо це оболонка; з цим не може бути справи /bin/false
. У будь-якому випадку команди, запущені з su -cl
, не зможуть.
Нарешті, відповідь:
Щоб вимкнути обліковий запис, не залежайте від жодного з них, але встановіть оболонку /sbin/nologin
для інформаційних цілей (якщо /sbin/nologin
немає /etc/shells
, в який момент ви повинні використовувати /bin/false
, чого не повинно бути). Натомість встановіть поле /etc/passwd
для пароля у значення !
, яке гарантується crypt
дійсним без паролів. Розгляньте налаштування хешу /etc/shadow
таким же чином, щоб уникнути помилок. passwd -l
зробить це за вас.
Третій спосіб відключення облікового запису - встановлення поля терміну дії облікового запису на давню дату (наприклад, usermod --expiredate 1
). Це дозволить уникнути входу, якщо ваша установка дозволить користувачам пройти автентифікацію проти свого Unix-акаунта без пароля, а послуга, яку вони використовують, не потребує оболонки.