ドキュメント ルート ディレクトリに複数の WordPress (CMS) Web サイトがある Ubuntu 16.04 Nginx サーバー環境があります。
すべてのサイトディレクトリには、www-data
繰り返し所有者とグループがあります。
私が受け取ったいくつかのセキュリティ勧告によれば、これはあるサイトのデータが別の隣接サイトを変更する可能性があるために問題になると言われています(たとえば、サイトの1つのCMSにインストールされた悪意のあるモジュール)。
解決策は、新しいサイトを追加した後(そして所有者とグループを変更する更新後にcronで)、常に実行するこのコマンドを変更することです。
chown -R www-data:www-data /var/www/html/*
www-data
一部の条件付きコマンドは、これらの属性をサイトディレクトリの実際の名前に変更する以外の操作を実行します。
明確にすると、各サイトディレクトリの所有者はグループでなけれdomain.tld
ばならず、グループも同じでなければなりませんdomain.tld
。私は常にサイトのdomain.tldに基づいてサイトディレクトリの名前を指定します。
そのような条件付きコマンドは何ですか?
注:Nginxユーザーとディレクトリの/var/www/html/
両方www-data:www-data
。
Gマンアップデート:
まだテストしていませんが、${domain}
変数の最初の引数に()を渡すことで$1
問題ありません。
chown -R ${domain}:${domain} ${domain}/*
私はそれを維持しますが:
chown -R ${domain}:www-data ${domain}/*
もちろん、adduser ${domain} --disabled-password --disabled-login
そうでない場合はその前に必要です。
答え1
何か抜けたようですが、簡単に見えます。
$ cd /var/www/html
$ for dir in *
do
chown -R "$dir:$dir" "$dir"
done
これらのコマンドの正確性が懸念される場合は、次の単語を挿入できます。echo
chown
たとえば、以前は
$cd /var/www/html $ は * のディレクトリを表します。 する エコchown -R "$dir:$dir" "$dir" 完璧
chown
実際に実行せずに実行するコマンドを伝えます。このヒントは完全な回答に適用され、実際にはほとんどのシェルスクリプトソリューション(他の質問など)に適用されます。
一行にしたいなら、
$ cd /var/www/html && for d in *; do chown -R "$d:$d" "$d"; done
cd
複雑さを避けるためにもう一つの答え
抱擁。そうすれば
$ for dir in /var/www/html/*
その後、、などdir
に設定されます。これはディレクトリを操作するのに適していますが、必要なユーザー名とグループ名を提供しません。別の答えは、やや複雑な(完全に信頼できない)プロセスを使用して、ディレクトリパスの最後のレベル(ディレクトリ名とユーザー名でもあります。例:)を残りのパスから分離します。幸いなことに、次のようにシェルで同等ですが、より良い作業を完全に実行できます。/var/www/html/domain1
/var/www/html/domain2
/var/www/html/domain3
chown
awk
domain1
$ for dir in /var/www/html/*
do
owner="${dir##*/}"
chown -R "$owner:$owner" "$dir"
done
${dir##*/}
特別な形ですパラメータ拡張$dir
最後の(スラッシュ)文字の値を取得し、/
すべての項目(含む)を削除します。もちろん、カタログだけが残ります。名前はユーザー名なので、owner
に割り当てますchown
。このコードは次のとおりです。POSIX互換
このサイトのいくつかの答えとは異なり、POSIX互換シェルで動作する必要があり、bashに依存しません。
やりたいならこれ一行に、
$ for d in /var/www/html/*; do o="${d##*/}"; chown -R "$o:$o" "$d"; done
もちろん、メインシェルの作業ディレクトリを変更しないことが心配な場合は、サブシェルで最初のコマンドを実行できます。
$ (cd /var/www/html && for d in *; do chown -R "$d:$d" "$d"; done)
言うまでもなく(とにかく言います)、このコマンドを実行する前に、などの名前を持つdomain1
ユーザーdomain2
(およびグループ)を定義する必要があります。domain3
新しいサイトを追加するスクリプトがある場合は、それを実行してくださいchown
。chown
定義されたユーザー名ではなく名前で実行すると、エラーメッセージが表示されますinvalid user
。