/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-акаунта без пароля, а послуга, яку вони використовують, не потребує оболонки.