私のApache Webサーバーに対する権限を消去しようとしています。実行ビットを含む多くのファイルは、通常、実行ビットが存在しないか、または存在しないことを発見しました。
$ sudo find /var/www/html -executable -type f | grep '.png'
/var/www/html/.../jquery.ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png
/var/www/html/.../jquery.ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
/var/www/html/.../jquery.ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png
...
通常、実行ビットを含む一般ファイル(プログラム、PHPページ、Bashスクリプトなど)に実行ビットを設定し、通常実行ビットを持たない一般ファイル(TXT、PNG、JPG、ZIPファイルなど)?
find
どこかに効果があると思います-exec
chmod
。また、選択メカニズムでは、[おそらく間違っている]実行ビットや[おそらく欠けている]拡張に頼るのではなく、shebangや他のマジックヘッダを考慮したいと思います。しかし、私の検索では正解は出ませんでした。より、Linuxで特定のディレクトリにある実行可能ファイルのみを見つける方法は?そして再帰的に実行可能ファイルを見つける。
答え1
その後、ファイルを繰り返し、ファイルfile
が実行可能であると思われるかどうかに応じて実行可能ビットを設定します。
find /var/www/html -type f -exec bash -c 'if file -b "$1" | grep -q executable; then chmod +x "$1"; else chmod -x "$1"; fi' None {} \;
コマンドはfind
あなたのコマンドと非常によく似ています。変更は、bashコマンドが追加されたことです。次のように複数行にわたって表示すると、わかりやすくなります。
if file -b "$1" | grep -q executable
then
chmod +x "$1"
else
chmod -x "$1"
fi
もちろん、chmod
特定の要件に合わせてパラメータを変更することもできます。
答え2
現在のユースケースが何であるかはわかりませんが、Webフォルダの下に実行可能ファイルがほとんどありません。本番システムでは、ほとんどのファイルに対する書き込み権限も削除しました。
特別な場合には、書き込み権限を必要とするフォルダまたは他の所有者が必要とするすべての特定の状況を含む別々のファイルを保持し、それを使用してデフォルト値を上書きします。
find /path/to/webroot/ -type f -exec chmod 644 -c '{}' \;
find /path/to/webroot/ -type d -exec chmod 755 -c '{}' \;
# change owner
chmod root:www-data /path/to/webroot/ -R
bash .fix-perm
ここで、.fix-permはスクリプトファイルにすぎません。
#.fix-perm
chmod g+w cache -R
chmod g+w logs -R