誤ってディレクトリでchmod -R + xを使用しました。正しい権限を復元する方法は?

誤ってディレクトリでchmod -R + xを使用しました。正しい権限を復元する方法は?

まあ、具体的にはそうですchmod -R 755。これですべてのファイルが実行可能になりました。私はこれをしたくありません。各ファイルの最初の2バイトを調べる必要があるようですが#!、それはすべてを扱うことができますか?fileすべてを見て、それに応じて決定を下す必要がありますか?それとももっと良い方法がありますか?

ディレクトリを再帰的に巡回し、実行可能でないファイルに-xを設定する最善の方法は何ですか?

ベストアンサー1

ここには魔法の弾丸はありません。権限によって伝達される情報が常に重複するわけではありません。

システムディレクトリでこれを行うと、setuidビットとsetgidビット、および誰でも読み取れないファイル、グループ、またはグループである必要があるファイルについて心配する必要があるため、システムは非常に悪い状態になります。グローバルに書き込み可能です。

各ユーザーのディレクトリでは、誰もが読めないファイルについて心配する必要があります。あなたを助ける人は誰もいません。

執行可能性に関しては、執行不可能に見えるものはすべて執行不能にしておくのが良い経験則です。カーネルは、最初の2バイトが#!12のバイトのELFバイナリ、値が12のバイトのELFバイナリ、およびいくつかのまれなファイルタイプ(a.out、登録されているすべてのファイルタイプ)を実行できます。したがって、次のコマンドは権限を合理的な状態に復元する必要があります(bash 4またはzshを想定し、そうでない場合はディレクトリツリーをナビゲートする場合は警告、ブラウザに直接入力します)。\x7fELF\x7fbinfmt_miscfind

for x in **/*; do
  if ! [ -f "$x" ]; then continue; fi # skip all but regular files
  case $(head -c 4 "$x") in
    "#!"??) :;; # skip script
    "\x7fELF") :;; # skip ELF executable
    *) chmod a-x "$x";;
  esac
done

ACL をサポートできる Linux およびその他の unices では、ディレクトリツリーに対する権限を簡単にバックアップおよび復元する方法があります。

getfacl -R >saved-permissions
setfacl --restore=saved-permissions

おすすめ記事