Відключити оболонку користувача з міркувань безпеки


58

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

Як ми можемо заблокувати ці облікові записи користувачів, щоб ці "користувачі" не мали оболонки і не мали можливості увійти? Ми хочемо запобігти можливості, щоб хтось міг ввести SSH як один із цих облікових записів користувачів.

Відповіді:


63

За допомогою usermodкоманди можна змінити оболонку входу користувача.

usermod -s /sbin/nologin myuser

або

usermod -s /usr/sbin/nologin myuser

Якщо ваша ОС не забезпечує / sbin / nologin, ви можете встановити оболонку на команду NOOP, наприклад / bin / false:

usermod -s /bin/false myuser

1
/bin/falseвидається більш поширеним, ніж /bin/true.
jw013

@ jw013 Я оновлюю свою відповідь, але обидва повинні працювати добре.
Йорданм

1
Зауважте, що Debians nologinнасправді можна знайти в/usr/sbin/nologin
xebeche

це була моя перша ідея, на жаль, "правильне" використання деяких облікових записів користувачів вимкнено під час налаштуванняnologin
Хав'єр

2
@ jw013 Насправді у мене є те, /usr/local/bin/maybeщо /dev/urandomвибирає між цими двома. Можливо, я повинен її використовувати: D
hegez

21

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

Люди все ще можуть мати автентифікацію в різних службах, які ваша система надає користувачам Unix, і все ще можуть бути дозволені на виконання деяких дій, хоча, ймовірно, не виконують довільних команд безпосередньо.

Зміна оболонки на /bin/falseабо /usr/sbin/nologinлише заважатиме їм виконувати команди на тих службах, які можна використовувати для запуску команд (вхід в консоль, ssh, telnet, rlogin, rexec ...), тому впливайте на авторизацію лише для деяких служб.

Для ssh, наприклад, що по- , як і раніше дозволяє їм робити перенаправлення портів.

passwd -lвимкне автентифікацію пароля, але користувачеві все ж може бути дозволено використовувати інші методи аутентифікації (наприклад, authorized_keysз ssh).

З pamна Linux , по крайней мере, ви можете використовувати pam_shellsмодуль для обмеження аутентифікації або авторизації для користувачів з дозволеною оболонкою (ті , які згадані в /etc/shells). Тому що sshви хочете зробити це на рівні авторизації ( account), як і для аутентифікації, які sshdвикористовуються pam на додаток до інших методів аутентифікації (наприклад authorized_keys), або ви можете це зробити з sshd_configдирективами /etc/ssh/sshd_config(як AllowUsersі друзів).

Будьте обачні, але додавання деяких обмежень у глобальній авторизації пам’яті потенційно не зможе запустити cronзавдання як ці користувачі.


Дякую. Тоді, що б ви порадили, наводивши таку схему: мені потрібно створити користувача, якому потрібен доступ до його домашньої папки через sftp або sshfs, але він не повинен мати змогу ввійти в систему за допомогою оболонки. Це навіть можливо? Я впав як модулі PAM, можливо, це рішення для goto, але я не все це розумію:|
Stphane

@Stphane ви можете подивитися на rssh - manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
Харт Сімха

4

Ви редагуєте /etc/passwdфайл і змінюєте оболонку користувачів з /bin/bashабо /bin/shна/sbin/nologin


8
Відповідь правильна, але редагування вручну / etc / passwd ніколи не рекомендується.
Йорданм

3
Чому? Це те, чим ми займаємося, поки я був професійним адміністратором системи. (приблизно 20 років) Насправді, не всі дистрибутиви Linux / unix мають інструменти для зміни / etc / passwd або / etc / group. Якщо ви не використовуєте щось на зразок Yast або Smit, це інструменти, які кешують налаштування та перезаписують їм немає шкоди в редагуванні рук.
Марк Коен

6
Набагато простіше зробити помилку "порушує вхід кожного" шляхом редагування вручну, а не одного користувача.
Йорданм

2
@jordanm: є те, vipwщо запобігає подібній помилці.
eudoxos

4

Спочатку вимкніть пароль, використовуючи passwd -l username.

Також на manсторінці зверніть увагу passwdна варіант -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

1
Це може бути не бажаним. Можливо, їм знадобиться пароль на їх системному обліковому записі, наприклад, для доступу до електронної пошти.
Йорданм

1
Деякі системи електронної пошти дозволяють використовувати власні механізми паролів. Я використовую Dovecot та Exim з паролем лише електронною поштою. Це дозволяє використовувати веб-пошту на серверах, я б не використовував свій системний пароль. Віртуальні домени електронної пошти вимагають власного пароля, оскільки вони не пов'язані з парольною системою серверів.
BillThor

2

Ви можете використовувати команду chsh:

~# chsh myuser

Введіть нові дані оболонки на запит:

Login Shell [/bin/sh]: /bin/nologin

Або коротша версія:

~# chsh myuser -s /bin/nologin

0

Щоб користувач не входив у систему і навіть не перевіряв автентифікацію через ssh, що дозволяє переадресацію портів (як описано тут Stephane), я змінюю користувача таким чином, як nobodyкористувач системи :

  • заблокована автентифікація пароля в /etc/shadow*або !!у відповідному полі)
  • вимкнено оболонку в /etc/passwd(наприклад, /sbin/nologinу відповідному полі)
  • домашній дір лише для читання /etc/passwd(наприклад, /у відповідному полі)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.