質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

2379閲覧

nginxの実行ユーザーnginxでsshログインできない?

query1000

総合スコア5

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2021/10/25 13:54

編集2021/10/26 03:26

お世話になります。
AWS+Ubuntu+nginxでWebサーバーを構築中です。

概要:
nginxの実行ユーザーnginxでssh接続するため、ubuntuと同じ公開鍵をコピーしたが、Permission denied (Publlic keys)というエラーになる。

詳細:
現状では、ローカルのLinuxから、デフォルトのIAMユーザーubuntuで、以下のようにログインできています。

$ ssh ubuntu@(インスタンスのIPアドレス) -i (秘密鍵pemファイル)

default.confでドキュメントルートを以下のように設定しています。

root /usr/share/nginx/foo;

このディレクトリの所有者がnginxになっているので、ファイルを直接アップロードしたり編集したりすることが出来ません。
そこで、nginxでsshログイン出来るようにしたいと思いました。

以下の記事を参考にして
https://ja.amimoto-ami.com/how-to-ssh-as-nginx-user/
ubuntuでsshログインして、以下のように作業しました。

(1) ログインシェルを設定

$ sudo /usr/sbin/usermod -s /bin/bash nginx

(2) パスワードを設定

$ sudo passwd nginx

(3) nginxを停止

$ sudo systemctl stop nginx

(4) nginxのホームディレクトリをドキュメントルートにした

$ sudo /usr/sbin/usermod -d /usr/share/nginx/foo nginx

(5) nginxを停止

$ sudo systemctl start nginx

(6) nginxの公開鍵を置く場所を作成

$ sudo mkdir /usr/share/nginx/foo/.ssh

(7) ubuntuの公開鍵をnginx用にコピー

$ sudo cp /home/.ssh/authorized_keys /usr/share/nginx/foo/.ssh

(8) nginx用の公開鍵の所有者を変更

$ sudo chown nginx /usr/share/nginx/foo/.ssh

(9) nginx用の公開鍵のグループを変更

$ sudo chgrp nginx /usr/share/nginx/foo/.ssh

nginxユーザーのパスワードファイルは以下のようになっています。

$ less /etc/passwd | grep nginx nginx:x:???:???:nginx user,,,:/usr/share/nginx/foo:/bin/bash

公開鍵の存在は以下のように確認しました。

$ ls -la /usr/share/nginx/foo/.ssh/authorized_keys -rw------- 1 nginx nginx 390 10月 25 16:34 /usr/share/nginx/foo/.ssh/authorized_keys

また、もともとあった/home/ubuntu/.ssh/authorized_keysの中身と同じであることも確認しました。

これで、以下のようにログインを試みましたが、エラーになりました。

$ ssh nginx@(インスタンスのIPアドレス) -i (秘密鍵pemファイル) nginx@(インスタンスのIPアドレス): Permission denied (publickey).

なお、ubuntuとしては今もログイン出来ています。

nginxとしてログインできない原因は何でしょうか。
よろしくおねがいします。

★2021-10-26補足
(1)この質問への編集・追記依頼として、ubuntuユーザーが編集する方法も取れるというご意見をいただきましたが、一般ユーザーに権限を与えることになるのでは?と思い、判断を保留中です。
(2)ベストアンサーにいただいた回答のコメントの中に、Document Root/およびDocument Root/.ssh/のパーミッションを変えたらどうなりますかとご意見をいただいて、変更したところ、目的の動作が出来ましたので、そのまま作業を進めることを検討中です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2021/10/25 15:40

わざわざnginxユーザにログインシェルを設定しなくても、ubuntuユーザ/グループのファイルにnginxユーザ/グループの参照権限をつけるか、DocumentRootの以下のファイル・ディレクトリの所有者をubuntuにしてnginxユーザには参照権限をつければよいと思うのですがどうでしょう? nginxユーザはnginxがファイルやディレクトリにアクセスするときに使うものなのであまり目的外の用途で使わないほうがよいかと思いますが…。
query1000

2021/10/26 00:38

ありがとうございます。 「ubuntuユーザ/グループのファイルにnginxユーザ/グループの参照権限をつける」 「DocumentRootの以下のファイル・ディレクトリの所有者をubuntuにしてnginxユーザには参照権限をつける」 というのは、ubuntuユーザ/グループのファイルに一般ユーザーの参照権限を付けるということでいいでしょうか。 また、fcgiwrapを使ってCGIスクリプトを動かす予定ですが、その場合nginxユーザーの実行権限も付けなければいけないのでしょうか。 (Xユーザー/グループが所有権を持つファイルに、一般ユーザー全員ではなく、特定のユーザーYに権限を付与する方法があればいいのですが、調べがつきませんでした) DocumentRoot以下のファイルに、一般ユーザーの権限を増やすのもまた、脆弱性になると思うので、nginxユーザーにログインを許す方がいいのか、判断がつきませんでした。。
yu_1985

