rsyncd.conf를 사용하여 SSH를 통한 rsync를 제한할 수 있나요?

rsyncd.conf를 사용하여 SSH를 통한 rsync를 제한할 수 있나요?

제한된 rsync 스크립트를 살펴보니,동기화, 이는 에서 언급됩니다 man rsync. 기본적으로 클라이언트 명령은 SSH를 통해 실행되는 원격 명령 rsync에 모든 옵션을 전달하는 것으로 보입니다 . 사람들이 서버에서 허용하는 경로와 옵션을 제한하는 데 사용하는 200줄 이상의 Perl 스크립트입니다. 이에 대한 나의 첫 반응은 "으악"이었습니다. 이 옵션이 실제로 어떻게 사용되는지에 대해 문서가 의도적으로 모호하다는 것은 도움이 되지 않습니다 .rsyncrrsyncrsync--server

또한 2016년의 버그 보고서에는 다음과 같은 내용이 나와 있는 것으로 나타났습니다.엄청난 보안 결함존재하다 rrsync. 아직 해결되지 않았습니다.

:-(

나는 법적 대상 및 옵션 정의를 선호합니다 rsyncd.conf. 또한 SSH 암호화 및 인증을 사용하여 rsync 서버에 대한 연결을 보호하고 싶습니다.

그것것 같다~/.authorized_keys마찬가지로 제한 옵션이 있는 개인 SSH 키를 사용하여 이 작업을 수행 할 수 있습니다 command="/usr/bin/rsync --server --daemon --config=./rsyncd.conf .",restrict. 예를 들어 rsync데몬 구문을 사용하여 클라이언트 명령을 실행할 수 있습니다 rsync -e "ssh" "$SOURCE_PATH" "$SSH_HOST"::"$RSYNC_MODULE"/"$DEST_PATH".

(SSH 키를 사용하지 않는 경우 /etc/sshd_config전용 사용자, Match 및 ForceCommand를 사용하여 동일한 작업을 수행할 수 있습니다. 하지만 현재는 담요에 해당하는 것이 없으며 restrict모든 권한을 개별적으로 비활성화해야 합니다.)

이 작품은 믿을만한가요?

몇 가지 다른 옵션을 테스트했습니다. 클라이언트 명령에 옵션을 추가하더라도( rsync예:rsync --server --daemon .-vlogDtprze.iLsf --numeric-ids

질문:위의 내용을 신뢰할 수 있습니까? 아니면 반대로 클라이언트가 다른 옵션 세트를 사용하여 데몬 서버를 시작해야 하는 상황이 있습니까?

세 번째 매개변수 - .- 다른 값으로 설정되어 있나요? 그것은 무엇을 합니까? ?

답변1

네, 제 생각엔 꽤 안전한 가정인 것 같아요.

이것이 작동하는 자연스러운 방식입니다. 이러한 세부 사항을 문서화하는 것을 피했지만 향후 버전에서도 계속해서 동일한 방식으로 작동할 가능성이 높습니다. 명령줄 옵션은 rsync --server실제로 네트워크 프로토콜의 일부이며 일반적으로 이전 버전과 호환됩니다.

  1. 소스 코드
  2. "Literature Review"(몇 가지 권장 사항, 부정적인 리뷰 없음)

1. 소스코드

소스 코드는 "daemon_over_rsh" 모드에서는 항상 명령줄 옵션만 사용하여 서버 측을 실행한다는 것이 상당히 명확해 보입니다 --server --daemon ..

rsync( 예를 들어 다른 옵션을 실행할 수 있는 옵션이 있었으면 좋겠습니다 /home/alan/rsync-custom-build/rsync. 하지만 그렇게 하고 있는지 이미 알고 계십니다.)

옵션.c

2390 void server_options(char **args, int *argc_p)
2391 {
2392         static char argstr[64];
2393         int ac = *argc_p;
2394         uchar where;
2395         char *arg;
2396         int i, x;
2397 
2398         /* This should always remain first on the server's command-line. */
2399         args[ac++] = "--server";
2400 
2401         if (daemon_over_rsh > 0) {
2402                 args[ac++] = "--daemon";
2403                 *argc_p = ac;
2404                 /* if we're passing --daemon, we're done */
2405                 return;
2406         }

메인 프로그램

 512                 server_options(args,&argc);
 513 
 514                 if (argc >= MAX_ARGS - 2)
 515                         goto arg_overflow;
 516         }
 517 
 518         args[argc++] = ".";
 519 
 520         if (!daemon_over_rsh) {
 ...
 534         }
 535 
 536         args[argc] = NULL;

세 번째 매개변수 - .- 다른 값으로 설정되어 있나요? 그것은 무엇을 합니까? ?

아니요, 아무것도 하지 않습니다.

옵션이 아닌 인수가 하나 이상 필요합니다. 이것이 없으면 메시지가 rsync인쇄 --help되고 종료 코드 1이 반환됩니다. 을 실행하면 rsync --server --daemon도움말 메시지가 stderr(즉, 터미널) 대신 syslog에 기록됩니다.

이는 필수이지만 옵션이 아닌 인수는 rsync --server --daemon완전히 무시됩니다.

1661         if (argc < 1) {
1662                 usage(FERROR);
1663                 exit_cleanup(RERR_SYNTAX);
1664         }
1665 
1666         if (am_server) {
1667                 set_nonblocking(STDIN_FILENO);
1668                 set_nonblocking(STDOUT_FILENO);
1669                 if (am_daemon)
1670                         return start_daemon(STDIN_FILENO, STDOUT_FILENO);
1671                 start_server(STDIN_FILENO, STDOUT_FILENO, argc, argv);
1672         }

2. 문학평론"

구글 검색어:

  • rsync 데몬 서버(sshd_config forcecommand) 또는 (authorized_keys 명령)
  • SSH를 통한 rsync 데몬 모드

결과의 첫 페이지를 스캔했습니다. 이 특정 문제에 대해 몇 가지 긍정적인 제안을 찾았지만 부정적인 피드백은 없었습니다. 부정적인 피드백이 없다는 것은 강력한 증거가 아닙니다. 보안 취약점은 나에게 rrsync더 중요한 문제인 것 같지만 ""rrsync" munge link"를 검색해서야 발견했습니다. Google은 외부 참조를 찾지 못했고 버그 보고서 자체만 찾았습니다.

관련 정보