аутентификация с открытым ключом завершается неудачей ТОЛЬКО, когда sshd является демоном

33

Я понятия не имею, как это происходит. Дистрибутив - Scientific Linux 6.1, и все настроено для аутентификации через открытый ключ. Тем не менее, когда sshd работает как демон (запуск службы sshd), он не принимает открытые ключи. (Чтобы получить этот фрагмент журнала, я изменил скрипт sshd, добавив опцию -ddd)

debug1: trying public key file /root/.ssh/authorized_keys
debug1: restore_uid: 0/0
debug1: temporarily_use_uid: 0/0 (e=0/0)
debug1: trying public key file /root/.ssh/authorized_keys2
debug1: restore_uid: 0/0
Failed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug3: mm_answer_keyallowed: key 0x7f266e1a8840 is not allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
debug3: Wrote 64 bytes for a total of 1853
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 1

Если sshd запущен в режиме отладки /usr/sbin/sshd -ddd, аутентификация работает так:

debug1: trying public key file /root/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
debug1: matching key found: file /root/.ssh/authorized_keys, line 1
Found matching RSA key: d7:3a:08:39:f7:28:dc:ea:f3:71:7c:23:92:02:02:d8
debug1: restore_uid: 0/0
debug3: mm_answer_keyallowed: key 0x7f85527ef230 is allowed
debug3: mm_request_send entering: type 22
debug3: mm_request_receive entering
debug3: Wrote 320 bytes for a total of 2109
debug2: userauth_pubkey: authenticated 0 pkalg ssh-rsa
Postponed publickey for root from xxx.xxx.xxx.xxx port xxxxx ssh2
debug1: userauth-request for user root service ssh-connection method publickey
debug1: attempt 2 failures 0

Любые идеи?? Кто-нибудь видел что-нибудь подобное?

Заметки:

Права доступа к файлам были дважды проверены:

# ll -d .ssh
drwx------. 2 root root 4096 Oct 14 10:05 .ssh
# ll .ssh
total 16
-rw-------. 1 root root  786 Oct 14 09:35 authorized_keys
-rw-------. 1 root root 1675 Oct 13 08:24 id_rsa
-rw-r--r--. 1 root root  393 Oct 13 08:24 id_rsa.pub
-rw-r--r--. 1 root root  448 Oct 13 12:51 known_hosts

Меня спросили, может ли sshd получить доступ к файлам root в «режиме демона». Ближайший ответ, который я получаю на этот вопрос:

# netstat -ntap | grep 22
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      19847/sshd 
# ps -ef | grep 19847
root     19847     1  0 09:58 ?        00:00:00 /usr/sbin/sshd

Если sshd работает от имени пользователя root, я не знаю, как получить доступ к его собственным файлам невозможно. Может ли SELinux быть причиной?

user666412
источник
1
Сценарий инициализации sshd делает что-нибудь интересное? (Должен быть /etc/init.d/sshd?), Что вы не делаете в командной строке? Вместо 'service sshd start' попробуйте 'sh -x /etc/init.d/ssh start'.
PT

Ответы:

42

Да, скорее всего, причиной является SELinux. .sshРеж вероятно помечаются. Посмотрите /var/log/audit/audit.log. Это должно быть помечено ssh_home_t. Проверьте с ls -laZ. Беги, restorecon -r -vv /root/.sshесли нужно.

Марк Вагнер
источник
1
Да, SELinux был причиной: type = AVC msg = аудит (1318597097.413: 5447): avc: отказано {read} для pid = 19849 comm = "sshd" name = "authorized_keys" dev = dm-0 ino = 262398 scontext = undefined_u : system_r: sshd_t: s0-s0: c0.c1023 tcontext = undefined_u: object_r: admin_home_t: s0 tclass = file Работает после запуска «restorecon -r -vv /root/.ssh». Большое спасибо.
user666412 14.10.11
1
СПАСИБО, СПАСИБО за исправление командной строки selinux, которое я пытался найти целую вечность, почему я мог использовать ssh как root для своего сервера redhat enterprise 6.2 с использованием аутентификации по ssh ключу, но я не смог ssh войти как пользователь без полномочий root без необходимости вводить пароль. «ssh -v» вообще ничего необычного не указал. Я проверил и перепроверил защиту файлов в /home/example/.ssh Это было до тех пор, пока я не запустил "/ usr / sbin / sshd -d" и по какой-то причине, которая работала нормально, я понял, что происходит что-то еще, и попробовал другой поиск Google и нашел это. Итак, симптомы были, я мог ssh as ro
Paul M
1
Я должен был сделать это на всей файловой системе, т.е. restorecon -r /YMMV.
Ирфи
1
Я попробовал это - но все еще не работает. в журнале аудита у меня есть type=AVC msg=audit(1434642809.455:94717): avc: denied { search } for pid=27032 comm="sshd" name="/" dev=dm-2 ino=2 scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:file_t:s0 tclass=dir- не уверен, что это значит
Yehosef
1
Ответ был в name="/"- я должен был запустить, restorecon -r /как предложил @Irfy.
Yehosef
3

Я была такая же проблема. В моем случае не работали restorecon и chcon.

Я не хотел отключать selinux. После долгих исследований я наконец понял, что это потому, что мой домашний каталог был смонтирован откуда-то еще (NFS). Я нашел этот отчет об ошибке, который дал мне понять.

Я побежал:

> getsebool use_nfs_home_dirs
use_nfs_home_dirs --> off

чтобы убедиться, что use_nfs_home_dirs выключен, а затем:

sudo setsebool -P use_nfs_home_dirs 1

включить это.

Теперь я могу подключиться к моей машине по ssh, используя мой ключ и не вводя пароль. Переключение логического значения use_home_nfs_dirs было тем, что мне потребовалось.

Gerard
источник
1

Чтобы добавить к ответу Марка Вагнера, если вы используете собственный путь к домашнему каталогу (т.е. нет /home), вам нужно убедиться, что вы установили контекст безопасности SELinux. Для этого, если у вас есть домашние каталоги пользователей, например /myhome, выполните:

semanage fcontext -a -e /home /myhome
restorecon -vR /myhome
DavidArndt
источник
Если вы используете CentOS, вам нужно запустить это, чтобы получить semanage:sudo yum install policycoreutils-python
sm4rk0
0

Похоже, вы используете разные ключи при тестировании соединений, 0x7f266e1a8840 против 0x7f85527ef230. Попробуйте подключиться с помощью 'ssh -v example.com' к sshd, работающему в качестве демона и в режиме отладки, и найдите ключи, используемые ssh, в строке «Предложение открытого ключа RSA».

Йохан Нильссон
источник
Да, были id_rsa и id_dsa. Ключ DSA пропал, и я проведу тест заново.
user666412 14.10.11
Значение, указанное в, debug3: mm_answer_keyallowed: key 0xFFFFFFFFFFбудет меняться каждый раз, когда sshd получает новое соединение. Чтобы убедиться в этом, найдите сервер, на котором работает SSH, включите sshd LOGLEVEL для debug3, перезапустите sshd, запустите, tail -f /var/log/secure |grep mm_answer_keyallowedа затем войдите в систему несколько раз, ожидая несколько секунд (или минут) между каждым соединением. Вы увидите, что значение меняется каждый раз. И на самом деле это выглядит как счетчик для меня.
Стефан Ласевский,