내 홈 서버에서 rsnapshot을 사용하여 SSH를 통해 내 macbook을 백업합니다. 모든 것이 올바르게 구성되어 작동하지만 권한에 문제가 있습니다.
Macbook과 홈 서버에 다른 사용자가 있으므로 홈 서버의 백업 파일이 다음과 같이 저장됩니다.
-rw------- 16 501 dialout 1650 Jun 24 21:09 .bash_history
...
501은 내 macbook pro의 사용자와 관련된 ID이고 해당 사용자가 내 홈 서버에 없기 때문에 단순히 사용자 ID를보고 있다고 생각합니다. 전화 걸기 그룹에 대해 잘 모르겠습니다.
이러한 권한은 네트워크 공유를 통해 백업 된 파일을 찾아 볼 때 권한 문제가 발생 함을 의미합니다.
내 macbooks 사용자 및 그룹을 유지하는 대신 백업 된 파일을 내 홈 서버 사용자 및 그룹에 저장할 수 있습니까? 그렇다면 이에 대한 영향이 있습니까?
답변
이것이 일어나고있는 것처럼 들립니다.
- rsnapshot은 Mac에서 서버로 숫자 uid 및 gid를 복사합니다.
- Mac 계정과 서버 계정의 UID가 다릅니다
- 복사 된 파일에 대한 권한으로 서버 UID가 액세스 할 수 없습니다
이에 대한 몇 가지 가능한 해결책이 있습니다.
해결 방법 1 : rsync --usermap
및--groupmap
rsnapshot은 rsync를 사용하여 대부분의 작업을 수행하며 최신 버전의 rsync에는 uid 및 gid를 매핑하는 옵션이 있습니다. rsnapshot이 해당 옵션을 rsync에 전달하도록 구성 할 수 있는지 여부는 알 수 없지만 문제가 해결되면 가능합니다.
해결 방법 2 : 사용자 및 그룹 ID를 동기화하십시오.
워크 스테이션과 서버가 동일한 OS를 실행하는 경우 가능할 수도 있지만 이미 다르게 구성된 경우에는 변경하지 않아도됩니다. 서로 다른 OS를 실행하는 경우 호환되지 않는 uid 할당 체계가있을 수 있지만 사용자의 uid 만 동기화 할 수는 있습니다. (그중 하나가 Windows가 아니라면 전혀 가능하지 않습니다.) 계정 uid를 변경해도 파일의 소유자 ID는 변경되지 않으므로 별도의 단계로 수행해야합니다. 사용자의 UID를 변경하는 것은 큰 문제가되지 않지만 서비스의 UID를 변경하는 것은 혼란 스러울 수 있습니다.
해결책 3 : 복사 단계 분리
rsnapshot을 실행하기 전에 모든 것을 별도의 단계로 서버에 복사하는 경우 숫자 uid가 아닌 문자열 이름을 사용하는 프로그램으로 복사 할 수 있습니다. 일치하는 모든 사용자 이름에 대한 uid를 번역합니다. 내가 아는 유일한 양방향 파일 동기화 도구 인 Unison 이이를 수행합니다. 대부분의 Linux 배포판에 포함되어 있지만 기본적으로 설치되어 있지는 않지만 MacPorts 또는 App 번들을 통해 macos에서 사용할 수 있습니다 . scp를 사용하여 파일을 복사하면 (기본적으로 Windows 이외의 모든 것에 기본적으로 포함되어 설치됨) 소유자는 수신 시스템에 로그인 한 사용자가됩니다.
해결 방법 3 : UID / GID 번역 단계 추가
rsnapshot이 완료된 후 uid / gid를 변경할 수 있습니다. 하나 또는 두 개의 uid 만 신경 쓰면 이 답변 에서 솔루션을 조정할 수 있습니다 .
find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;
이렇게하면 uid / gid가 수정되지만 변경되지 않은 파일의 rsnapshots 하드 링크가 끊어집니다. rsnapshot은 메타 데이터 변경을 포함하여 어떤 방식 으로든 다른 파일을 하드 링크하지 않습니다. 소유자가 다른 파일이나 타임 스탬프가 다른 파일을 하드 링크로 연결하지 않습니다. 이것은 rsnapshot이 사용하지만 수정하지 않는 rsync 동작입니다.
물론, 다른 단계를 추가하여 하드 링크를 다시 실행할 수 있습니다.