web-dev-qa-db-ja.com

ファイルタイプに基づいて実行ビットを適切に設定しますか?

ApacheWebサーバーのアクセス許可をクリーンアップしようとしています。実行ビットが通常はない(またはあるべきではない)ファイルがたくさん見つかりました:

$ 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はどこかで機能するはずです。また、選択メカニズムではシバンやその他の魔法のヘッダーが考慮されると思います。 [潜在的に正しくない]実行ビットや[潜在的に欠落している]拡張機能だけに依存するのではありません。しかし、私の検索は正しい答えに到達していません。 Cf。、 Linuxの特定のディレクトリにある実行可能ファイルのみを検索するにはどうすればよいですか? および 実行可能ファイルを再帰的に検索

3
user56041

これにより、ファイルが調べられ、ファイルが実行可能であると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引数を変更することもできます。

5
John1024

私は今あなたのユースケースは何ですか?しかし、私のウェブフォルダの下に実行可能ファイルがあることはめったにありません。また、本番マシンでは、ほとんどのファイルへの書き込み権限も削除します。

空間的なケースの場合、書き込み権限が必要なフォルダーや別の所有者など、すべての特定のケースを含む別のファイルを保持し、それを使用してデフォルトを上書きします。

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
1
Rabin