¿Debo habilitar la cuenta raíz para rsync?

10

¿Cómo puedo habilitar la cuenta raíz? Sé que generalmente no se recomienda, pero me gustaría configurar un script no interactivo para hacer una copia de seguridad de mi servidor usando rsync. Podría usar, --rsync-path="sudo rsync"pero luego tendría que almacenar mi contraseña de sudo en claro, lo que parece mucho peor que habilitar la cuenta raíz.

Olivier Lalonde
fuente

Respuestas:

10
  1. Cree nuevas mybackupcuentas de usuario separadas en el cliente y el servidor
  2. Bloquee las contraseñas sudo passwd -l mybackuppara estas cuentas para evitar el inicio de sesión directo
  3. Permiten, a través de sudo, esas nuevas cuentas para ejecutar un muy específico /usr/bin/rsync/ --some-long-command /from/here /to/therede comandos como root con NOPASSWD:en /etc/sudoersel usosudo visudo
  4. Cree nuevas claves SSH sin contraseña para el host local al remoto utilizando sudo -u mybackup ssh-keygen
  5. Agregue sudo -u crontab -euno u otro extremo para ejecutar el control remoto rsyncutilizando sshy las teclas como transporte

De esta manera, el único comando que se puede ejecutar como root es el que ha permitido explícitamente, y el único usuario remoto que puede activarlo es el titular de la otra mitad del par de claves ssh instalado, que debido a que también tiene la contraseña bloqueada solo puede ser alguien con acceso a sudo o el crontab que configuró.

Sladen
fuente
Eso es exactamente lo que no pensé en permitir un comando muy específico en sudoers (permití 'rsync'). Gran sugerencia!
Olivier Lalonde
2
+1 por señalar "un comando muy específico ...". De lo contrario, otorgarle al usuario el derecho de ejecutar sudo rsyncy permitirle elegir las opciones pasadas a rsync significa que el usuario puede usar rsync para leer / escribir el /etc/sudoersarchivo, por ejemplo, y otorgarse acceso completo a sudo.
Suzanne Dupéron
7
  1. Puede editar /etc/sudoerspara permitir que cualquier usuario que ejecute el comando (o todos los usuarios) lo ejecute rootsin una contraseña (quizás un poco peligroso con rsync).

  2. ¿No puedes ejecutar todo el comando / script / lo que sea como root? Supongo que esto se ejecutará a través de cron, así que solo agregue un roottrabajo a través de:

    sudo crontab -e
    

    Nota: puede hacer cosas bastante complejas envolviendo su comando cron en una bash -e "..."llave o simplemente hacerlo en un script separado. Suponiendo que no está configurado, si lo rootejecuta ( cronse ejecutará), se ejecutará de rootmanera que debería resolver su problema de permiso.

Oli
fuente
El problema es que si configuro el script en mi máquina local y lo ejecuto como root, tendrá problemas de permisos en el servidor. Si configuro el script en mi servidor y lo ejecuto como root, entonces la máquina local será la que tenga problemas de permisos. En otras palabras, necesito tener privilegios de root en las máquinas locales y del servidor.
Olivier Lalonde
Podría escribir un script en cada extremo y permitir que sudolos usuarios normales lo ejecuten . Eso sería más seguro que simplemente permitir rsync.
Oli
Sudo es una gran idea. Puede especificar con precisión qué usuario puede ejecutar qué comando. Hazlo.
Frank
6

Podrías (pero no deberías) darle al usuario root una contraseña con

sudo passwd root

Editar: el bit Setuid no funciona para los scripts. De lo contrario, podría usar el bit setuid en el programa de respaldo.

sudo chown root backup
sudo chmod u+s backup

Tal vez, ¿incluso quieres ejecutar la copia de seguridad como un trabajo cron?

Franco
fuente
1
No es necesario especificar "raíz", ya que se ejecuta sudo como las raíces de env su usuario es root. ( sudo whoamiretornos, root) así que solo sudo passwdse necesita.
Marco Ceppi
setuid no funciona para scripts
enzotib
Correcto, los scripts son ejecutados por el shell nombrado en la línea she-bang. Perdón por la desinformación.
Frank