원격 컴퓨터를 백업하는이 명령이 있습니다. 문제는 모든 파일을 읽고 복사하려면 루트 권한이 필요하다는 것입니다. 보안상의 이유로 루트 사용자가 활성화되어 있지 않으며 sudo
Ubuntu 방식을 사용 합니다. 이 작업을하려면 멋진 파이핑이나 무언가가 필요합니까?
rsync -chavzP --stats user@192.168.1.2:/ /media/backupdisk/myserverbackup/
원격 컴퓨터를 백업하는이 명령이 있습니다. 문제는 모든 파일을 읽고 복사하려면 루트 권한이 필요하다는 것입니다. 보안상의 이유로 루트 사용자가 활성화되어 있지 않으며 sudo
Ubuntu 방식을 사용 합니다. 이 작업을하려면 멋진 파이핑이나 무언가가 필요합니까?
rsync -chavzP --stats user@192.168.1.2:/ /media/backupdisk/myserverbackup/
답변:
우선 루트 계정을 사용하는 것이 좋습니다. 다음과 같이 설정 한 경우 :
sshd_config
대상 머신을로 구성하십시오 PermitRootLogin without-password
.ssh-keygen
SSH 개인 키를 작성하기 위해 백업을 가져 오는 머신에서 사용하십시오 (SSH 키가없는 경우에만). 암호를 설정하지 마십시오. 구글 튜토리얼에 대한 자세한 내용이 필요하면 충분해야합니다./root/.ssh/id_rsa.pub
백업 머신 의 내용을 /root/.ssh/authorized_keys
대상 머신 의 내용에 추가하십시오 .결과 설정은 꽤 안전해야합니다.
sudo
, 특히 NOPASSWD
의견에서 권장 하는 대로 결합 하면 루트 계정을 사용하는 것보다 보안상의 이점이 없습니다. 예를 들면 다음과 같습니다.
/etc/sudoers
파일에 다음을 추가 하십시오.rsyncuser ALL= NOPASSWD:/usr/bin/rsync
기본적으로 제공 rsyncuser
어쨌든 루트 권한을. 물어:
@MartinvonWittich 다음으로
rsync
실행 되기 때문에 전체 루트 셸을 쉽게 얻을 수sudo
있습니까? 그 곳을 걸어보세요.
글쎄요, 간단합니다. 권장 구성 을 사용하면 비밀번호를 요구하지 않아도 루트로 rsyncuser
실행될 수 rsync
있습니다. rsync
파일을 조작하는 강력한 도구이므로 이제 rsyncuser
루트 권한으로 파일을 조작하는 강력한 도구가 있습니다. 이것을 악용하는 방법을 찾는 데 몇 분 밖에 걸리지 않았습니다 (Ubuntu 13.04에서 테스트되었으며 dash
, bash
작동하지 않았습니다).
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
. 내 착취는 바이너리 에 setuid 비트 를 설정하는 것이 었습니다 dash
. Linux는 항상 소유자의 권한으로이 바이너리를 실행합니다 (이 경우 root).
진정한 뿌리를 갖는 것은 좋은 이유가 아니라 [권장]이 아닙니다. – redanimalwar 15 시간 전
아니요. 루트 계정을 사용하는 것이 절대적으로 적절한 상황에서 루트 계정을 서투르게 사용하는 것은 좋은 이유가 아닙니다. 이것은 화물 컬트 프로그래밍 의 또 다른 형태입니다. sudo 대 root의 개념을 실제로 이해하지 못하고, 어딘가에서 읽었 기 때문에 "root가 나쁘고 sudo가 좋습니다"라는 신념을 맹목적으로 적용합니다.
한편으로, sudo
업무에 꼭 맞는 도구 인 상황이 있습니다 . 예를 들어, 그래픽 리눅스 데스크탑에서 대화식으로 작업 할 때 우분투를 말하면 sudo
루트 액세스가 필요한 드문 경우에 사용해야합니다. 우분투는 의도적으로 루트 계정을 비활성화 sudo
했으며 사용자가 항상 루트 계정을 사용하여 로그인하지 못하도록 기본적 으로 사용하도록 강요합니다 . 사용자가 웹 브라우저 등을 사용하려는 경우 루트로 로그인하는 것은 위험한 일입니다 따라서 기본적으로 루트 계정이 없으면 바보 같은 사람들이이 작업을 수행 할 수 없습니다.
다른 한편으로, 자동화 된 스크립트가 예를 들어 백업을 만들기 위해 루트 권한을 요구하는 상황이 있습니다. 이제 sudo
루트 계정을 해결하기 위해 사용 하는 것은 무의미 할뿐만 아니라 위험합니다. 언뜻 rsyncuser
보기에는 일반 권한이없는 계정처럼 보입니다. 그러나 이미 설명했듯이 공격자가 이미 rsyncuser
액세스 권한을 얻은 경우 전체 루트 액세스 권한을 얻는 것이 매우 쉽습니다 . 따라서 본질적으로 루트 계정처럼 보이지 않는 추가 루트 계정이 생겼습니다. 이는 좋지 않습니다.
/root/.ssh/authorized_keys
있도록 각 사용자가 자신의 쉘, 가정 및있을 수있는 다른 가정에 여러 루트 계정을 만들 짝수 또는 .ssh/authorized_keys
:)
sshd
일반적으로 계정에 연결하는 데 사용 된 인증 된 키를 기록 하지 않기 때문에 bob
그때 sudo
와 같이 연결하면 의 키로 root
직접 연결하는 것보다 더 나은 감사 추적을 얻는 것 bob
입니다.
의 사용하십시오 --rsync-path
원격 있도록 옵션을 rsync
실행 명령 sudo
권한을. 그런 다음 명령은 다음과 같아야합니다.
rsync -chavzP --rsync-path="sudo rsync" --stats user@192.168.1.2:/ .
경우 sudo
암호를 입력하라는 메시지를 표시합니다, 당신이 중 하나를 사용하여 것을 방지하기 위해이 NOPASSWD
원격 사용자 계정과 권한 (루트 무의미 다른 사용 사례에서 의미가 있음), 또는 당신은 그렇게하지 않으려면 :
옵션이 있는지 확인 tty_tickets
당신은 예를 들어 실행하여 사용하는 사용자에 대한 비활성화 sudo visudo -f /etc/sudoers.d/local-rsync
및 입주를 :
Defaults:your.username.for.rsync !tty_tickets
requiretty
사용중인 사용자에 대해 옵션 이 비활성화되어 있는지 확인하십시오 . 기본적으로 꺼져있을 수 있습니다. 방법은 위와 동일합니다.
다음 sudo
을 실행하여 원격 시스템 의 비밀번호를
시드하십시오.ssh -t user@192.168.1.2 sudo
sudo
비밀 아닌 ssh
비밀
sudo /usr/bin/rsync
하면 암호를 묻지 않고 사용자가 할 수 있습니다 . man sudoers
이를 수행하는 방법을 확인하십시오 . 이를 위해 추가 백업 사용자를 생성 할 수 있습니다.
sudo /usr/bin/rsync
암호가 당신에 다음을 추가로 할 필요없이 실행 /etc/sudoers
파일 : rsyncuser ALL= NOPASSWD:/usr/bin/rsync
원하는 사용자 이름 (이 전용 백업 사용자를 생성하는 가장 좋은 것입니다 위에서 언급 한 바와 같이)이 사용자 rsyncuser을 수 있습니다.
rsync
기본적으로 항상 루트 권한을 갖습니다. 해당 계정에서 전체 루트 셸을 얻는 것이 매우 쉽습니다. 처음에는 실제 루트 계정을 사용하는 것이 좋습니다.
echo "password" | something
내가 결코 말하지 않은 대답은 실제로 이것을 사용하지 않았으며 rsync (여기서는 제안되지 않음)의 sudoless 실행이 나쁘게 만드는 보안 문제에 동의합니다. (가) 무엇 tty_tickets
내가 실제로 아무 생각하지, 필요 보인다 보안 문제. 이것은 ssh에서 sodo를 실행 한 다음 명령을 올바르게 실행하여 아무것도 조정하지 않고 안전하게 작동합니까? 그러나 스크립팅 목적으로 그 질문을 했으므로 pw가없는 키 기반 ssh가 안전하고 옳은 일이라는 데 전적으로 동의합니다. 대신 Martins의 답변을 수락했습니다.
이 작업을 수행하는 간단한 방법 중 하나는와 ssh-askpass
함께 그래픽 프로그램 을 사용하는 sudo
것 sudo
입니다. 터미널에 연결되지 않은 사실 을 극복하고 암호를 안전하게 입력 할 수 있습니다.
rsync -chavzPe 'ssh -X' --stats \
--rsync-path='SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A rsync' \
user@192.168.1.2:/ .
물론 ssh-askpass
프로그램은 주어진 위치에 설치되어 있어야하며 작업중인 컴퓨터에서 X 세션을 실행해야합니다. ssh-askpass
프로그램 에는 약간의 변형 이 있으며 작동해야합니다 (Gnome / KDE 버전). 또한 그래픽 sudo
교체 프로그램이 작동 gksu
하거나 kdesudo
작동해야합니다.
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .
작동하지 않습니다. rsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]
. 아, 우분투는 gnome-ssh-askpass를 제공하지만 /usr/bin/ssh-askpass
대신에입니다 /usr/lib/ssh/x11...
. 그래서 작동했습니다 :)
ssh-askpass
. 방금의 의미를 찾아야 만했습니다 -chavzPe
.
xeyes
입니다. SSH를 사용하여 실행 하여 확인했습니다 .
사용자가 이미 비밀번호로 보호 된 sudo 권한을 가지고 있다면 그대로 유지하고 비밀번호없이 rsync를 사용하기 위해 스탠자를 추가합니다.
%admin ALL=(ALL) ALL
%admin ALL= NOPASSWD:/usr/bin/rsync
오늘이 문제가 발생하여 구성 파일을 수정하거나 사용자 계정에 루트 수준 권한을 부여 할 필요없이 해결했습니다. 내 특별한 설정 A
은 컴퓨터 foo
의 사용자 가 사용자가 소유 한 디렉토리의 모든 사용자 디렉토리 foo
를 컴퓨터 로 복사해야 한다는 것 입니다. (사용자 에게는에 대한 sudo 권한이 있습니다 .)bar
backup
A
A
foo
내가 사용한 명령은 다음과 같습니다. A
의 /home
디렉토리에서 사용자가 호출했습니다 foo
.
sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A" * B:/home/backup
이것은 rsync를 sudo로 실행하여 모든 사용자 디렉토리에 foo
액세스 할 수 있지만 rsync에게 ssh를 bar
사용하여 사용자 A
의 자격 증명을 사용하여 시스템에 액세스하도록 지시 합니다. 내 요구 사항은 위의 질문과 약간 달랐지만 시스템 구성을 조정하지 않고 관리하는 특정 컴퓨터의 모든 사용자 디렉토리를 신속하게 백업 할 수있었습니다.
-i
옵션을 잊었습니다 ssh
. --rsync-path="sudo /usr/bin/rsync"
기계에 sudo가 있으면 사용할 수 있습니다 bar
. 그러면 다음 root@foo
과 같이 읽고 root@bar
쓰지만 A@foo
-> 를 통해 전송 B@bar
합니다. 감사!
대상 시스템에서 데몬으로 rsync를 실행하면 원하는 작업을 수행 할 수 있습니다.
내 해결책은 사용하는 --rsync-path="sudo rsync"
것이지만 암호를 묻는 해결책입니다.
rsync -chavzP --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync" user@192.168.1.2:/ .
$( cat my_password.txt )
약간 더 나은 것으로 대체 하지만 일반적으로 CLI에서 비밀번호가 필요하지 않은 방식으로 한쪽 끝에 권한을 구성하거나 SSH 키를 사용하는 것이 좋습니다.
root
먼저 계정을 사용하십시오 .sudo
, 특히NOPASSWD
의견에서 권장 하는 것과 결합하여 실제로 컴퓨터의 보안을 향상 시키지는 않습니다.