Назад | Перейти на главную страницу

Selinux в разрешающем режиме, авторизация на основе ssh-ключа и заблокированная учетная запись

Я заметил кое-что странное относительно входа в систему на основе ключа ssh и selinux в снисходительный Режим.

Позвольте представить вам настройку: сервер представляет собой обновленный Centos 6.4 x86_64.

Создаем пользователя без пароля (тогда пользователь будет заблокирован):

# useradd testuser
# passwd -S testuser
testuser LK 2013-05-03 0 99999 7 -1 (Password locked.)

Затем настраиваем ssh-ключи:

# install -d -m 700 -o testuser -g testuser /home/testuser/.ssh/
# install -m 600 -o testuser -g testuser /root/.ssh/id_rsa.pub /home/testuser/.ssh/authorized_keys

Проверим статус selinux

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

Тогда попробуем авторизоваться как testuser:

# ssh testuser@localhost
Last login: Fri May  3 13:26:32 2013 from ::1
$

Оно работает ! Теперь мы устанавливаем Selinux в разрешающий режим

# setenforce 0
# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

И пробуем войти снова:

# ssh testuser@localhost
testuser@localhost's password:

SSH не принимает ключ и запрашивает пароль!

Вопрос: Это ошибка?

РЕДАКТИРОВАТЬ: после restorecon -Rv / home у меня есть

$ ls -laZ ~/.ssh/
drwx------. user wheel unconfined_u:object_r:ssh_home_t:s0 ./
drwxr-x---. user wheel unconfined_u:object_r:user_home_dir_t:s0 ../
-rw-------. user wheel system_u:object_r:ssh_home_t:s0  authorized_keys

$ getsebool -a | grep 'ssh'
allow_ssh_keysign --> off
fenced_can_ssh --> off
ssh_chroot_full_access --> off
ssh_chroot_manage_apache_content --> off
ssh_chroot_rw_homedirs --> off
ssh_sysadm_login --> off

РЕДАКТИРОВАТЬ: вот содержимое / var / log / secure

Jun 13 16:30:51 dhcp-240 sshd[13681]: User testuser not allowed because account is locked
Jun 13 16:30:51 dhcp-240 sshd[13682]: input_userauth_request: invalid user testuser

Итак, я нашел проблему. Похоже, это действительно проблема конфигурации.

Если sshd_config содержит директиву UsePAM no тогда демон ssh не принимает ключ пользователя и не запрашивает пароль.

С участием UsePAM yes вход через ключи работает во всех случаях (разрешающий или принудительный SELINUX, заблокированная учетная запись пользователя или нет)

Я считаю, что это не имеет ничего общего с SELinux и все, что связано с установкой режима 644 в ваш файл ~ / .ssh / authorized_keys. Сам каталог ~ / .ssh должен иметь режим 700, а файлы в этом каталоге должны иметь режим 600.

Согласно OpenSSH FAQ:

3.14 - Я скопировал свой открытый ключ в authorized_keys, но аутентификация с открытым ключом все еще не работает.

Обычно это вызвано тем, что права доступа к файлам в $ HOME, $ HOME / .ssh или $ HOME / .ssh / authorized_keys более разрешены, чем позволяет sshd по умолчанию.

В этом случае ее можно решить, выполнив на сервере следующее.

$ chmod go-w $HOME $HOME/.ssh
$ chmod 600 $HOME/.ssh/authorized_keys
$ chown `whoami` $HOME/.ssh/authorized_keys

Если это невозможно по какой-либо причине, альтернативой является установка StrictModes no в sshd_config, однако это не рекомендуется.

Вам также может потребоваться выполнить «restorecon -Rv / root» и «restorecon -Rv / home». Взгляните на владельца каталога и метки SELinux с помощью "ls -lZ".