Я работал над проблемой в течение прошлой недели или около того, и у меня заканчиваются идеи.
Я добавил нового пользователя на свой Centos 7 VPS для сервера git и (по совету нескольких статей) поместил домашний каталог пользователя внутрь /var
вместо того /home
.
Затем я попытался использовать ssh для входа в систему этого пользователя, и он работал правильно. тем не мение, аутентификация с открытым ключом сделала не работать правильно. В процессе отладки я в итоге сделал git
пользователь и основной пользователь идентичны во всех отношениях - они оба были sudoers, у них были одинаковые .ssh
каталоги, с такими же authorized_keys
файлы, и я даже переместил git
пользователь /home
, но безрезультатно.
Для дальнейшего тестирования я создал двух новых пользователей: test1
и test2
. test1
домашний каталог находился в /home
, и test2
домашний каталог находился в /var
. Конечно же, pubkey auth работал для test1
и нет test2
. Я не думаю, что это проблема с разрешениями, потому что /var
имеет те же разрешения, что и /home
есть, и все пользовательские каталоги имеют правильные разрешения. Кроме того, я очень недоумеваю, что оригинал git
пользователь не принял pubkey auth даже после того, как переместил его в /home
.
Если я запускаю ssh в подробном режиме, я вижу, что задержка происходит после отправки ключа:
debug1: Offering RSA public key: /home/user/.ssh/foo.key
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
При подключении к основному пользователю или к test1
, действует иначе:
debug1: Offering RSA public key: /home/user/.ssh/foo.key
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
Единственная подсказка, которую я нашел: я получаю идентичный ответ на первый (ожидание ответа, затем пропуск аутентификации pubkey) при попытке войти в систему как несуществующий пользователь. Итак, машина делает git
пользователь невидим для внешнего мира? Зачем ему это делать?
Обычно я могу справиться с этим, но думаю, что на этот раз я в значительной степени озадачен. Спасибо за любую помощь!
Это проблема SELinux. Перемещение файлов в файловой системе работает нормально, если у вас нет такого уровня безопасности, но SELinux устанавливает метки для каждого файла по умолчанию на основе их пути.
Когда вы перемещаете некоторые каталоги специального назначения, убедитесь, что они имеют правильные метки. В этом случае есть chcon
с участием --reference
вариант, который хорошо служит в данном случае:
chcon --reference /home/user/.ssh/ -R /var/user/.ssh/
Еще лучшим способом было бы написать собственную политику и загрузить ее в ядро, но это выходит за рамки этого ответа.