LINUX.ORG.RU
решено ФорумAdmin

Авторизация SSH-ключа


0

1

Столкнулся со странным поведением OpenSSH.

Есть два сервера: на одном стоит CentOS 5.5 (назовём его foo, OpenSSH_4.3p2), на другом — CentOS 6.0 (назовём его bar, OpenSSH_5.3p1). Настраиваю беспарольный вход через SSH с сервера foo на сервер bar.

На сервере bar есть пользователь eveel:eveel, где в ~/.ssh/authorized_keys правильно прописан публичный ключ правильного пользователя сервера foo. Права: на ~/.ssh — 0700, на ~/.ssh/authorized_keys — 0644 (более того, по команде getfacl выдаётся то же самое). Всё чудесно работает: входит и выходит.

Теперь проблема. На том же самом сервере есть пользователь oneadmin:oneadmin (да, поднимаю OpenNebula), для которого тоже очень нужна авторизация по ключу, а не по паролю. Его домашняя директория не находится в /home, она расположена по адресу /srv/cloud/one, причём права прописаны аналогично пользователю eveel. Тем не менее, никакая авторизация не работает.

Что следует проверить? Если важны логи, то они есть: http://pastie.org/private/y84qbvcesf3r1oprc8fhtq (и дело точно не в строке №7).

★★

мммм... нескромный вопрос, а хрена ты логинишься под пользователем oneadmin, а ключи ищутся в /home/eveel/.ssh(строка №37)? в passwd точно домашняя папка для oneadmin прописана верно?

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

> хрена ты логинишься под пользователем oneadmin, а ключи ищутся в /home/eveel/.ssh

Ничего криминального в этом нет. Ключ пользователя eveel@foo (строка 37) прекрасно входит в eveel@bar, но не пускается в oneadmin@bar. Домашний каталог прописан верно, насколько я могу об этом судить:

oneadmin:x:502:502::/srv/cloud/one:/bin/bash

Куда ещё стоит копать?

eveel ★★
() автор топика
Ответ на: комментарий от power

> ssh -vv -i /srv/cloud/one/.ssh/ключ bar

На тазике foo нет ничего, связанного с OpenNebula и oneadmin, там только пользователь eveel и его ключи. При попытке подключиться к eveel@bar всё работает, а при попытке подключиться к oneadmin@bar ничего не работает (ключи в порядке).

Сейчас попробовал вот ещё какую штуку. Зашёл от рута на сервер bar, переключил пользователя на oneadmin и сгенерировал ключ с пустым паролем в ~/.ssh/id_rsa. Прописал его же в ~/.ssh/authorized_keys и проставил нужные права. Пытаюсь дёрнуть ssh -vv -i /srv/cloud/one/.ssh/id_rsa localhost (то есть будучи oneadmin@bar зайти на oneadmin@bar). Забудем о сервере foo, дело не в нём.

Не получилось: http://pastie.org/private/nw13xw5fs4ck4tosfqntg

Чёрт возьми, видит же ключ! Пути в порядке, права на ~/.ssh, список авторизованных ключей, а также на пару ключей id_rsa тоже вполне себе правильные.

Меня троллят ребята из CERN? :)

eveel ★★
() автор топика
Ответ на: комментарий от Deleted

> В сторону PAM.

Ни разу с ним не возился. Что именно там стоит проверить?

eveel ★★
() автор топика

Кстати, а не может ли это ограничиваться какой-нибудь дефолтной политикой SELinux (enforcing, targeted)? Типа, не пускать чуваков по SSH, если у них домашняя директория не расположена внутри /home?

eveel ★★
() автор топика
Ответ на: комментарий от eveel

>eveel@foo

eveel@bar


а, ну так бы сразу и сказал. Скопируй содержимое /home/eveel/.ssh с сервера bar поверх в /home/oneadmin/.ssh(на сервер bar естественно) и проверь, все ли работает...

Pinkbyte ★★★★★
()
Ответ на: комментарий от eveel

Сообщения Selinux надо искать в /var/log/audit/audit.log

И можно попрбовать посмотреть контекст файлов и сравнить с тем, что в /home.

Можно запустить sshd с отладкой (временно, чтобы слушал другой порт и посмотреть сообщения).

mky ★★★★★
()
Ответ на: комментарий от mky

> Сообщения Selinux надо искать в /var/log/audit/audit.log

Здесь чисто и ничего интересного :(

И можно попрбовать посмотреть контекст файлов и сравнить с тем, что в /home.

Пробовал, не помогло.

Можно запустить sshd с отладкой (временно, чтобы слушал другой порт и посмотреть сообщения).

Указал DEBUG_3 в конфиге основного sshd, перезагрузил конфиг, никаких вменяемых сообщений об ошибках не увидел.

eveel ★★
() автор топика
Ответ на: комментарий от Pinkbyte

> а, ну так бы сразу и сказал. Скопируй содержимое /home/eveel/.ssh с сервера bar поверх в /home/oneadmin/.ssh(на сервер bar естественно) и проверь, все ли работает...

Не помогло.

eveel ★★
() автор топика

Стыдно признаться, но решение найдено: несмотря на все мои попытки менять контекст SELinux, играться с правами, отключать SELinux насовсем и тупо копировать содержимое ~/.ssh, ничего не помогло.

Это ужасное решение. Просто отвратительное. Я создал нового юзера, снёс старого, переименовал нового в oneadmin, скопировал туда ~/.ssh и всё заработало. Какого чёрта?! :(

eveel ★★
() автор топика
Ответ на: комментарий от eveel

Вот ещё интересная особенность:

root@bar# usermod -d /home/crap -m oneadmin
eveel@foo$ ssh oneadmin@bar => работает

Стоит только вернуть его обратно и...

root@bar# usermod -d /srv/cloud/one -m oneadmin
eveel@foo$ ssh oneadmin@bar => не работает

eveel ★★
() автор топика
Ответ на: комментарий от eveel

...и ваше очко переходит в зрительный зал! Вообщем, всем спасибо, проблема решилась окончательно.

Для работы в директории /srv/cloud/one нужно было прописать соответствующий контекст SELinux:

# cd /srv/cloud/one
# chcon -R unconfined_u:object_r:user_home_t:s0 .
# chcon unconfined_u:object_r:user_home_dir_t:s0 .
eveel ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.