2021/10/26 07:12

> ubuntuユーザ/グループのファイルに一般ユーザーの参照権限を付けるということでいいでしょうか。 ここでいう「一般ユーザー」が何を指しているのかわかりませんが、そもそもubuntuユーザも一般ユーザです。(というか、rootでないユーザは一般ユーザです) 別に参照権限だけであれば全てのユーザにつけたところで大して問題はないと思いますが、気にするのであればnginxユーザをubuntuグループに追加する、とかで対応は可能かと思います。 > fcgiwrapを使ってCGIスクリプトを動かす予定ですが、その場合nginxユーザーの実行権限も付けなければいけないのでしょうか。 どこの権限を指してますか? DocumentRoot以下のファイルの実行権限だったら関係ないように思えます。 > DocumentRoot以下のファイルに、一般ユーザーの権限を増やすのもまた、脆弱性になる どのような脆弱性を想定していますか? DocumentRoot以下のファイルは基本的に外部に公開するものなのである程度の権限が必要なはずです。 参照権限だけに絞れば編集は不可能なのでそれほど問題はありません。問題があるかどうかはポリシー次第です。
query1000

2021/10/26 07:20

>ここでいう「一般ユーザー」が何を指しているのかわかりませんが、そもそもubuntuユーザも一般ユーザです。(というか、rootでないユーザは一般ユーザです) ls -laでパーミッションを表示させた時、rwxrwxRWXと表示されるところの、RWX(ファイル作成者でもなく、ファイル作成者と同じグループでもない人)という意味で書きました。適切な用語法が分かりませんでした。 >気にするのであればnginxユーザをubuntuグループに追加する、とかで対応は可能かと思います。 なるほどです。その方面で検討します。 >どのような脆弱性を想定していますか? ここが正直わからないんです。。犯罪の手口も日進月歩と聞き及んでいるので、ベストプラクティス込みでご質問させていただきます。 よく考えたらubuntu、nginxというユーザー名も、.sshというフォルダ名、authorized_keysというファイル名も脆弱性のような気もしてきましたw いずれにせよ、知見が得られて良かったです。 ありがとうございます。
yu_1985

2021/10/26 07:44

何でもかんでも「脆弱性」という言葉にしてしまうのは中身が抽象化されてしまって結局理解が進まないのであまり良くないと思います。 それを気にするのならまずサーバのアクセス自体を絞ったりとかそういうところも含めて考えるべきでしょう。 何ができるとどのように危ないのかをきちんと考えるようにしましょう。 ちなみに.sshというディレクトリやauthorized_keysというファイルはsshdが使用しているので、名前や権限を下手にいじるとSSHログインできなくなって泣きを見ます。
guest

回答1

0

ベストアンサー

$ less /etc/passwd | grep nginx nginx:x:???:???:nginx user,,,:/usr/share/foo:/bin/bash

を見るに、ホームディレクトリが/usr/share/fooになってるようですが、/usr/share/nginx/fooにしないといけないのでは?
(4)のコマンドが正しく実行されていないんですかね?

投稿2021/10/25 14:13

AbeTakashi

総合スコア4853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

query1000

2021/10/25 14:16

ありがとうございます。申し訳ありません! これは、手動で編集したときのミスで、実際のパスワードファイルは正しく/usr/share/nginx/fooになっています。 (セキュリティ上現実と変えました。。) 紛らわしいので質問を書き換えます。 ご指摘ありがとうございました!
AbeTakashi

2021/10/25 14:23

なるほど、ではsshdのログには何か出てませんかね Ubuntuなら /var/log/auth.log かな? 何かしらエラーがあればもう少し詳細なログが出ている可能性があります。
AbeTakashi

2021/10/25 14:34

あとはパーミッションというエラーが出てるのであれば、/usr/share/nginx/foo ディレクトリおよび/usr/share/nginx/foo/.ssh ディレクトリの所有者およびパーミッションも怪しいかもしれません。特に.sshディレクトリは700じゃないとダメだと思います(その辺を設定した形跡がないため、念のため確認してみてください)。
query1000

2021/10/26 00:25

ありがとうございました。 /usr/share/nginx/fooを755に、/usr/share/nginx/foo/.sshを700にしたら動きました! 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問