Существующие ответы либо неполные, либо небезопасные.Если вы поместите свой каталог .ssh
в домашний каталог пользователя apache (/var/www
), то это также, скорее всего, будет обслуживать содержимое этого каталога и, таким образом, предоставлять ваш закрытый ключ ssh общедоступной сети.Чтобы предотвратить это, вы должны настроить apache , а не для обслуживания каталога .ssh
, но ни один из существующих ответов не объясняет, как это сделать.
Я бы также сказал, что этовсе еще опасно, чтобы ваш каталог .ssh
был подкаталогом вашего общедоступного www-root, потому что даже если вы добавите правило в вашу конфигурацию apache, обновление сервера или другие несвязанные конфигурации могут переопределить это правило без вашего ведома.
Итак, вот ответ, который помещает ключ в другое место, где он по умолчанию не обслуживается apache.Нет даже необходимости становиться пользователем www-data
, с которым борются другие.
Во-первых, найдите домашний каталог нашего пользователя apache, например, заглянув в /etc/passwd
и ищаwww-data
user или как называется apache-пользователем вашего дистрибутива.Вероятно, домашний каталог /var/www
.
Затем запустите (заменив /var/www
домашним каталогом пользователя apache в вашей настройке):
$ mkdir "$HOME/www-data.ssh"
$ ssh-keygen -q -t rsa -f "$HOME/www-data.ssh/id_rsa" -N ""
$ chown -R www-data:www-data "$HOME/www-data.ssh"
$ mkdir /var/www/.ssh
$ cat << END > /var/www/.ssh/config
> Host *
> IdentityFile $HOME/www-data.ssh/id_rsa
> END
$ chown -R www-data:www-data /var/www/.ssh
Теперь ваш www-data
пользовательбудет использовать ключ ssh в $HOME/www-data.ssh/id_rsa
для всех своих соединений ssh, и, поскольку ваш $HOME
, вероятно, отличается от /var/www
, этот каталог не будет обслуживаться.Поэтому, даже не добавляя никаких пользовательских правил в apache, пользователи смогут видеть ваш .ssh/config
, но не смогут получить доступ к закрытому ключу, на который он указывает.Тем не менее, ваш www-data
пользователь будет знать, как это сделать.