Configurar acceso SFTP a un directorio
Introducción
Configurando un contenedor con Borgbackup para facer copias de seguridade,
cheguei á necesidade de precisar configurar un servidor SFTP.
De entrada estaba a seguir o camiño coñecido e a priori máis sinxelo,
configurando SSH para o acceso remoto e usar SSHFS para montar a unidade
na que facer as copias. Pero resulta que aínda que dende o contenedor
podo chegar ao outro equipo, non podo montar deste xeito as unidades.
Xa que ao parecer nos contenedores, a lo menos no de Alpine, non se inclúe
FUSE. Polo que para ter esta posibilidade, tería que correr o contenedor
con privilexios. O cal supón un problema, xa que este tería permisos para
modificar prácticamente todo no host.
Outra opción era montar a unidade no host e compartila coma se fose un
volume. Pero tampouco me convencía, xa que para programar copias periódicas
debería facer configuracións nos equipos a salvar. A miña idea co contenedor
de Borgbackup é que sexa o máis autosuficiente posible. De xeito que poida
levalo a varios equipos sen configuracións locais, ou a lo menos cas mínimas.
Por isto vin que a mellor opción é crear un SFTP no destino e que Borgbackup
traballe con isto.
Así que aproveitando esta necesidade, recollo como crear un SFTP en Raspberry Pi OS. Descartando FTP e FTP/s por ser menos seguros. Xa que transmiten toda ou parte da información sen cifrar.
Comprobando a instalación
Para configurar SFTP, precisamos ter instalados os paquetes OpenSSH.
Xeralmente case toda-las distrubucións o traen instalado, pero se non é así
podemos obtelo dende os paquetes oficiais con apt install ssh
, para Debian
e derivadas.
Comprobaremos se está instalado executando:
dpkg -l | grep ssh
Que no meu caso amosa a seguinte saída, con Raspberry Pi OS:
ii libpam-chksshpwd:arm64 1.5.2-6+rpt2+deb12u1 arm64 PAM module to enable SSH password checking support
ii libssh2-1:arm64 1.10.0-3+b1 arm64 SSH2 client-side library
ii openssh-client 1:9.2p1-2+deb12u3 arm64 secure shell (SSH) client, for secure access to remote machines
ii openssh-server 1:9.2p1-2+deb12u3 arm64 secure shell (SSH) server, for secure access from remote machines
ii openssh-sftp-server 1:9.2p1-2+deb12u3 arm64 secure shell (SSH) sftp server module, for SFTP access from remote machines
ii ssh 1:9.2p1-2+deb12u3 all secure shell client and server (metapackage)
ii ssh-import-id 5.10-1 all securely retrieve an SSH public key and install it locally
Así que todo ben.
Configuración: grupo e usuario
Crearemos a continuación un grupo para SFTP, para asignarllo aos usuarios que queremos que poidan conectar co servidor, pero que non terán acceso a SSH, por seguridade. Así evitaremos que alguén que teña os datos para conectar ao SFTP, en troques se conecte ao servidor por SSH e tente gañar privilexios.
sudo groupadd sftpgroup
No meu caso xa teño o usuario creado, como expliquei neste artigo para crear usuarios restrinxidos. En lugar de crear un novo usuario, usarei ese mesmo. Así que asignareille ao usuario o novo grupo:
sudo usermod -aG sftpgroup $USER
Aquí mudaremos $USER polo nome do usuario que creamos.
Como resumo e sen complicar moito a cousa, para non ter que ir ao outro artigo. Para crear un usuario e asignalo ao grupo, executaremos:
sudo useradd -m -s /bin/bash -G sftgroup usuario
Creamos o usuario, xunto ca sua home co parámetro -m, indicando que traballará con bash con esta parte -s /bin/bash. Dicímoslle que tamén queremos que teña o grupo existente sftpgroup usando -G, e por último o nome do usuario.
Configurando SFTP
Escribiremos no ficheiro /etc/ssh/sshd_config/sftpgroup.config
, con permisos de administrador,
para engadir ao final o seguinte:
Subsystem sftp internal-sftp
Match Group sftpgroup
ChrootDirectory /directorio/sftp
X11Forwarding no
AllowTCPForwarding no
ForceCommand internal-sftp
NOTA: En lugar de modificar o ficheiro de configuración de sshd_config,
engadiremos un novo no directorio /etc/ssh/sshd_config.d/
, que vai ser
o que conteña os cambios. Se queremos desfacelos só precisaremos borrar o arquivo.
Tamén hai que ter coidado xa que no directorio /etc/ssh/
hai dúas configuracións.
Están as do cliente de ssh e as do servidor. Estas últimas son as que queremos agora,
e son as que comezan por sshd.
NOTA 2: tanto na configuración de ssh_config como sshd_config, impórtanse
os ficheiros que creemos nas carpetas ssh_config.d e sshd_config.d. Sempre
que non comecen por punto ou por ~
.
Nesta configuración estamos a evitar que o usuario se conecte por ssh, mentres lle forzamos a conectar por SFTP e indicamos a que directorio.
Aplicamos a configuración, reiniciando o servizo sshd:
sudo systemctl restart sshd
Conectando ao SFTP
Para conectarse ao servidor, usaremos o seguinte:
sftp ftpuser@server-ip
Se temos varias claves e queremos escoller a que utilizar, executaremos:
sftp -i /path/to/key ftpuser@server-ip
-i /path/to/key: indica a clave que queremos usar.
Xestionando varias conexións con distintas claves
No caso de que teñamos distintas claves almacenadas, para conectar a distintos servidores, como vimos podemos conectar utilizando a bandeira -i. Pero en canto a cousa medre un pouco, xa se fai máis complicado. Xa que teremos que lembrar as distintas claves, cal corresponde a onde, a qué usuario, etc.
Por sorte para nós, hai unha forma de resumir isto no noso sistema favorito. Creando configuracións. Para facelo, chega con crear un ficheiro config na carpeta .ssh da nosa home. Por exemplo con:
vim ~/.ssh/config
O contido deste ficheiro serán os distintos hosts aos que queiramos conectar. Como por exemplo o seguinte:
Host rp4
Hostname 192.168.1.100
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
User pi
Port 22
Aquí definimos un destino chamado rp4, apuntando a unha IP. Seleccionando que ficheiro de clave privada usar. Con IdentitiesOnly yes indicamos que só se use ca identidade que proveemos. Evitando que ssh probe con outras. Por último dicimos que o usuario será pi e porto a utilizar será o 22.
Un exemplo máis complexo pode ser o seguinte:
Host rp4
Hostname 192.168.1.100
User pi
Host rp3
Hostname 192.168.1.101
User angel
Host *
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
Port 22
Agora estamos a definir dous destinos rp4 e rp3. Cada un con cadanseu
usuario e dirección IP. Pero a parte interesante deste ficheiro son as catro
últimas liñas.
Con Host * estamos a marcar calquer host. Polo que as seguintes liñas
aplicarán a todo-los hosts. Así evitamos ter que repetir as configuracións,
por cada un deles. Neste caso ambos destinos compartirían o ficheiro de claves,
evitamos que probe con outras identidades e marcamos o porto 22.
NOTA: Estes ficheiros están copiados directamente do blog de uGeek, no artigo Simplifica o abrevia tus conexiones ssh.
Por último, para conectar agora a algún destes servidores, basta executar:
ssh rp4
Ou se queremos facelo por SFTP, basta:
sftp rp3
Conclusión e peche
Ter distintos usuarios, con distintas responsabilidades e permisos no sistema, é un bo xeito de protexernos. Evitando ter que usar un usuario con demasiados permisos, por exemplo un administrador. Neste artigo creamos un usuario, que non terá acceso á unha shell, tan só acceso FTP a un directorio. Polo que no caso de verse comprometido, o dano estará contido. Isto non quere dicir que nos descoidemos. Compre revisar de cando en cando os logs, para detectar intentos de intrusión, con este ou calquer outro usuario do noso sistema.
No seguinte artigo veremos como crear unha copia de seguridade utilizando este FTP, co programa Borgbackup.
Fontes
Howtoforge: https://howtoforge.es/como-instalar-y-utilizar-sftp-en-servidores-linux/
uGeek: Simplifica o abrevia tus conexiones ssh
Artigos Relacionados:
- Instalar Fedora con BTRFS, cifrado e Snapshots activos
- AWK
- Mudar as DNS en Fedora
- Distrobox
- Instalar Fedora en VirtualBox
- Eliminar liñas nun ficheiro con sed
- Cómo crear un live USB dende a terminal
- Engadir tarefas a Systemd
- Copiar a saída do terminal ao portapapeis
- Inicio de sesión automático en Alpine linux
- Crear un usuario con permisos restrinxidos para backups
- error: gpg failed to sign the data
- Xestionar varias claves ssh
- Cómo instalar Traefik con docker
- Configurar sshfs para acceder al sistema de ficheros de forma segura
- Securizar sudo no noso sistema
- Cómo instalar Raspberry OS
- Instalando docker en modo rootless en Debian
- Configuración e uso de GPG en linux