ファイルの種類に応じて実行ビットを正しく設定しますか?

ファイルの種類に応じて実行ビットを正しく設定しますか?

私の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どこかに効果があると思います-execchmod。また、選択メカニズムでは、[おそらく間違っている]実行ビットや[おそらく欠けている]拡張に頼るのではなく、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

関連情報