rsync에서 사용자 / 그룹 소유권을 임의로 매핑하는 방법


17

소스 (로컬) 시스템의 사용자 X 및 그룹 Y에 속하는 모든 파일이 대상 (원격) 시스템의 사용자 W 및 그룹 Z에 맵핑되도록 디렉토리를 원격 서버와 재 동기화해야합니다. 전송으로 ssh를 사용하여 가능하지만 rsync 데몬을 사용해야하는 경우에도 좋습니다.

그렇게 할 방법이 있습니까? 다음과 같은 임의의 사용자 / 그룹 맵을 설정하는 방법을 찾고 있습니다.

local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.

이것은 일반적인 사용 사례가 아닌가? 예를 들어 내 사용자 이름이 X 인 로컬 컴퓨터에 파일이 있으며 웹 서버에 파일을 업로드해야합니다.이 파일은 웹 서버에 업로드해야합니다. 내 개인용 컴퓨터.

rsync의 맨 페이지에서 찾을 수 없습니다 ...

로컬 및 원격 시스템의 Linux (Ubuntu 로컬, centOS 원격)

내가 시도한 명령 : rsync -avz / path / to / local root@myhost.com : / path / to / remote


1
제발 항상 당신의 OS를 포함한다. 솔루션은 종종 사용중인 운영 체제에 따라 다릅니다. Windows, Linux, Unix, OSX, BSD를 사용하고 있습니까? 어떤 버전?
terdon

답변:


21

Rsync 버전 3.1.0 에서는 이러한 목적으로 --usermap--groupmap옵션을 정확하게 도입했습니다 . 참고 항목 man 페이지를 .


알아두면 좋습니다. 이에 대한 유스 케이스 시나리오가 있습니다. 예를 들어, Icinga 서버가 두 대 있는데 마스터에서 슬레이브로 구성 파일을 단방향 동기화해야합니다. 그러나 마스터의 icinga는 슬레이브의 icinga와 다른 uid입니다. 따라서 rsync가 이것을 처리 할 수 ​​있다는 것을 아는 것이 좋습니다.
Michael Martinez

버전 노트 : Ubuntu v16.04에는 v3.1.1이 있고 CentOS 7에는 v3.1.2가 있지만 CentOS 6에는 v3.0.6이 있습니다. 이것은 최신 배포판에 적합합니다.
jimp

4

rsync의 최신 버전 (최소 3.1.1)에서는 "원격 소유권"을 지정할 수 있습니다.

--usermap=tom:www-data

Tom 소유권을 www-data로 변경합니다 (일명 PHP / Nginx). Mac을 클라이언트로 사용하는 경우 brew를 사용하여 마지막 버전으로 업그레이드하십시오. 그리고 서버에서 아카이브 소스를 다운로드 한 다음 "만들기"하십시오!


나를 위해 그것은 --chown = 톰과 같이 작동합니다 : www가 데이터
페데리코 갈리에게

0

파일의 소유권을 임의의 사용자로 변경하려면 먼저 대상 상자의 루트 여야합니다.

rsync에 통합 된 기능이 없다고 생각하지만 rsync를 수행 한 find후 after 를 실행하여 기능을 얻을 수 있습니다 .

어쩌면 이와 같은 명령이 트릭을 수행 할 수 있습니다 : 예를 들어 UID 1000 => 505 및 UID 1001 => 700에서 번역하십시오.

find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;

사용자가 많은 경우 사전 편향 언어로 매핑과 함께 루프를 사용하는 것이 좋습니다.

즐기세요


그래서 rsync가 그렇게 할 수있는 방법이 없습니다. 놀랍게도, 그것은 나에게 그렇게 명백한 필요로 보였습니다.
matteo

1
당신이 이것을 사용한다면 @matteo 조심하십시오. 원격 시스템에 ID가 1000 또는 1001 인 사용자가있는 경우 원격 위치에 해당 파일이 합법적으로 소유 된 파일이있을 수 있으며 파일을 작성하면 문제가 발생할 수 있습니다.
terdon

@ terdon 어떻게 원격 컴퓨터에 이름이없는 사용자가 있습니까? (파일이 나열 될 때 이름 대신 ID가 표시되기 때문에 사용자 이름이 없다는 것을 의미합니까?)
matteo

1
@matteo 아니오, 모든 사용자는 이름뿐만 아니라 사용자 ID를 가지고 있습니다. 대부분의 데비안 기반 시스템 (및 아마도 다른 시스템)에서 기본 사용자는 사용자 1000 id입니다. 컴퓨터에서 실행 해보 십시오. 따라서 이와 같은 ID를 사용하는 경우 원격 시스템에 동일한 ID를 가진 사용자가 없으며 사실이 아니라고 가정합니다.
terdon

