Как запретить пользователю входить в систему, но разрешить «su - user» в Linux?


93

Как вы разрешаете пользователю входить в систему, используя « su - пользователь », но не позволяя пользователю войти в систему, используя SSH?

Я попытался установить оболочку, /bin/falseно когда я пытаюсь, suона не работает.

Есть несколько способов разрешить вход только su?

SSH - AllowUserэто путь? (как бы я это сделал, если это путь)

Ответы:


113

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

Если вы установили оболочку входа в систему / bin / false, которую вы можете использовать su -s /bin/bash user(замените / bin / bash на выбранную вами оболочку)


Большое спасибо всем. Я не ожидал получить более 2 голосов по моему вопросу :) Мне очень нравится конструкция "su -s ...", и консоль / ftp - хороший момент. Я был действительно после чего-то вроде "Су-с".
NoozNooz42

3
Уловка su-s - золото. Я использую его все время для системных учетных записей, для которых мне нужно проверить права доступа, например, для apache, nobody и т. Д. Я обычно делаю su - user -s / bin / bash. Необязательный аргумент - может использоваться для предоставления среды, аналогичной той, которую пользователь ожидал бы при непосредственном входе пользователя в систему.
dmourati

2
Если вам нужны переменные окружения (например , из / и т.д. / профиль) , который будет загружен, проходя дополнительный тире будет делать это:su - -s /bin/bash user
Leons

13

Если вы все еще хотите, чтобы su работал, вы можете использовать sudo -u [username]или передать -s /bin/bashsu как временную оболочку. Они оба делают то же самое в отсутствие оболочки в /etc/passwd.


7

Если у учетной записи нет пароля ( passwd -d username ), они не могут войти в систему в интерактивном режиме (консоль, SSH и т. Д.). Если у них есть корректная оболочка, su все равно будет работать. Обратите внимание на «в интерактивном режиме», хотя; если кто-то решит настроить пару ключей SSH для учетной записи, она будет работать!


пользователь должен иметь действительную оболочку для su? Я почти уверен, что вы все еще находитесь в той же оригинальной оболочке после того, как вы 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предотвратит KeyPair / пароль входа через SSH.

хотя обычно я делаю что-то подобное AllowGroup sshили что-то в этом роде и явно добавляю людей, которым нужен ssh-доступ к этой группе.

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


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

1

Как я уже упоминал в комментарии, я думаю, что вы все равно можете использовать su для учетной записи с неверной оболочкой. Поэтому, если вы установите для оболочки пользователя значение / dev / null или что-то вроде оболочки bin, вы сможете использовать su для этого пользователя ... но любая попытка войти любым способом приведет к выходу из строя ...


1

отредактируйте / etc / shadow, добавив! к началу хэша пароля.

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

При обеспечении новой установки это первое, что я делаю после установки sudo, поэтому никто не может использовать пользователя root для входа в систему или входа в систему через ssh, пользователи sudo могут по-прежнему работать от имени пользователя root.


0

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

# passwd -d myuser

0

Предполагая, что вы хотите только su пользователя от учетной записи root и отключить все другие доступ:

Используйте это (запустить от имени root):

usermod -e 1 -L user

Это отключает вход в систему с паролем (как советовали многие другие ответы), но также истекает срок действия учетной записи . Вы не можете войти в просроченную учетную запись, например, с помощью ключей SSH. Вы все еще можете su user, хотя он будет отображать уведомление о том, что срок действия учетной записи истек.


0

Знание того, какой механизм лучше, зависит от требований. Если вы знаете требования, вы можете выбрать подходящий механизм. Все приведенные выше ответы действительны для некоторого набора требований.

Вы хотите ограничить только доступ по SSH? Вам нужен доступ к почте или ssh? Доступ только из рута?

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.