ファイル権限をバックアップして比較するには?

ファイル権限をバックアップして比較するには?

正しいアクセス許可を比較するためのバックアップとして使用でき、システムまたはユーザーの変更およびインストールされたソフトウェアによって引き起こされる無効なアクセス許可を変更するために使用できるフォルダとディレクトリの正しい既定のアクセス許可リストを設定する方法はありますか?

たとえば、一部のパッケージをインストールしてその中に独自にインストールすると、フォルダまたはファイルの権限が変更されますが、/usr/lib/そのファイルとフォルダの権限のバックアップリストを使用すると、そのリストと比較して変更できます。必要なとき。

file1 is -rwxrwxrwx but should be -rwxr-xr-x
folder1 is drwxrwxrwx but should be drwx------

など...スクリプトのバックアップリストを使用してリストを実行し、ディレクトリとフォルダを確認し、を使用して変更しchownます。chmodsetfacl

この目標を達成する方法は?可能であれば、これを達成する方法の例を提供してください。これは、変更や変更が起こらないようにするために特定の権限を維持または設定する必要がある場合、再起動またはシステムアップデートがあるたびに自動的に実行され、リストが自動的に追加されるようにする場合に一般的なLinuxサーバーに役立ちます。することもできます。多くのユーザー操作なしで必要に応じてリストに新しいリストを追加します。

答え1

最も簡単な方法はACLツールを使用することです。

getfacl -R / > /path/to/perms/file.acl

バックアップ権限(既存の権限とACL)と所有権

setfacl --restore=/path/to/perms/file.acl /

復元します。

答え2

免責条項で、権限を一括変更するときは注意してください。権限を変更するスクリプトにバグがある場合は問題になる可能性があります。

つまり、次の例を考えてみましょう。

実験できるディレクトリを作成し、そのディレクトリに変更します。

mkdir /tmp/experiment
cd /tmp/experiment

ディレクトリに複数のファイルを作成します。

mkdir -p {a,b,c,d}/{e,f,g,h}/{i,j,k,l}
touch {a,b,c,d}/{m,n,o,p}
touch {a,b,c,d}/{e,f,g,h}/{q,r,s,t}
touch {a,b,c,d}/{e,f,g,h}/{i,j,k,l}/{u,v,w,x}

実験的に、すべてのファイルにランダムな権限を付与します。

for i in $(find . -type f); do
    chmod $(($RANDOM % 8))$(($RANDOM % 8))$(($RANDOM % 8)) $i
done

また、ディレクトリにランダムな権限を付与しますが、所有者の権限は保持します。

for i in $(find . -type d); do
    chmod 7$(($RANDOM % 8))$(($RANDOM % 8)) $i
done

次のコマンドを使用して権限回復スクリプトを作成しますstat

find . | xargs stat --printf="chmod %a %n\n" > /tmp/perms.sh

出力形式に注意してください。

head -n3 /tmp/perms.sh
chmod 715 .
chmod 700 ./b
chmod 250 ./b/n

次に、権限を削除します。

find . | xargs chmod 777

これで、次のスクリプトを使用して権限を復元できます。

bash /tmp/perms.sh

これが機能していることを確認するには、以前のように新しい権限を見つけて別のファイルに保存します。

find . | xargs stat --printf="chmod %a %n\n" > /tmp/perms.sh_new

その後、2つのファイルを比較すると、違いはありません。

diff /tmp/perms.sh{,_new}

関連情報