4

共有ホスティングを設定しています。私のユーザーは、コンテンツをアップロードするためにサーバーにSFTPアクセスできます。それぞれのユーザーとして実行されている個別のPHPプロセスを使用しています(サイトごとに1つ)。ユーザーにデフォルトで他のユーザーのコンテンツを表示させたくないのですが(他の非特権クライアントとしてのWebサーバー経由を除く)、Webサーバー(www-dataユーザー/グループとして実行)はすべてを読み取ることができるはずです。現在、www内のファイルの所有権を特定のユーザーに、グループの所有権をwww-dataに付与し、set GIDビットを使用してグループの所有権を新しいファイル/ディレクトリに伝達しています(ユーザーはwww-dataグループに属していません)。

それはうまくいきました、しかし今私は問題に直面しています。一部のサイトはワードプレスを使用しており、ファイルをアップロードすると、設定されたGIDビットが失われます。これは、Webサーバーがワードプレスにアクセスできないことを意味します。PHPまたはwordpress(より可能性が高い)のいずれかを構成して、ファイルとディレクトリを適切なアクセス許可にchmodする方法はありますか?

注:PHPではセーフモードを使用していないため、設定されたGIDビットを追加できるはずです。

更新: wordpress構成でFS_CHMOD_DIRFS_CHMOD_FILEの値を微調整してみました。これにより、アップロードしたファイルを好きなようにchmodできると思いました。ただし、新しくアップロードされたファイルのアクセス許可には影響しませんでした。コーデックスの情報から、これらの設定はコアアップデート機能にのみ適用されると思います。

ありがとう!

4

1 に答える 1

3

これは正確な質問に対する答えではなく、一般的な問題の解決策です。ユーザーのWebディレクトリの所有権をuser/www-dataに割り当て、権限を750に設定します。SGIDビットはありません。ユーザーはwww-dataグループに属してはなりません。ただし、そのディレクトリ内で、グループの所有権をユーザーのメイングループ(ユーザーなど)に設定できます。内部のアクセス許可は、ファイルとサブディレクトリに対してそれぞれ644と755にすることができます。セキュリティは、他のユーザーがこのWebディレクトリにアクセスしたり、このWebディレクトリをトラバースしたりできないため、ファイル自体にアクセスするための十分な権限を持っていても、内部のファイルにアクセスできないという事実によって提供されます。これにより、SFTP経由で接続するユーザーとPHPコマンドを実行するユーザーの両方が制限されます。

このソリューションは設定されたGIDビットを使用しないため、元の問題を解決します。アップロードされたファイルは、デフォルトの所有権と権限のままにすることができます。

ちょっとしたデモンストレーション:

transistor# mkdir www
transistor# chown :www-data www
transistor# chmod 750 www
transistor# ls -l
total 4
drwxr-x--- 2 root www-data 4096 Feb 20 20:59 www
transistor# touch www/file1.txt
transistor# mkdir www/subdir
transistor# touch www/subdir/file2.txt
transistor# ls -l www
total 4
-rw-r--r-- 1 root root    0 Feb 20 21:00 file1.txt
drwxr-xr-x 2 root root 4096 Feb 20 21:00 subdir
transistor# ls -l www/subdir 
total 0
-rw-r--r-- 1 root root 0 Feb 20 21:00 file2.txt
transistor# exit
giedrius@transistor:/tmp/sandbox$ cd www
bash: cd: www: Permission denied
giedrius@transistor:/tmp/sandbox$ ls www/subdir
ls: cannot access www/subdir: Permission denied
giedrius@transistor:/tmp/sandbox$ cat www/file1.txt
cat: www/file1.txt: Permission denied
giedrius@transistor:/tmp/sandbox$ cat www/subdir/file2.txt
cat: www/subdir/file2.txt: Permission denied
giedrius@transistor:/tmp/sandbox$ sudo -su www-data
transistor% ls www 
file1.txt  subdir
transistor% cat www/file1.txt 
transistor% cat www/subdir/file2.txt 
transistor% 
于 2013-02-20T21:16:18.653 に答える