파일 권한을 백업하고 비교하는 방법은 무엇입니까?

파일 권한을 백업하고 비교하는 방법은 무엇입니까?

올바른 권한을 비교하기 위한 백업으로 사용할 수 있고 시스템이나 사용자 변경 및 설치된 소프트웨어로 인해 발생한 잘못된 권한을 수정하는 데 사용할 수 있는 폴더 및 디렉터리에 대한 올바른 기본 권한 수신 목록을 설정하는 방법이 있습니까?

예를 들어 일부 패키지를 설치하고 그 안에 자체적으로 설치 /usr/lib/하면 폴더나 파일의 권한이 수정되지만 해당 파일 및 폴더의 권한에 대한 백업 목록을 사용하면 해당 목록과 비교하여 수정할 수 있습니다. 필요할 때.

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

등... 스크립트의 백업 목록을 사용하여 목록을 실행하고 디렉터리 및 폴더를 확인하고 을 사용하고 chown수정 chmod합니다 setfacl.

이 목표를 달성하는 방법은 무엇입니까? 가능하다면 이를 달성하는 방법에 대한 예를 제공해 주십시오. 이는 수정이나 변경이 발생하지 않아야 하는 경우를 방지하기 위해 특정 권한을 유지하거나 설정해야 하는 경우, 재부팅이나 시스템 업데이트가 있을 때마다 자동으로 실행되도록 하고 목록이 자동으로 추가되도록 하는 경우 일반 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

그런 다음 두 파일을 비교해 보면 아무런 차이가 없습니다.

diff /tmp/perms.sh{,_new}

관련 정보