Eu tenho esse comando para fazer backup de uma máquina remota. O problema é que eu preciso de direitos de root para ler e copiar todos os arquivos. Não tenho usuário root habilitado por razões de segurança e uso sudo
o modo Ubuntu. Eu precisaria de alguma tubulação legal ou algo para fazer isso?
rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
root
conta em primeiro lugar.sudo
, especialmente combinado comNOPASSWD
o recomendado nos comentários, não melhora realmente a segurança da sua máquina.Respostas:
Eu recomendaria que você usasse a conta root em primeiro lugar. Se você configurá-lo assim:
sshd_config
na máquina de destino paraPermitRootLogin without-password
.ssh-keygen
na máquina que executa o backup para criar uma chave privada SSH (somente se você ainda não tiver uma chave SSH). Não defina uma senha. Google um tutorial, se você precisar de detalhes para isso, deve haver uma abundância./root/.ssh/id_rsa.pub
máquina de backup ao/root/.ssh/authorized_keys
da sua máquina de destino.a configuração resultante deve ser bastante segura.
sudo
, especialmente combinado comNOPASSWD
o recomendado nos comentários, não possui benefícios de segurança ao usar apenas a conta raiz. Por exemplo, esta sugestão:essencialmente dá
rsyncuser
permissões de root de qualquer maneira. Você pergunta:Bem, simples. Com a configuração recomendada,
rsyncuser
agora pode ser executadorsync
como root sem sequer ser solicitada uma senha.rsync
é uma ferramenta muito poderosa para manipular arquivos, então agorarsyncuser
tem uma ferramenta muito poderosa para manipular arquivos com permissões de root. Encontrar uma maneira de explorar isso levou apenas alguns minutos (testado no Ubuntu 13.04, requerdash
,bash
não funcionou):Como você pode ver, eu criei um shell raiz;
whoami
identifica minha conta como raiz, posso criar arquivos/etc
e posso ler/etc/shadow
. Minha exploração foi definir o bit setuid nodash
binário; faz com que o Linux sempre execute esse binário com as permissões do proprietário, neste caso raiz.Não, trabalhar desajeitadamente na conta raiz em situações em que é absolutamente apropriado usá-la não é por boas razões. Essa é apenas outra forma de programação de cultos de carga - você realmente não entende o conceito por trás do sudo x root, aplica cegamente a crença de que "a raiz é ruim, o sudo é bom" porque você leu em algum lugar.
Por um lado, há situações em que
sudo
definitivamente é a ferramenta certa para o trabalho. Por exemplo, quando você está trabalhando interativamente em uma área de trabalho gráfica do Linux, digamos Ubuntu, então é necessário tersudo
bom uso nos casos raros em que às vezes você precisa de acesso root. O Ubuntu intencionalmente possui uma conta root desabilitada e obriga a usarsudo
por padrão para impedir que os usuários sempre usem a conta root para efetuar login. Quando o usuário apenas deseja usar, por exemplo, o navegador da Web, fazer login como root seria uma coisa perigosa. e, portanto, não ter uma conta root por padrão impede que pessoas estúpidas façam isso.Por outro lado, há situações como a sua, em que um script automatizado requer permissões de root para algo, por exemplo, para fazer um backup. Agora, usar
sudo
a solução para a conta raiz não é apenas inútil, também é perigoso: à primeira vista,rsyncuser
parece uma conta comum e sem privilégios. Mas, como eu já expliquei, seria muito fácil para um invasor obter acesso root completo se ele já tivessersyncuser
acesso. Portanto, agora você tem uma conta root adicional que não se parece com uma conta root, o que não é uma coisa boa.fonte
/root/.ssh/authorized_keys
, ou até mesmo criar várias contas de raiz com diferentes casas de modo que cada usuário pode ter sua própria concha, casa e.ssh/authorized_keys
:)sshd
geralmente faz não log que autorizou chave foi usada para conectar a uma conta, por isso, se você se conectar comobob
, em seguidasudo
, você tem uma trilha de auditoria melhor do que se você ligar pararoot
diretamente combob
's chave.Utilize a
--rsync-path
opção para executar orsync
comando remoto comsudo
privilégios. Seu comando deve ser, por exemplo:Se
sudo
você solicitar uma senha, será necessário evitar isso usando umNOPASSWD
privilégio com a conta de usuário remoto (inútil para raiz, pode fazer sentido em outros casos de uso) ou se você não quiser:Verifique se a opção
tty_tickets
está desativada para o usuário que você está usando, executando, por exemplo,sudo visudo -f /etc/sudoers.d/local-rsync
e digitando:Verifique se a opção
requiretty
está desativada para o usuário que você está usando - ela pode estar desativada por padrão. O método é o mesmo que acima.Propague a
sudo
senha na máquina remota executando, por exemplo,ssh -t [email protected] sudo
fonte
sudo
senha, não assh
senhasudo /usr/bin/rsync
solicite uma senha; verifiqueman sudoers
como fazer isso; convém criar um usuário de backup extra para isso.sudo /usr/bin/rsync
a execução sem a necessidade de senha, adicione o seguinte ao seu/etc/sudoers
arquivo:rsyncuser ALL= NOPASSWD:/usr/bin/rsync
Isso permitirá ao usuário rsyncuser (como mencionado acima, seria melhor criar um usuário de backup dedicado) com o nome de usuário desejado.rsync
basicamente sempre tem permissões de root; provavelmente é muito fácil obter um shell raiz completo nessa conta. Eu acho que é melhor usar apenas a conta raiz real em primeiro lugar.echo "password" | something
eu realmente nunca usei isso e concordo com os problemas de segurança que vêm deixando a execução sudoless do rsync (também não sugerida aqui) é ruim. Otty_tickets
que eu realmente não tenho idéia, parece necessário e um problema de segurança. Isso funcionaria com segurança, sem alterar nada, apenas executando o sodo no ssh e executando o comando, certo? Mas desde que fiz essa pergunta para fins de script, concordo totalmente que o ssh baseado em chave sem pw é o seguro e o correto a fazer. Aceitei a resposta de Martins.Uma maneira simples de fazer isso é usar o
ssh-askpass
programa gráficosudo
, isso evita o fato de quesudo
não está conectado ao terminal e permite que você digite a senha com segurança:Obviamente, o
ssh-askpass
programa deve ser instalado no local especificado e você deve estar executando uma sessão X na máquina em que está trabalhando. Existem algumas variações nossh-askpass
programa que também devem funcionar (versões do Gnome / KDE). Também umsudo
programa de substituição gráfica comogksu
oukdesudo
também deve funcionar.fonte
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .
não funcionarsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]
. Ah, o ubuntu envia gnome-ssh-askpass, mas é/usr/bin/ssh-askpass
, em vez de/usr/lib/ssh/x11...
. Assim que funcionou :)ssh-askpass
. Eu só tinha que procurar o significado de-chavzPe
, seria ótimo explicar isso como opções longas.xeyes
usando o SSH.Se o seu usuário já possui privilégios de sudo protegidos por uma senha, eu os manteria como estão e apenas adicionaria uma estrofe para usar o rsync sem uma senha:
fonte
Encontrei esse problema hoje e o resolvi sem a necessidade de modificar arquivos de configuração ou conceder permissões no nível raiz a contas de usuário. Minha configuração específica era que o usuário
A
na máquinafoo
tinha que copiar todos os diretórios do usuáriofoo
para a máquinabar
em umbackup
diretório que o usuárioA
possuía. (O usuárioA
tem privilégios de sudo ativadosfoo
.)O comando que usei está abaixo. Foi chamado pelo usuário
A
no/home
diretório emfoo
.Isso executa o rsync como sudo, para que todos os diretórios do usuário
foo
possam ser acessados, mas diz ao rsync para usar o ssh para acessar a máquinabar
usando asA
credenciais do usuário . Minhas necessidades eram um pouco diferentes da pergunta acima, mas isso me permitiu obter rapidamente um backup de todos os diretórios de usuários em uma máquina específica que eu gerencio sem mexer na configuração do sistema.fonte
-i
opção dessh
. Você pode usar--rsync-path="sudo /usr/bin/rsync"
se tiver sudo na máquinabar
. Isso então lêroot@foo
e escreve comoroot@bar
, mas transfere viaA@foo
->B@bar
. Obrigado!A execução do rsync como daemon na máquina de destino permite que você faça o que deseja.
fonte
Minha solução é usar,
--rsync-path="sudo rsync"
mas ele pede senha, solução alternativa:fonte
$( cat my_password.txt )
qual é um pouco melhor, mas geralmente é preferível configurar as permissões em ambas as extremidades e / ou usar chaves SSH, de modo que as senhas não sejam necessárias na CLI