Devo ativar a conta root para o rsync?

10

Como posso ativar a conta raiz? Sei que geralmente não é recomendado, mas gostaria de configurar um script não interativo para fazer backup do meu servidor usando o rsync. Eu poderia usar, --rsync-path="sudo rsync"mas precisaria armazenar minha senha do sudo de forma clara, o que parece muito pior do que ativar a conta root.

Olivier Lalonde
fonte

Respostas:

10
  1. Crie novas mybackupcontas de usuário separadas no cliente e no servidor
  2. Bloqueie as senhas sudo passwd -l mybackupdessas contas para impedir o login direto
  3. Permitir, através sudo, essas novas contas para executar um muito específico /usr/bin/rsync/ --some-long-command /from/here /to/therecomando como root com NOPASSWD:a /etc/sudoersutilizaçãosudo visudo
  4. Crie novas chaves SSH sem senha para o local no host remoto usando sudo -u mybackup ssh-keygen
  5. Adicione a sudo -u crontab -euma ou outra extremidade para executar o controle remoto rsyncusando sshe as chaves como o transporte

Dessa forma, o único comando que pode ser executado como root é o que você permitiu explicitamente, e o único usuário remoto que pode ativá-lo é o detentor da outra metade do par de chaves ssh instalado, que também possui a senha bloqueada. só pode ser alguém com acesso ao sudo ou o crontab que você configurou.

sladen
fonte
Isso é exatamente o que eu não pensei em permitir um comando muito específico em sudoers (eu permiti 'rsync'). Ótima sugestão!
Olivier Lalonde
2
+1 por observar "um comando ... muito específico". Caso contrário, conceder ao usuário o direito de executar sudo rsynce permitir que ele escolha as opções passadas para o rsync significa que o usuário pode usar o rsync para ler / gravar o /etc/sudoersarquivo, por exemplo, e conceder a si mesmo acesso total ao sudo.
Suzanne Dupéron
7
  1. Você pode editar /etc/sudoerspara permitir que qualquer usuário que esteja executando o comando (ou todos os usuários) o execute como rootsem senha (talvez um pouco perigoso com o rsync).

  2. Você não pode simplesmente executar todo o comando / script / o que for root? Presumo que isso seja executado via cron, basta adicionar um roottrabalho via:

    sudo crontab -e
    

    Nota: você pode fazer coisas bastante complexas envolvendo seu comando cron entre bash -e "..."chaves ou apenas fazê-lo em um script separado. Supondo que não seja definido, se for rootexecutado (através cron), ele será executado da rootmaneira que deve resolver seu problema de permissão.

Oli
fonte
O problema é que, se eu configurar o script na minha máquina local e executá-lo como root, ele terá problemas de permissão no servidor. Se eu configurar o script no meu servidor e executá-lo como root, a máquina local terá problemas de permissão. Em outras palavras, eu preciso ter privilégios de root nas máquinas local e de servidor.
Olivier Lalonde
Você pode escrever um script em cada extremidade e permitir que ele seja executado sudopor usuários normais. Isso seria mais seguro do que apenas permitir rsync.
Oli
Sudo é uma ótima idéia. Você pode especificar com precisão qual usuário pode executar qual comando. Faça.
Frank
6

Você pode (mas não deve) fornecer ao usuário root uma senha com

sudo passwd root

Editar: o bit Setuid não funciona para scripts. Caso contrário, você poderá usar o bit setuid no programa de backup.

sudo chown root backup
sudo chmod u+s backup

Talvez você queira executar o backup como um trabalho cron?

Frank
fonte
1
Você não precisa especificar "root", pois o sudo é executado como o ambiente da raiz, pois o usuário é root. ( sudo whoamiretorna, root), então sudo passwdé apenas necessário.
Marco Ceppi
setuid não funciona para scripts
enzotib
Certo, os scripts são executados pelo shell nomeado na linha she-bang. Desculpe pela desinformação.
Frank