필자의 경우 서버에 UID 1000을 사용하는 사용자가 없으며 적어도 / etc / passwd에 나열되지 않습니다. "ls -la"를 사용하여 파일을 나열 할 때 1000에 속하는 파일 (사용자 1000이 기본 사용자 "teo"인 로컬 컴퓨터의 rsync -avz의 결과 임)이 "1000으로 표시되기 때문에 추측 한 것입니다. "를 소유자로 해당 ID를 가진 사용자가 있고 이름이 "Someone"이라고 말하면 파일 소유자가 ls 출력에서 ​​"Someone"으로 표시됩니다. 어쨌든 그것은 고려해야 할 유용한 경고입니다. 감사합니다.
matteo

-1

잘 모르겠습니다. 연결하려면 ssh사용자 이름을 제공해야합니다. 이 사용자 이름은 그룹 Z에 속하는 원격 시스템의 사용자 W입니다. 따라서 원하는대로 모든 것이 정확하게 전송됩니다.

rsync /path/to/local userX@remote.com/path/to/remote

OP의 의견에 대한 답변으로 편집하십시오.

이 사용자 매핑을 수행하고 권한 설정을 잃지 않으려면을 사용하지 마십시오 -a. 먼저 rsync with mywww@myhost.com를 실행 하여 올바른 사용자 이름을 얻습니다. 그런 다음 -a소유권을 유지하는 대신 옵션을 수동으로 지정하십시오. 보낸 사람 man rsync:

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
    -r, --recursive             recurse into directories
    -l, --links                 copy symlinks as symlinks
    -p, --perms                 preserve permissions
    -t, --times                 preserve modification times
    -g, --group                 preserve group
    -o, --owner                 preserve owner (super-user only)
    -D                          same as --devices --specials

따라서 -a위의 모든 옵션을 활성화하지만 그룹이나 소유자를 유지하고 싶지는 않습니다. 이 명령은 원하는 작업을 수행해야합니다.

rsync -rlptDvz /path/to/local mywww@myhost.com:/path/to/remote

이제 로그인하여 mywww소유자 / 그룹 정보를 더 이상 보존하지 않기 때문에 사본은 사용자 rsync에게 속합니다 mywww.


아니요, rsync -avz / path / to / local root@myhost.com : / path / to / remote를 수행합니다. 내 질문은 로컬 컴퓨터의 "x"사용자에게 속한 파일을 서버의 "w"사용자에게 다시 매핑하는 방법은 무엇입니까? 내 컴퓨터에서 내 파일은 "teo"에 속합니다. 서버에는 "teo"라는 사용자조차 없습니다. "mywww"와 같이 아파치가 사용하는 사용자가 필요합니다. 그룹도 마찬가지입니다. rsync 기본적으로는 "테오"등의 소유자를 유지하려고 할 것이며, 그러한 사용자가 없기 때문에, 서버에 존재하지 않는 사용자입니다 사용자 "1000"에 속하는 파일의 결과로, UID를 유지합니다
마테오

Btw, 동시에 -a 옵션에 따라 이미 수행 한 파일 권한을 보존해야합니다. 즉, 파일 권한을 보존하는 기능을 잃어 버릴 수있는 솔루션 (즉, 777 파일은 777으로, 600은 600으로 유지)은 속임수를 쓰지 않습니다.
matteo

@matteo 그 이유 -a는 소유자 및 그룹 유지 옵션을 활성화 하기 때문 입니다. 업데이트 된 답변을 참조하십시오.
terdon

1
@matteo 질문을 할 때 실제로 필요한 것을 설명하십시오. 그렇게하면 불완전한 답변을 제공하는 데 시간을 낭비하지 않습니다. 다음 번에는 i) 사용한 실제 명령을 포함하십시오 (rsync는 기본적으로 아무것도 보존하지 않고 사용 -a했습니다) ii) 모든 제약 조건을 명확하게 설명하십시오. 마지막 주석까지 단일 사용자를 언급했습니다 .iii ) OS를 언급하십시오. 어쨌든이 작업을 수행하는 방법 rsync은 한 파일 세트를로 복사 mywww@remote하고 다음 세트는 로 복사 하는 것 root@remote입니다.
terdon

1
@matteo 실제로 확실하지 않은 것은 -a소유권을 유지 하는 것을 사용 하고 있다는 것 입니다. 당신이 제시 한 예에서는 한 명의 사용자에게만이 작업을 수행해야한다고 제안했습니다. 어쨌든을 사용하는 것이 좋습니다. rsync각 사용자별로 복사 할 다른 파일 목록을 만들고 관련 사용자 이름으로 원격 컴퓨터에 연결하는 여러 rsync를 실행하십시오. 더 간단하고 안전합니다.
terdon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.