質問するのが適切な質問なのか分かりません。それで、私がやろうとしていることを説明しようとします。
内部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-path
。SUDOERSを介して特定のディレクトリで実行されているコマンドを制限する方法は?より多くの情報を知りたいです。
www-data
ユーザーが書き込めない場合でも、/some-path
ディレクトリを作成するには高い権限が必要です。少なくとも2つ、たぶん3つのことをする必要があります。
- 十分な権限を持つユーザーとしてサブディレクトリを作成します。
- 必要に応じてサブディレクトリの所有権を変更します。
- 必要に応じてサブディレクトリの権限を変更します。
サブディレクトリがそのwww-data
ユーザーに属する必要がある場合は、そのディレクトリに書き込むことができるグループにすることができます/some-path
。必要に応じて書き込みをsome-group
許可するACLを設定します/some-path
。その後、コマンドを実行する権利をsetfacl -m group:some-group:rwx /some-path
与えるwww-data
mkdir
Sudo。visudo
次のルールを実行して追加します。
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
ローカルマウント方式では、ターゲットディレクトリは通常のファイルシステムのように動作します。