Як запобігти користувачеві входити в систему, але дозволити "su - користувачеві" в Linux?


93

Як ви дозволяєте користувачеві входити в систему за допомогою " su - user ", але не дозволяєте користувачеві входити в систему за допомогою SSH?

Я намагався встановити оболонку, /bin/falseале коли я намагаюся, suвона не працює.

Чи існує кілька способів дозволити вхід лише через su?

SSH - AllowUserце шлях? (як би я це зробив, якщо це шлях)

Відповіді:


113

Ви можете використовувати AllowUsers / AllowGroups , якщо у вас є тільки кілька користувачів / груп, яким дозволено увійти через SSH або DenyUsers / DenyGroups , якщо у вас є тільки кілька користувачів / груп, які НЕ дозволені для входу. Зауважте, що це обмежує вхід лише через ssh, інші способи входу (консоль, ftp, ...) все ще можливі. Вам потрібно додати ці параметри до файлу / etc / ssh / sshd_config для більшості установок ssh.

Якщо ви встановили оболонку входу на / bin / false, ви можете використовувати su -s /bin/bash user(замінити / bin / bash на обрану оболонку)


всім дякую Я не сподівався отримати 2+ оновлення на моє запитання :) Мені подобається, що конструкція "su -s ..." багато, і консоль / ftp - хороший момент. Я справді був за чимось на кшталт "су-з".
NoozNooz42

3
Сук-трюк - золото. Я використовую його весь час для системних облікових записів. Мені потрібно перевірити дозволи на, наприклад, apache, none тощо. Зазвичай я роблю su - user -s / bin / bash. Необов'язковий аргумент - може використовуватися для надання середовища, схожого на те, що очікував би користувач, якби користувач ввійшов безпосередньо.
dmourati

2
Якщо для завантаження потрібні змінні середовища (наприклад, з / etc / profile), це зробить додатковий тире:su - -s /bin/bash user
Leons

13

Якщо ви все ще хочете, щоб су працював, ви можете використовувати sudo -u [username]або передавати -s /bin/bashсу як тимчасову оболонку. Вони обидва роблять те саме за відсутності оболонки в /etc/passwd.


7

Якщо в обліковому записі немає пароля ( ім’я користувача passwd -d ), він не може ввійти в систему інтерактивно (консоль, SSH тощо). Якщо вони мають дійсну оболонку, su все ще працюватиме. Зверніть увагу на "інтерактивно"; якщо хтось вирішить встановити ключ SSH для облікового запису, він буде працювати!


чи потрібно користувачеві мати дійсну оболонку для su? Я впевнений, що ви все ще знаходитесь в тій же оригінальній оболонці після того, як ви подаєте інший користувач ... ви насправді НЕ ВХОДИТЬ, як інший користувач ... Отже, просто встановити оболонку на / dev / null може працювати так само.
Брайан Постув

Так, вона все ще потребує дійсної оболонки: [root @ localhost ~] # su daemon Цей обліковий запис наразі недоступний. [root @ localhost ~] # su - daemon Цей обліковий запис наразі недоступний. (Система RHEL, оболонка демона є / sbin / nologin)
astrostl

3

У sshd_config додайте рядок DenyUser [username]

Зауважте, що це не завадить цьому користувачеві входити через консоль.


1
Це повинно бути DenyUsers, з 's'.
Девід Г

2

На додаток до вищезазначеного (відключення та / або не встановлення пароля користувача) модуль pam_access (шукати довідкову сторінку на pam_access та access.conf) може використовуватися для контролю доступу до входу.


1

як казали інші;

DenyUser usernameабо DenyGroup groupnameв sshd_configперешкоджатиме введенню ключа / пароля через ssh.

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

тоді ви можете зробити так, як сказали інші: passwd -d usernameвидалити пароль користувачів, щоб вони не могли увійти на консолі чи іншим способом. а ще краще passwd -l username"заблокувати" акаунт. можливо, ssh заборонить доступ до заблокованого облікового запису навіть за допомогою ключів, але я не позитивний.


1
Насправді ssh дозволить вам увійти, використовуючи аутентифікацію ключа, навіть коли пароль облікового запису заблокований.
Річард Холлоуей

1

Як я вже згадував у коментарі, я думаю, що ви все ще можете входити в обліковий запис з недійсною оболонкою. Тож якщо ви встановите оболонку користувача на / dev / null або будь-яку оболонку бін, ви повинні мати змогу все-таки користуватися цим користувачем ... але будь-яка спроба увійти будь-яким чином призведе до відмови від вас ...


1

редагувати / тощо / тінь, додаючи! до початку хешу пароля.

username:!<hash>:#####:#:#####:#:::

Під час забезпечення нової інсталяції - це перше, що я роблю після встановлення sudo, тому ніхто не може використовувати кореневого користувача для входу в систему або ssh в систему, користувачі sudo все ще можуть виконувати функцію root користувача.


0

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

# passwd -d myuser

0

Якщо припустити, що ви хочете користуватися користувачем лише з облікового запису root та відключити весь інший доступ:

Використовуйте це (запустити як root):

usermod -e 1 -L user

Це вимикає вхід із паролем (як і багато інших відповідей), але термін дії облікового запису також закінчується . Ви не можете увійти до облікового запису, який минув, наприклад, за допомогою SSH-ключів. Ви все ще можете su user, хоча на ньому з’явиться повідомлення про те, що термін дії рахунку закінчився.


0

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

Ви хочете лише обмежити доступ до SSH? Вам потрібен доступ для пошти чи ssh методів? Чи доступ лише від root?

su - userбуде потрібен пароль для користувача, якщо він запущений, буде користувачем, відмінним від root. Однак sudo -u user -iне потрібен пароль для користувача.

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