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

93

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

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

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

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

NoozNooz42
источник

Ответы:

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 для учетной записи, она будет работать!

astrostl
источник
пользователь должен иметь действительную оболочку для 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) можно использовать для управления доступом для входа в систему.

ABZ
источник
1

как говорили другие;

DenyUser usernameили DenyGroup groupnameв sshd_configпредотвратит KeyPair / пароль входа через SSH.

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

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

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

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

Брайан Постов
источник
1

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

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

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

snic.io
источник
0

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

# passwd -d myuser
Франсуа Феже
источник
0

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

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

usermod -e 1 -L user

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

artfulrobot
источник
0

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

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

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

BillThor
источник