web-dev-qa-db-ja.com

ファイルのアクセス許可をバックアップおよび復元する

ファイルの所有権と権限(chownchmodで変更できるもの)をバックアップおよび復元する方法はありますか?

あなたはこれを行うことができます Windowsではicaclsを使用

アクセス制御リストはどうですか?

17
leeand00

acl パッケージのコマンドを使用してこれを行うことができます(これはすべての主流ディストリビューションで使用可能ですが、基本インストールの一部ではない場合があります)。 ACLが存在する場合は、ACLをバックアップおよび復元しますが、ACLをサポートしていないシステムでも基本的なアクセス許可で機能します。

現在のディレクトリとそのサブディレクトリの権限を再帰的にバックアップするには:

getfacl -R . >permissions.facl

権限を復元するには:

setfacl --restore=permissions.facl

私は、これを行う「既成」のものは何も知りません。基本的な権限を処理するスタータースクリプトは次のとおりです。説明のACLは処理しませんが、質問ではそれらを明示的に除外しています。 (病理学的ファイル名-空白で始まる、または印刷できない文字を含むもの-でも失敗します。)

権限を保存

find * -depth -exec stat --format '%a %u %g %n' {} + >/tmp/save-the-list

権限を復元

while read PERMS OWNER GROUP FILE
do
    chmod "$PERMS" "$FILE"
    chown "${OWNER}:${GROUP}" "$FILE"
done </tmp/save-the-list
2
roaima
#!/bin/bash
# prepare files
home="/home/exchange"
cd $home
>acl
echo "#!/bin/bash">recovery_acl.sh
echo "cd $home">>recovery_acl.sh
f='./'
# create acl file sorted by dir_level
for i in `seq 0 15`;do
  find . -mindepth $i -maxdepth $i -type d -exec getfacl {} +|grep -E '*UTS|file:'>>acl
done
sed -i 's/default\:user/\-dm\ u/g' acl
sed -i 's/default\:group/\-dm\ g/g' acl
sed -i 's/user/\-m\ u/g' acl
sed -i 's/group/\-m\ g/g' acl
sed -i 's/\#\ file\:\ /\.\//g' acl
sed -i 's,\\,\\\\,g' acl

while IFS='' read -r line ; do
  # grep dir name
  if echo "$line" | grep -q "$f" ; then
    dir="$line"
    continue
  fi
  echo setfacl $line '"'$dir'"'>>recovery_acl.sh
  # grep non def acl (for files)
  if echo "$line" | grep -q '\-m' ; then
    echo setfacl $line '"'$dir'"'/*>>recovery_acl.sh
  fi
done < "acl"

sed -i "s/\\\134/\\\\\\\134/g" recovery_acl.sh
sed -i "s/\\\040/\\\\ /g" recovery_acl.sh

このbashスクリプトはaclのみdirsを取得します(私の場合、ファイルはacls = dir(parent)acl)。スクリプトの実行後、別の "recovery_acl.sh"が作成されます。

「そのようなファイルまたはディレクトリはありません」などのエラーの回復中は、dirが空であるか、dirnameに2つ以上のスペースが含まれていることを意味します。

0
Terentev Maksim