루트 없이 SSH를 통해 원격 시스템의 모든 파일을 재동기화하려면?

루트 없이 SSH를 통해 원격 시스템의 모든 파일을 재동기화하려면?

원격 컴퓨터를 백업하려면 이 명령이 있습니다. 문제는 모든 파일을 읽고 복사하려면 루트 액세스 권한이 필요하다는 것입니다. 보안상의 이유로 루트를 활성화하지 않고 sudoUbuntu 방식을 사용했습니다. 이를 수행하려면 멋진 파이프나 다른 것이 필요합니까?

rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/

답변1

먼저 루트 계정을 사용하는 것이 좋습니다. 다음과 같이 설정하면:

  • sshd_config대상 컴퓨터의 구성을 PermitRootLogin without-password.
  • 백업이 추출된 컴퓨터에서 ssh-keygenSSH 개인 키를 생성하는 데 사용합니다(아직 SSH 키가 없는 경우에만). 비밀번호를 설정하지 마세요. 이에 대한 자세한 정보가 필요하다면 Google 튜토리얼이 많이 있을 것입니다.
  • /root/.ssh/id_rsa.pub백업 컴퓨터의 내용을 /root/.ssh/authorized_keys대상 컴퓨터의 내용에 추가합니다.
  • 이제 백업 머신은 비밀번호 인증을 사용하지 않고도 대상 머신에 대한 루트 액세스 권한을 가질 수 있습니다.

그러면 최종 설정이 매우 안전해집니다.


sudo, 특히 NOPASSWD주석에서 제안된 것과 결합하여 루트 계정을 사용하는 것보다 보안상의 이점을 제공하지 않습니다. 예를 들어 다음과 같은 제안이 있습니다.

파일 에 다음을 추가합니다 /etc/sudoers.rsyncuser ALL= NOPASSWD:/usr/bin/rsync

어쨌든 기본적으로 rsyncuser루트 액세스 권한을 부여합니다. 물어:

rsync@MartinvonWittich ?를 사용하여 전체 루트 쉘을 얻는 것은 쉽습니다 sudo. go[m]e[through]하세요.

음, 간단합니다. 권장 구성을 사용하면 이제 비밀번호를 입력하지 않고도 rsyncuser루트로 실행할 수 있습니다 . 파일을 조작하는 매우 강력한 도구이므로 이제 루트 권한으로 파일을 조작할 수 있는 매우 강력한 도구가 있습니다. 이 문제를 악용하는 방법을 찾는 데는 몇 분밖에 걸리지 않았습니다(Ubuntu 13.04에서 테스트되었으며 필수이지만 성공 하지 못했습니다).rsyncrsyncrsyncuserdashbash

martin@martin ~ % sudo rsync --perms --chmod u+s /bin/dash /bin/rootdash
martin@martin ~ % rootdash
# whoami
root
# touch /etc/evil
# tail -n1 /etc/shadow
dnsmasq:*:15942:0:99999:7:::

보시다시피, 나는 whoami내 계정을 루트로 식별하고 그 안에 파일을 만들고 /etc읽을 수 있는 루트 셸을 만들었습니다 /etc/shadow. 내 취약점은 설정입니다설정값바이너리 비트 dash; Linux는 항상 소유자(이 경우 루트)의 권한으로 바이너리를 실행합니다.

실제 뿌리를 갖는 것은 타당한 이유 때문에 권장되지 않습니다. – redanimalwar 15시간 전

아니요, 루트 계정이 절대적으로 적합한 경우 서투르게 해결할 이유가 없습니다. 그건 또 다른 형태일 뿐이야화물 숭배 프로그래밍- 당신은 sudo와 root의 개념을 실제로 이해하지 못하고, 어딘가에서 읽었기 때문에 "루트는 나쁘고 sudo는 좋다"는 믿음을 맹목적으로 적용하고 있습니다.

한편으로는 그것이 sudo확실히 작업에 적합한 도구인 상황이 있습니다. 예를 들어, 그래픽 Linux 데스크탑(예: Ubuntu)에서 대화형으로 작업할 때 가끔 루트 액세스가 필요한 sudo드문 경우에 사용하는 것이 좋습니다 . Ubuntu는 sudo사용자가 항상 루트 계정으로 로그인하는 것을 방지하기 위해 의도적으로 루트 계정을 비활성화하고 기본적으로 이를 사용하도록 강제합니다 . 루트로 로그인하는 것은 사용자가 예를 들어 웹 브라우저만 사용하려는 경우 위험한 일이므로 기본적으로 루트 계정이 없으면 어리석은 사람들이 이 작업을 수행할 수 없습니다.

