Necesito realizar una copia de seguridad de un servidor en mi computadora usando Duplicity:
duplicity /etc sftp://[email protected]//home/backup
Para poder hacer esto, necesito permitir el acceso sin contraseña haciendo lo siguiente:
$ ssh-keygen
$ ssh-copy-id [email protected]
$ ssh [email protected]
Mi pregunta es, ¿cómo puedo restringir el comando solo a esta transferencia SFTP en la clave pública que se genera?
command="restrict to sftp",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…
Y dado que estoy en una dirección IP dinámica, ¿cómo puedo superar el problema del "host desconocido perdido" cada vez que cambia mi IP?
ssh
sftp
key-authentication
account-restrictions
Desbordamiento de preguntas
fuente
fuente
Respuestas:
Hay 2 métodos para hacer esto.
1. - Restringir a través de sshd
Este método implica la creación de la función de SFTP dentro de su demonio SSH,
sshd
. Esto se controla a través del/etc/ssh/sshd_config
archivo de configuración. NOTA: Esto restringirá al usuario,backup
para que solo se le permita SFTP en el servidor.2. - Restricción a través de claves_autorizadas
Este método no implica ningún cambio en el
sshd_config
archivo. Puede limitar un usuario + una tecla SSH a un solo comando a través de lacommand=
función que ya ha mencionado en su pregunta. El truco está en qué comando incluyes. Puede colocar el servidor SFTP en estacommand=
línea, lo que tiene el mismo efecto que configurar el servidor SFTP en susshd_config
archivo.NOTA: si el usuario tiene acceso de escritura
~/.ssh/authorized_keys
, puede leerlo y / o modificarlo. Por ejemplo, podrían descargarlo, editarlo y volver a cargarlo, quitándolocommmand=...
y otorgándole acceso ilimitado al comando, incluido el shell. Si el usuario tiene acceso de escritura~/.ssh
, también podría simplemente desvincular y volver a crear el archivo, ochmod
para acceder a escritura. Existen muchas soluciones posibles, como~/.ssh/authorized_keys
guardar los archivos en un lugar que el usuario no pueda escribir, como por ejemplo:Esto es más complicado pero se puede hacer usando la
from=
función dentro delauthorized_keys
archivo también. Aquí estamos limitando el acceso de sólo el anfitrión,somehost.dyndns.org
.Las configuraciones adicionales después de la
command=
son igualmente importantes, ya que limitarán aún más el uso de la clave SSH.desglose de características
from='hostname1,hostname2,''
- Restringe el acceso desde los patrones de IP o nombre de host especificadoscommand='command'
- Ejecuta el comando especificado después de la autenticaciónno-pty
- No asigna una pty (no permite inicio de sesión interactivo)no-port-forwarding
- No permite el reenvío de puertosno-X11-forwarding
- el usuario no podrá eliminar las GUI X11 de la pantallano-agent-forwarding
- el usuario no podrá reenviar a través de este host a otros hosts internosPara deshacerse del mensaje sobre los "hosts conocidos faltantes", puede agregar esta opción SSH al cliente cuando se conecta así:
Consulte la página de manual
ssh_config
para obtener detalles completos sobre este interruptor.Restringiendo el shell del usuario
Para ambas soluciones anteriores, es probable que desee bloquear al
backup
usuario limitando también el shell de este usuario en el/etc/passwd
archivo. Por lo general, querrá configurarloscponly
, pero también hay otras opciones para esto. Vea estas preguntas y respuestas de U&L tituladas: " ¿Necesita un shell para SCP? " Para conocer las formas de hacerlo.El uso de
/sbin/nologin
también se puede usar si opta por usar la función chrootsshd_config
como se describe en el # 1 anterior. Sin embargo, si opta por utilizar el método descrito en el n . ° 2 , es probable que tenga que usarscponly
u otra cosa para el shell del usuario/etc/passwd
.BONIFICACIÓN - Extendiendo # 2 arriba
Si necesita exponer un conjunto de comandos para este usuario, también puede hacerlo. Crea un script así
/home/backup/commands.sh
:Luego configura el
authorized_keys
archivo de esta manera:El
backup
usuario puede ejecutar estos comandos así:Referencias
fuente
/sbin/nologin
evitará que el servidor acceda a mi computadora con SFTP. Esto lo intenté.known_hosts
archivo ssh . Marki proporcionó la solución correcta en su comentario. Elfrom
parámetro en elauthorized_keys
archivo en mi equipo C sólo restringe la ubicación desde la que se puede conectar a S C/sbin/nologin
funciona si utilizo el comando force eninternal-sftp
lugar del/usr/libexec/openssh/sftp-server
que especificó en el certificado. Supongo que estos son dos subsistemas diferentes. Y crear un directorio chroot para el primero es mucho más sencillo.Shell restringido
Debe asignar un shell restringido como scponly o rssh.
Cuando usa scp o sftp, se está conectando al sitio remoto a través de ssh y luego el shell remoto ejecuta un proceso scp o un proceso sftp. Lo que necesita es un shell restringido que solo permita que scp o sftp bloqueen el inicio de sesión.
fuente