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

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

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

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

SSH

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

12170閲覧

Nginxの公開ディレクトリのパーミッションについて

takumi9942

総合スコア24

nginx

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

SSH

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/02/23 10:48

編集2017/02/24 02:47

###前提・実現したいこと
VPSに「CentOS7.3 + Nginx1.10.2 + php7.1.2」の環境を作成し、ウェブページが公開できる状態になったのですが、公開ディレクトリ(/usr/share/nginx/html/)の所有者をどうすればよいのかわかりません。

公開ディレクトリにPHPで書き込めて、SFTPでもアップロード出来るようにしたいです。
皆さんはどのように設定しているのでしょうか?

###発生している問題・エラーメッセージ

Error #3 (/usr/share/nginx/html/test/test.PNG):Permission denied

###試したこと
ファイルをSFTPを使用してアップロードしているのですが、アップロードするには公開ディレクトリのownerが自分のユーザーに設定されている必要があります。しかしownerを自分に設定してしまうとPHPからファイルを書き込みできなくなってしまいます。

一方ownerをnginxに変更すると、PHPからファイルを書き込むことはできるのですが、SFTPからアクセスすることができなくなってしまいます。

現在自分のユーザーのグループがwheelで、NginxのグループはNginxになっています。

一旦ホームディレクトリにアップロードした後、sudo権限でmvすれば良いのですが、出来ればSFTPで直接操作できるようにしたいです。

###補足情報(言語/FW/ツール等のバージョンなど)
CentOS 7.3
Nginx 1.10.2
PHP 7.1.2
SFTPクライアント MobaXterm

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

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

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

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

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

guest

回答3

0

基本的な注意事項がありますのでこれは守ってください。

  • コンテンツが置かれるディレクトリは、Webサーバやアプリケーション(PHPなど)が書き込める権限を与えてはいけません。
  • アプリケーションからコンテンツのディレクトリ内にファイルを書き込む必要がある場合は、書き込みを行うディレクトリを限定し、そのディレクトリにのみアプリケーションから書き込める権限を付けてください。
  • 上記のアプリケーションから書き込みが出来るディレクトリでは、静的コンテンツのサーブのみが出来るように(スクリプト類が実行されないように)Webサーバを設定してください。

安易にコンテンツのディレクトリにWebサーバやWebアプリから書き込める権限を付けてしまうと、WebサーバやWebアプリの脆弱性を経由しファイルが作成され、コンテンツ改竄や任意コード実行などの被害に繋がります。

単純に解決するには、コンテンツのディレクトリの所有者を自分(SFTPでファイルを転送するユーザ)にすれば良いと思います。書き込み可能にするディレクトリはグループをnginxのグループにし、グループの書き込み権限を追加します。

投稿2017/02/24 04:20

suzukis

総合スコア1449

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

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

takumi9942

2017/02/24 04:47

回答ありがとうございます! 安全性についてほとんど考えていませんでした! 書き込みが必要なディレクトリだけnginxグループにしておきたいと思います
guest

0

ベストアンサー

以下の方法ではどうでしょうか。

1. SFTPユーザーを nginx グループに所属させる
(サブグループに nginx を追加する)

# id sftpuser uid=1000(sftpuser) gid=10(wheel) groups=10(wheel) # usermod -G nginx sftpuser # id sftpuser uid=1000(sftpuser) gid=10(wheel) groups=10(wheel),993(nginx)

2. 共有するディレクトリのグループを nginx にし、set GID ビットを立てる

# chown root:nginx /usr/share/nginx/html/test/ # chmod 2775 /usr/share/nginx/html/test/ drwxrwsr-x. 2 root nginx 6 Feb 24 00:41 /usr/share/nginx/html/test/

これで、SFTPユーザーで書き込みができるようになります。
ただし、作成したファイル、ディレクトリのパーミッションは umask 設定によります。
644, 755 など、グループ書き込み権限が付いていないと、PHP から上書きできません。

3. SFTP コピー後のファイル、ディレクトリにグループ書き込み権限を与える
これは、SFTPクライアント側で設定できると思うのですが、コピーしたファイルのパーミッションを 664 に、コピーしたディレクトリのパーミッションを 775 にするよう設定します。

投稿2017/02/23 15:57

TaichiYanagiya

総合スコア12146

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

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

takumi9942

2017/02/24 00:14

完璧に動作しました!ありがとうございました! 念のためusermodにはaオプションを付けて実行しました。 sudo usermod -aG nginx ユーザー名 chown -R nginx:nginx /usr/share/nginx/html/ chmod 2775 /usr/share/nginx/html/
suzukis

2017/02/24 04:45

/usr/share/nginx/html にnginx(PHP)が書き込みできる権限を設定してはいけません。権限設定には注意が必要ですので、別に回答している内容を確認してくだださい。
guest

0

若干使い勝手が変わってしまうかもしれませんが、nginxのユーザでSFTPでログインできるように設定し、そのユーザでファイル操作を行った方が、nginxユーザ以外からデータの操作ができないようになるので、セキュリティ上からもそちらの方が好ましいと思います。

投稿2017/02/23 11:12

nayuneko

総合スコア133

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

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

takumi9942

2017/02/24 00:17

回答ありがとうございます! 出来ればnginxユーザーの権限は増やしたくなかったので、Taichi Yanagiyaさんの方法を利用しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問