반면에, 귀하와 같은 일부 경우에는 자동화 스크립트에 백업 수행과 같은 작업에 대한 루트 액세스가 필요합니다. 이제 sudo문제를 해결하기 위해 루트 계정을 사용하는 것은 의미가 없을 뿐만 아니라 위험합니다. rsyncuser언뜻 보면 권한이 없는 일반 계정처럼 보입니다. 그러나 이미 설명했듯이 공격자가 이미 액세스 권한을 갖고 있다면 쉽게 전체 루트 액세스 권한을 얻을 수 있습니다 rsyncuser. 따라서 본질적으로 루트 계정처럼 전혀 보이지 않는 추가 루트 계정이 생겼는데 이는 좋은 일이 아닙니다.

답변2

원격 명령이 권한으로 실행 --rsync-path되도록 하려면 이 옵션을 사용하십시오 . 예를 들어 명령은 다음과 같아야 합니다.rsyncsudo

rsync -chavzP --rsync-path="sudo rsync" --stats [email protected]:/ .

sudo비밀번호를 묻는 메시지가 표시 되면 NOPASSWD원격 사용자 계정의 권한을 사용하여 이를 방지해야 합니다(루트의 경우 의미가 없으며 다른 사용 사례에서는 의미가 있을 수 있음). 이를 원하지 않는 경우:

  • 예를 들어 다음을 실행하고 입력하여 tty_tickets사용 중인 사용자가 옵션을 비활성화했는지 확인하십시오.sudo visudo -f /etc/sudoers.d/local-rsync

    Defaults:your.username.for.rsync !tty_tickets
    
  • requiretty사용 중인 사용자가 이 옵션을 비활성화했는지 확인하십시오 . 아마도 기본적으로 꺼져 있을 것입니다. 방법은 위와 동일합니다.

  • sudo예를 들어 다음을 실행하여 원격 시스템에서 비밀번호를 시드합니다.ssh -t [email protected] sudo

답변3

쉬운 방법은 다음 ssh-askpass과 같은 기능을 갖춘 그래픽 프로그램을 사용하는 것입니다 sudo. 이는 터미널에 연결되어 있지 않다는 사실을 피하고 sudo비밀번호를 안전하게 입력할 수 있게 해줍니다.

rsync -chavzPe 'ssh -X' --stats \
  --rsync-path='SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A rsync' \
  [email protected]:/ .

물론 해당 ssh-askpass프로그램은 지정된 위치에 설치되어 있어야 하며, 사용 중인 컴퓨터에서 X 세션이 실행되고 있어야 합니다. 이 프로그램에는 ssh-askpass작동해야 하는 몇 가지 변형이 있습니다 (Gnome/KDE 버전). 또는 또는 같은 그래픽 교체 프로그램이 sudo작동해야 합니다.gksukdesudo

답변4

오늘 이 문제가 발생하여 구성 파일을 수정하거나 사용자 계정에 루트 수준 권한을 부여하지 않고 해결했습니다. 내 특별한 설정은 A컴퓨터의 사용자가 foo자신이 소유한 디렉터리의 모든 사용자 디렉터리를 foo컴퓨터로 복사해야 한다는 것입니다. (사용자에게 sudo 권한이 있습니다.)barbackupAAfoo

내가 사용하는 명령은 다음과 같습니다. A디렉토리의 사용자가 호출합니다 ./homefoo

sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A"  * B:/home/backup

이는 모든 사용자 디렉터리에 액세스할 수 있도록 rsync를 sudo로 실행 하지만 rsync에게 사용자 자격 증명을 foo사용하여 시스템에 액세스하려면 ssh를 사용하도록 지시합니다 . 내 요구 사항은 위의 질문과 약간 다르지만 이를 통해 시스템 구성을 손상시키지 않고 내가 관리하는 특정 컴퓨터의 모든 사용자 디렉터리를 신속하게 백업할 수 있습니다.barA

관련 정보