Яка різниця між / sbin / nologin та / bin / false?


69

Я часто чув, як рекомендував відключити обліковий запис користувача, встановивши його оболонку на /bin/false. Але в моїх існуючих системах Linux я бачу, що велика кількість існуючих облікових записів (усі вони є обліковими записами служби) /sbin/nologinзамість цього оболонки .

Я бачу на сторінці man, яка /sbin/nologinдрукує повідомлення користувачеві про те, що обліковий запис вимкнено, а потім закривається. Імовірно /bin/false, нічого б не надрукували.

Я також бачу, що /sbin/nologinвказано в /etc/shells, а /bin/falseні.

На головній сторінці йдеться, що FTP заборонить доступ користувачам із оболонкою, яка не вказана в списку, /etc/shellsі передбачає, що інші програми можуть робити те саме. Чи означає це, що хтось може FTP входити з обліковим записом, який має /sbin/nologinсвою оболонку?

Яка тут різниця? Який із них слід використовувати для відключення облікового запису користувача та за яких обставин? Які ще ефекти має лістинг /etc/shells?



1
Як загальна інформація, яка працює. Думаю конкретно з точки зору адміністрування системи.
Майкл Хемптон

Тільки мається на увазі як фонове слово.
dmourati

Відповіді:


70

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


9
Хоча ця відповідь підсумовує абсолютно різні варіанти (і відповідає на питання), я відчув необхідність вказувати на корисний ресурс для цього випадку використання, який доступний по крайней мере , в акції Debian репозиторіях, в titantoolsпакеті: noshell. Ця псевдо-оболонка надає можливості аудиту, реєстрація в syslog намагається використовувати облікові записи з noshellїї оболонкою, одночасно забороняючи доступ.
dawud

1
Це аж ніяк не апокрифний, але насправді є досить поширеним серед сисадмінів певного урожаю (кашель), щоб використовувати /bin/falseяк оболонку для входу для людей, які не повинні входити.
MadHatter

2
Апокрифний в тому сенсі, що це не оригінальне призначення. Я не сказав анахроністичний; Я бачу це щодня :)
Falcon Momot

1
Відключення облікового запису недійсним паролем не дуже добре працює з ssh. Якщо користувачеві вдалося встановити раніше аутентифікацію відкритого ключа, він може все-таки отримати можливість.
joshudson

3
sshd задокументовано, щоб перевірити, що облікові записи, які заблоковані певними способами (хеші паролів, починаючи з! конкретно, згадуються), навіть із автентичністю pubkey.
Falcon Momot

13

Провівши деякі дослідження з цього приводу, метод, який ви використовуєте, залежить від того, що вам доведеться заблокувати. Якщо користувач увійде з цим набором у оболонку, то він отримає повідомлення, що відображається внаслідок This account is currently unavailable.примітки, що ви можете змінити це, створивши файл /etc/nologin.txtпринаймні на похідних RHEL.

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

Що стосується Вашого FTP-питання: Так, ви маєте рацію в тому, що встановлення оболонки /sbin/nologinдозволить користувачам входити в FTP, /bin/falseабо /bin/trueповністю перешкоджатиме користувачеві входити в будь-яку службу.

Таким чином, /bin/falseабо /bin/trueнайкраще запобігти користувачеві входити в будь-яку службу, при /sbin/nologinцьому все одно дозволятимуть користувачам входити в сервіси, відмінні від SSH або локальної консолі, надаючи користувачеві зворотній зв'язок про те, що обліковий запис неактивний і найкраще його використовувати, коли тільки SSH / локальний консоль потрібно заблокувати.


2

Гм, хтось намагався довести, що / bin / false забороняє доступ до FTP?

Я просто змінив оболонку мого користувача на / bin / false, і міг FTP просто чудово.

Я використовую / dev / null, щоб повністю заблокувати користувача (ну, крім електронної пошти, вони все ще можуть POP3).


У вас це було /etc/shells? Як налаштований ваш FTP-сервер?
Майкл Хемптон

не існує правила, що говорить про те, що користувачеві потрібна оболонка для входу на FTP-сервер.
Петтер Н

Це заборонить його на деяких демонах FTP, а не на інших. Існує досить багато розбіжностей у функціональності між різними. Класична реалізація заборонить доступ до всіх, хто не має оболонки, але це не означає, що всі реалізації повинні.
Falcon Momot
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.