제한된 rsync 스크립트를 살펴보니,동기화, 이는 에서 언급됩니다 man rsync
. 기본적으로 클라이언트 명령은 SSH를 통해 실행되는 원격 명령 rsync
에 모든 옵션을 전달하는 것으로 보입니다 . 사람들이 서버에서 허용하는 경로와 옵션을 제한하는 데 사용하는 200줄 이상의 Perl 스크립트입니다. 이에 대한 나의 첫 반응은 "으악"이었습니다. 이 옵션이 실제로 어떻게 사용되는지에 대해 문서가 의도적으로 모호하다는 것은 도움이 되지 않습니다 .rsync
rrsync
rsync
--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
실제로 네트워크 프로토콜의 일부이며 일반적으로 이전 버전과 호환됩니다.
- 소스 코드
- "Literature Review"(몇 가지 권장 사항, 부정적인 리뷰 없음)
1. 소스코드
소스 코드는 "daemon_over_rsh" 모드에서는 항상 명령줄 옵션만 사용하여 서버 측을 실행한다는 것이 상당히 명확해 보입니다 --server --daemon .
.
rsync
( 예를 들어 다른 옵션을 실행할 수 있는 옵션이 있었으면 좋겠습니다 /home/alan/rsync-custom-build/rsync
. 하지만 그렇게 하고 있는지 이미 알고 계십니다.)
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은 외부 참조를 찾지 못했고 버그 보고서 자체만 찾았습니다.
- https://gist.github.com/trendels/6582e95012f6c7fc6542
- https://indico.cern.ch/event/577279/contributions/2354037/attachments/1366772/2071442/Hepsysman-keeping-in-sync.pdf
- https://serverfault.com/questions/6367/cant-get-rsync-to-work-in-daemon-over-ssh-mode
- 어떤 이유로 / 대신 사용자 정의 셸을 사용하는 전용 사용자를 사용하는
command=""
특이한 변형 :ForceCommand
http://mennucc1.debian.net/howto-ssh-rsyncd.html