파일 권한 백업 및 복원


17

파일 소유권 및 권한 (변경할 수 있습니다 것을 백업하고 복원 할 수있는 방법이 있나요 chownchmod)?

icacls를 사용하여 Windows에서 이를 수행 할 수 있습니다 .

액세스 제어 목록은 어떻습니까?


배포판마다 다른 패키지 관리자를 사용하기 때문에 사용중인 배포판을 명시하면 도움이됩니다.
garethTheRed

@garethTheRed, 사용중인 fs 또는 배포판에만 의존합니까?
leeand00

1
파일 시스템에 달려 있다고 의심합니다.
garethTheRed

지금까지는 완벽한 답이 없습니다.
kittygirl 2018 년

답변:


24

acl 패키지 의 명령을 사용하여이 작업을 수행 할 수 있습니다 (모든 주류 배포에서 사용할 수 있지만 기본 설치의 일부는 아님). ACL이있는 경우 ACL을 백업 및 복원하지만 ACL을 지원하지 않는 시스템에서도 기본 권한으로 작동합니다.

현재 디렉토리 및 해당 서브 디렉토리에서 권한을 재귀 적으로 백업하려면 다음을 수행하십시오.

getfacl -R . >permissions.facl

권한을 복원하려면

setfacl --restore=permissions.facl

흠. 나는 정말 ACL을에 읽을 필요가있다.
roaima

1
생성 된 파일에서 디렉토리와 관련이 있습니까?
leeand00

2
@ leeand00 예, 생성 된 파일은 항상 상대 파일 이름을 사용합니다.
Gilles 'SO- 악의를 멈추십시오'7

@Gilles , unix.stackexchange.com/questions/364517/…setfacl 파일을 기반으로 한 다음 chmod다시 할 수 없으면 충돌이 발생할 수 있습니까?
kittygirl

1
@kittygirl 나는 당신이 무엇을 요구하는지 전혀 모른다. “setfacl 파일은 다시 chmod 할 수 없습니다”는 무엇을 의미합니까? 이것은 unix.stackexchange.com/questions/364517/…어떤 관련이 있습니까? 무슨 충돌?
Gilles 'SO- 악마 그만해

2

이 작업을 수행 할 수있는 "선반"이 무엇인지 알 수 없습니다. 기본 권한을 처리하는 시작 스크립트는 다음과 같습니다. 설명의 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

당신은 또한 병적 파일 이름에서 ACL이 실패한다는 것을 의미합니까?
kittygirl

@kittygirl OP가 요구 사항에서 ACL을 명시 적으로 제외했기 때문에 스크립틀릿에 ACL 처리를 포함시키지 않았습니다. 코드가 특별히 강력하지 않다는 점을 염두에두고 원하는 것을 추가 할 수 있습니다 (병리 적 파일 이름을 설명하는 주석 참조).
roaima

나는 문제를 발견했다 : 찾을 수 없다 .htaccess, gitignore...
kittygirl

0
#!/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"를 만듭니다.

"No such file or directory"와 같은 오류를 복구하는 동안 dir이 비어 있거나 dirname에 둘 이상의 공백이 있음을 의미합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.