docker上でnginx,php(php-fpm),ubuntuコンテナを作成して、php上からubuntuコンテナにSSHする際にハマったので、備忘録を記載。
今回は私がハマったところのみを記載するので、基本的なSSH接続方法等はスルーします。
基本的なSSH接続の方法については以前記載しておりますので、良ければ見てください。
今回ハマったエラー
file_get_contents(/home/{ユーザ名}/.ssh/id_rsa): failed to open stream: Permission denied
今回はこのパーミッションエラーにハマりました。
結論
/usr/local/etc/php-fpm.d/www.conf PHPのデフォルトユーザを変更しよう!
まず初めに /usr/local/etc/php-fpm.conf をいじって、www.confを参照するように変更
下の方に下記コードが書かれている(変更前はちょっと間違っているかも。変更済みで見当たらなかったから記憶を頼りに書いています。)
# コメントアウトされている
:include=etc/fpm.d/*.conf
これをコメントアウトを外して、下記の通りにする。
最悪見つからなければ一番下とかに下記一文を追記しても良いかもしれない。
include=etc/php-fpm.d/*.conf
そのあとに /usr/local/etc/php-fpm.d/www.confを編集する。
※もしもphp-fpm.dディレクトリが無ければ、php-fpm.dディレクトリ,www.confファイルを自作する。
user = www-data
group = www-data
この www-data を秘密鍵の所有者ユーザに変更する。今回の場合はtestphpユーザ。
user = testphp
group = testphp
※所有者の確認方法
ls id_rsa -la で所有者とグループが表示される
# ls id_rsa -la の結果
# |所有者 |グループ|
-rw------- 1 testphp testphp 2610 May 17 03:00 id_rsa
エラーの原因
www-dataユーザでtestphpユーザの秘密鍵を見に行こうとしていて、パーミッションエラーが出ていた(当たり前)。
phpのexecコマンド等php上からだと上記の**www.conf**で設定されているデフォルトユーザ(www-data)で実行される。
私はそれがわからず必死にパーミッションを777とかにしていた。
ちなみに秘密鍵のパーミッションを777にするとセキュリティがガバガバすぎと怒られ、鍵を使ったSSH接続ができなくなる。
怒られているエラーメッセージ
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/testphp/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/testphp/.ssh/id_rsa": bad permissions
おまけ(ここからは推測なので間違っているかも)
www.confを直接いじるのはNGかもしれない。
今回私は開発段階で設定ファイルをいじっていたのと、めんどくさかったので直接www.confをいじったが、本来はダメな気がする。
基本的にwww.confを新たな名前でコピーして、それを編集するというの方法が正しいかもしれない。
ファイルの頭に00とかを付けたら優先的に読み込んでくれそうな気がする。
www.confをいじらずに鍵の権限をいじることで行けるかもしれない。
最初は私も鍵の権限をいじる方法を試していたが、なんかうまくいかなかった。
なんか、www-dataユーザのグループをtestphpと同じにして、色々したらいけそうな気もする。
そもそも違うユーザの鍵を使ってSSH接続するというのが無理かもしれないが。