親フォルダへの読み取りアクセスを許可せずにwww-dataがフォルダを作成できるようにする方法

親フォルダへの読み取りアクセスを許可せずにwww-dataがフォルダを作成できるようにする方法

質問するのが適切な質問なのか分かりません。それで、私がやろうとしていることを説明しようとします。

内部Webアプリケーション(PHP言語)があり、フォルダを作成したいです。問題は、Apacheユーザーwww-dataがフォルダを作成したい親フォルダにアクセスできないことです。

www-dataに親フォルダへのアクセス権を付与することは適切ではないと思うので、www-dataよりも多くの権限を持ち、www-dataを実行できるスクリプトを作成できるかどうか疑問に思います。スクリプトは単に次のことを行います(疑似コード)。

FOLDER_NAME = sanitise(<arg-val-1>)
mkdir /some-path/$FOLDER_NAME

このスクリプトを生成するのに適した場所はどこであり、www-dataはこれをrootとしてどのように実行しますか? (またはこの問題を解決するより良い方法はありますか?)

私はDebian Linuxを使用しています。

答え1

あなたが言うことを便利な方法で行うことはできませんが、間違いなく十分に近いものがあり、それがあなたが本当に欲しいものを実現します。

ディレクトリを作成するように設定しても、サブディレクトリは親ディレクトリを介してのみアクセスできるため、ユーザーはwww-dataまだそのディレクトリにアクセスできません。/some-path/subdirectory(この問題を解決するにはいくつかの方法がありますが、お勧めできません。両方にアクセスできるプロセスがある可能性があり、権限をに変更して/some-path権限を削除できます。作成されたプロセスは現在のディレクトリにありますアクセスできます(絶対パスを通らない)ディレクトリを別の場所にバインドすることもできますが、必要に応じて別の場所にディレクトリを作成することもできます。)/some-path/subdirectory/some-path/subdirectory

www-data少なくともアクセス可能な(x許可ビット)ディレクトリにこれらのディレクトリを配置します。ディレクトリが別のユーザーと別のグループに属している必要がある場合は、問題にアクセスする場合は、ディレクトリにアクセス制御リスト()を設定してくださいsetfacl -m user:www-data:x /some-pathSUDOERSを介して特定のディレクトリで実行されているコマンドを制限する方法は?より多くの情報を知りたいです。

www-dataユーザーが書き込めない場合でも、/some-pathディレクトリを作成するには高い権限が必要です。少なくとも2つ、たぶん3つのことをする必要があります。

  1. 十分な権限を持つユーザーとしてサブディレクトリを作成します。
  2. 必要に応じてサブディレクトリの所有権を変更します。
  3. 必要に応じてサブディレクトリの権限を変更します。

サブディレクトリがそのwww-dataユーザーに属する必要がある場合は、そのディレクトリに書き込むことができるグループにすることができます/some-path。必要に応じて書き込みをsome-group許可するACLを設定します/some-path。その後、コマンドを実行する権利をsetfacl -m group:some-group:rwx /some-path与えるwww-datamkdirSudovisudo次のルールを実行して追加します。

 www-data ALL = ( : some-group) /bin/mkdir /some-path/[0-9A-Z_a-z]*, !/bin/mkdir /some/path/[!-0-9A-Z_a-z]

これをwww-data実行します。sudo -g some-group mkdir /some-path/foo-bar/some-path

サブディレクトリがそのディレクトリに書き込むことができる他のユーザーに属する必要がある場合は、そのsome-pathユーザーmkdirとしてコマンドを実行してください。正しい権限と所有権を使用してディレクトリを作成する準備ができます。ファイルの場合sudoers

www-data ALL = (some-user : some-group) /bin/mkdir -m 775 /some-path/[0-9A-Z_a-z]*, !/bin/mkdir /some/path/[!-0-9A-Z_a-z]

に属するsudo -u some-user -g some-group mkdir -m 775 /some-path/foo-barグループが書き込むことができるディレクトリを作成するには、実行します。some-user:some-group/some-path

答え2

次のことがあなたの状況に適しているかどうかはわかりません。

次の仮定

  • www-データ書き込み可能ディレクトリ:/var/www/データ
  • もともと予想される親ディレクトリ:/家/親

これを行う:

ln -s /var/www/data /home/parent/data

したがって、www-dataを/home/parentに直接書き込まないでください。データ訪問可能ソフトリンク経由。


以下のようにローカルにマウントしてこれを行うこともできます。

mount -o bind /var/www/data /home/parent/data

またはインストールまっすぐ

mount -o bind /var/www/data /home/parent

ローカルマウント方式では、ターゲットディレクトリは通常のファイルシステムのように動作します。

関連情報