SSH es un protocolo seguro que nos permite conectarnos, loguearnos y administrar desde linea de comandos un sistema remoto. Funciona bajo un arquitectura cliente servidor, de modo que necesitamos habilitar un servidor SSH en el sistema que queremos administrar para que no permita conectarnos desde un cliente.
Se diseño inicialmente para sistemas basados en Unix, como reemplazo del protocolo Telnet por su falta de seguridad. Se utiliza generalmente para trabajar en sistemas remotos a través de una interfaz de linea de comandos y ejecutar instrucciones. También es utilizado por algunos protocolos de transferencia de archivos como SFTP o SCP.
Por defecto SSH utiliza el puerto 22, usa una encriptación de clave pública y la implementación más extendida es OpenSSH.
Los clientes más habituales para conectarnos mediante SSH:
Para instalar un servidor SSH en nuestro sistema linux:
$ apt-get install openssh-server
Al instalar el servicio SSH, también se instalará un servicio de transferencia de archivos conocido como SSH FTP ó SFTP, y que funciona sobre el servicio SSH. Este servicio de transferencia funciona en el puerto 22, y no debemos confundirlo con el servicio FTP.
Para desinstalar:
$ apt-get purge openssh-server
El archivo de configuración de SSH se encuentra en: /etc/ssh/sshd_config
. Si queremos utilizar otro puerto para conexiones al servidor modificaremos ese fichero:
# Descomentaremos la siguiente linea e indicaremos el puerto deseado # Port 22 # Despues reiniciamos el servicio $ systemctl restart sshd
Para conectarnos desde un cliente SSH:
# Conexión al puerto estandar 22 ssh usuario@ip_servidor # Para conexiones en otros puertos ssh -p puerto usuario@ip_servidor
Es un protocolo usado para la transferencia de ficheros entre un cliente y un servidor a través de una red. Utiliza dos conexiones diferentes: una para los datos y otra para los comandos. Los usuarios se puede conectar mediante un usuario y una contraseña. Es un protocolo muy antiguo, ya que se diseñó en 1971. En aquel momento las implicaciones de seguridad eran bastante distintas a las actuales, por lo que se ha mejorado con algunas implementaciones siendo lo más habitual utilizarlo junto al protocolo SSL/TLS.
Como hemos comentado, FTP utiliza dos conexiones para trabajar mantenidas en dos puertos diferentes, que inicialmente eran el 20 y el 21.
El cliente FTP se conecta por el puerto 21 al servidor FTP y se establece una Conexión de Control. Mediante esta conexión se envían diferentes señales: órdenes del cliente al servidor y respuestas por parte de éste. Estas órdenes FTP especifican parámetros para la conexión de datos (puerto de datos, modo de transferencia, etc.), para gestión de la estructura de archivos o subida o descarga de los mismos.
El Proceso de Transferencia de Datos debe esperar a que el servidor inicie la conexión al puerto de datos especificado (puerto 20 en modo activo o estándar) y transferir los datos en función de los parámetros que se hayan especificado.
Para desplegar una aplicación web es necesario subir una cantidad de ficheros a nuestro servidor. Aunque existan paneles de control instalables en nuestros servidores que nos permiten realizar operaciones de transferencia de archivos desde nuestro navegador web, utilizar servicios de transferencia nos facilita la tarea de copia de grandes cantidades de archivos al mismo tiempo.
Además nos permiten hacer un control de seguridad limitando el espacio máximo permitido de uso, el control de usuarios, escriptar las transmisiones de datos, etc.
En caso de que trabajemos con un servidor virtual privado (VPS), que es la forma más habitual de contratar un servidor profesional, además necesitaremos de una forma de gestión remota que sea segura. Ahí es dónde entra en funcionamiento el protocolo SSH.
Es el modo predeterminado para las conexiones FTP, de hecho fue el primero en desarrollarse. En este modo el servidor utilizará el puerto 20 para la transferencia de datos, mientras que transmitirá los comandos utilizando el puerto 21. El cliente en cambio utilizará un puerto aleatorio P superior al 1023 para la transferencia de comandos, y un puerto P+1 para la transferencia de datos.
Lo anterior tiene un grave problema de seguridad, y es que la máquina cliente debe estar dispuesta a aceptar cualquier conexión de entrada en un puerto superior al 1024, con los problemas que ello implica si tenemos el equipo conectado a una red insegura como Internet.
Esta última conexión es iniciada por el servidor en el puerto previamente negociado, y en ocasiones es bloqueada por el firewall del cliente al ser identificada como un intento de conexión externa no autorizada. Lo normal es que los cortafuegos del cliente rechacen estas conexiones aleatorias.
El modo de FTP pasivo surge como consecuencia de los problemas de conexión del modo activo. Este modo mantiene los dos canales (control y datos) pero en este caso es el cliente el encargado de establecer las dos conexiones.
La secuencia de conexión del modo pasivo es la que sigue a continuación:
Las cuotas de disco permiten a los administradores controlar y limitar la cantidad de espacio en disco que usan los usuarios en los sistemas de archivos de servidores y estaciones de trabajo.
En el marco del alojamiento web, las cuotas de disco tienen una importancia fundamental para la administración del espacio en el servidor. El establecimiento de límites permite distribuir el espacio del disco duro entre los usuarios que comparten un sistema de hardware. Si un usuario sobrepasa el espacio que le fue asignado, se le informa de que ha infringido la cuota.
Existen dos tipos de usuarios:
FTP permite dos modos de transferencia de archivos que son relevantes dependiendo del tipo de información que deseamos transmitir.
Los ficheros de texto plano son aquellos que contienen cualquier contenido de caracteres legible, como lo es cualquier fichero de código fuente: .html
, .php
, .java
, .css
, etc.
Los archivos binarios son:
.jpg
, .bmp
, .png
).mp3
, .avi
, .wma
).flv
, .mkv
, .mov
, .mp4
).zip
, .rar
, .tar
).exe
, .doc
, .xls
, .pdf
)File Transfer Protocol Over TLS/SSL. FTPS no utiliza SSH y no es nativo de ningún sistema operativo. Es una extensión del protocolo FTP que utiliza TLS/SSL para asegurar las comunicaciones entre hosts. Esto es muy similar a cómo se usa TLS/SSL para proteger el tráfico web básico.
Aunque existen utilidades de línea de comandos para FTPS, los usuarios de Windows lo utilizan más comúnmente a través de un cliente.
SSH File Transfer Protocol es un protocolo que aprovecha la seguridad y autenticación proporcionada por SSH. Puede pensar en SFTP como simplemente FTP (Protocolo de transferencia de archivos) que usa un túnel SSH para asegurar las comunicaciones.
SFTP es una utilidad de transferencia de archivos una funcionalidad similar a FTPS. Aunque SFTP y SCP usan SSH para el transporte, ahí es donde terminan las similitudes. Con SFTP se pueden enumerar directorios, cambiar permisos y propietarios, eliminar y renombrar archivos e incluso crear enlaces simbólicos. Esto proporciona toda la funcionalidad de FTP con la seguridad de SSH.
Dado que es un subsistema de SSH, generalmente está disponible en cualquier sistema que tenga SSH.
Secure Copy Protocol es un protocolo basado en SSH. Proporciona una manera fácil, aunque limitada, de copiar archivos de forma segura de un sistema a otro. SCP se limita a transferir archivos.
No proporciona un método para eliminar, enumerar, renombrar u otras operaciones de archivos similares. Sin embargo, proporciona una utilidad fácil de usar para copiar de forma rápida y segura un archivo de un sistema a otro.
Son aplicaciones de escritorio que nos permiten conectarnos a servidores de transferencia de forma gráfica. Esto facilita mucho el trabajo ya que podemos utiliasr el ratón, navegar por un arbol de directorios, arrastrar y soltar archivos, etc. La gran mayoría permiten conectarnos utilizando diferentes protocolos: SCP, SFTP, FTPS,…
Cliente Filezilla
Algunos de los más utilizados son:
Desde linea de comandos podemos conectarnos también tanto mediante FTP como SFTP:
fer@debian:~$ ftp 192.168.1.34 fer@debian:~$ sftp usuario@192.168.1.34
Comando | Descripcion |
---|---|
open [ip] | Abre conexión |
quit/exit/bye | Termina FTP |
pwd | Indica la ruta del servidor |
!pwd | Indica la ruta del cliente |
ls/dir | Lista el contenido del directorio del servidor |
!ls/!dir | Lista el contenido del directorio del cliente |
mkdir | Crea un directorio en el servidor |
!mkdir | Crea un directorio en el cliente |
get [archivo] | Descarga el archivo al directorio del cliente |
put [archivo] | Sube el archivo al directorio de servidor |
binary | Establace modo binario de transferencia |
ascii | Establece modo ascii de transferencia |
delete [archivo] | Elimina el archivo del servidor |
Tener un Firewall suficientemente configurado es uno de los aspectos más importantes en la seguridad de un sistema. El firewall UFW (Uncomplicated Firewall) es una herramienta que tenemos disponible en las distribuciones Debian o Ubuntu. Tiene una interfaz muy simple para administrar reglas en iptables.
Para instalarlo usaremos apt:
$ apt-get install ufw
Una vez instalado podemos encontrar su fichero de configuración en /etc/default/ufw
. Las configuraciones que hagamos funcionarán tanto en ipv4 como en ipv6, asi que podemos buscar esa directiva:
IPV6=yes
UFW no se activa al instalarse. El firewall por defecto tiene las siguientes configuraciones:
$ ufw default deny incoming $ ufw default allow outgoing
Estas reglas no es necesario crearlas, ya que vienen de serie. El firewall deniega cualquier conexión entrante, y permite cualquier saliente.
Si estamos trabajando a través de SSH debemos abrir dicho puerto para no quedarnos aislados del servidor:
$ ufw allow ssh # O indicando el puerto del servicio $ ufw allow 22
Una vez hecho esto, podemos activar el firewall. También podemos desactivarlo si queremos hacer algunas configuraciones:
$ ufw enable $ ufw disable # Para restaurar el estado inicial (elimina todas las reglas y lo desactiva) $ ufw reset
Las reglas que nosotros creamos en el firewall se almacenan en los ficheros /etc/ufw/user.rules
y user6.rules
. Para mostrar las reglas que hemos creado, podemos hacerlo de diferentes formas:
# Verificar el estado
$ ufw status
$ ufw status verbose
$ ufw status numbered
Otros ejemplos:
# Permitir servicios o direcciones $ ufw allow http $ ufw allow https $ ufw allow from 203.0.113.4 # Permitir rangos de puertos $ ufw allow 6000:6007/tcp $ ufw allow 6000:6007/udp # Denegar $ ufw deny http $ ufw deny from 203.0.113.4
Si queremos eliminar alguna regla podemos hacerlo del siguiente modo:
$ ufw allow 22 $ ufw allow 443/tcp $ ufw deny 23/tcp $ ufw delete allow 22 $ ufw delete allow 443/tcp $ ufw delete deny 23/tcp
Otra forma es listar las reglas de forma numerada y eliminar la que necesite indicando su número:
$ ufw status numbered $ ufw delete [numero]
Para trabajar con el servidor FTP debemos abrir los puertos 20 y 21. Si pretendemos utilizar una conexión cifrada también debemos abrir el puerto 990. Y para permitir el modo pasivo debemos abrir un rango de puertos (atendiendo a la cantidad de usuarios que se van a conectar simultaneamente:
# Abrir puertos para FTP y TLS $ ufw allow 20,21,990/tcp # Abrir un rango de puertos para modo pasivo $ ufw allow 40001:40100/tcp
Para trabajar con el servicio FTP over SSH, o SFTP, solo necesitamos el puerto SSH (22) que ya hemos abierto previamente para conectarnos mediante terminal remoto.
VeriSecure FTP daemon es un servidor FTP con licencia GPL que se caracteriza por ser muy ligero, rápido y seguro. Es el utilizado por algunas de las principales compañias de Linux como SUSE o RedHat para sus repositorios FTP.
$ apt-get install vsftpd
Una vez instalado permitirá conectarnos sin ningún tipo de cifrado con permisos de solo lectura.
Para configurar el servidor modificaremos el fichero /etc/vsftpd.conf
. Tenemos una referencia de sus opciones en https://linux.die.net/man/5/vsftpd.conf.
Cada vez que modifiquemos opciones del servidor debemos reiniciarlo para que los cambios tomen efecto:
$ systemctl restart vsftpd
También es recomendable hacer una copia de seguridad del fichero de configuración para restaurar las modificaciones que hagamos:
$ cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
Las siguientes opciones sirven para permitir las conexiones de usuarios y activar la escritura:
# Impedir el logueo de usuarios anónimos anonymous_enable=NO # # Permitir a los usuarios del sistema loguearse local_enable=YES # # Permitir a los usuarios escribir, borrar o modificar # Esto solo se permite en los directorios en los que tenga permisos write_enable=YES # # Permisos por defecto de los ficheros subidos local_umask=022
En el fichero de configuración de vsftpd podemos limitar los puertos que pueden ser usados en el modo pasivo. Debemos tener en cuenta que si tenemos un firewall debemos tener abierto este rango de puertos.
pasv_enable=Yes #Deben coincidir con los puertos abiertos por el firewall pasv_min_port=40001 pasv_max_port=40100
Con la configuración anterior permitimos que los usuarios del sistema se puedan loguear con sus credenciales y puedan escribir en los directorios en los que tengan permisos. Pero podrán visualizar todo el sistema de archivos. A continuación se indican diferentes formas de limitar el acceso al sistema de archivos o directamente limitar el acceso al servidor.
Las siguientes opciones permiten crear un fichero con los nombres de los usuarios a los que se quiere permitir o denegar el acceso al servidor FTP:
userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO
La opción userlist_deny
modifica el comportamiento:
YES
: Se impide el acceso a los usuarios de la lista /etc/vsftpd.userlist
NO
: Se concede el acceso solo a los usuarios de la lista /etc/vsftpd.userlist
Mientras no se especifique, los usuarios acceden inicialmente a su directorio personal HOME. Podemos modificar este comportamiento mediante:
local_root="ruta_deseada"
Como puede interesarnos que cada usuario acceda a una ruta específica diferente para cada uno, podemos usar las siguiente directiva:
user_sub_token=$USER # Cada usuario accede a su propio directorio (creado previamente) local_root=/srv/ftp/$USER
vsFTPd nos permite limitar el acceso a los usuarios a un directorio concreto sin que puedan salir de él. Esto seconoce como enjaular (chroot). Los usuarios se enjaulan siempre en su directorio raíz indicado en la directiva local_root
# Descomentando la siguiene directiva activamos el enjaulamiento chroot_local_user=YES
Al intentar conectarnos al servidor FTP veremos que no se nos permite. Esto ocurre porque no se permite enjaular a un usuario en un directorio sobre el que tiene permisos de escritura.
Para solucionar esto temporalmente en un entorno de pruebas podemos añadir la opcion:
La siguiente directiva nos permite enjaular usuarios en directorios sobre los que tienen permisos de escritura, algo que se desaconseja por motivos de seguridad. En los siguientes puntos se explica cómo hacerlo de forma segura.
# Usar esta directiva solamente para pruebas (Se desaconseja) allow_writeable_chroot=YES
Como hemos dicho, la directiva anterior la usaremos para realizar pruebas, pero nunca en una configuración definitiva.Vsftpd Faq.
Para enjaular usuarios de forma segura1) en un directorio debemos tener en cuenta que no pueden tener permisos sobre el directorio en el que se enjaulan. Para ello debemos crear un directorio distinto a su directorio personal sobre el que puedan tener permiso de escritura. Podemos crear un directorio concreto para el servicio FTP:
Lo primero es volver a comentar la linea que descomentamos antes, ya que queremos enjaular de forma segura:
#allow_writeable_chroot=YES
A continuación creamos la configuración de directorios y permisos:
# Creamos el directorio de enjaulamiento $ mkdir /home/fer/ftp # Hacemos que no pertenezca a nadie $ chown nobody:nogroup /home/fer/ftp # Quitamos los permisos de escritura para todos los usuarios $ chmod a-w /home/fer/ftp # Creamos un directorio en su interior para transferir archivos $ mkdir /home/fer/ftp/archivos # Nos aseguramos que el usuario es el propietario $ chown fer:fer /home/fer/ftp/archivos
La idea es crear esa estructura de directorios para todos los usuarios que queramos que tengan acceso al servicio FTP.
Esta estructura de directorios la podemos utilizar en diferentes contextos. Para un servidor web podemos crear:
/var/www/fer/public_html
.
Ahora en el fichero de configuración indicamos el enjaulamiento:
chroot_local_user=YES # Indicamos el directorio de enjaulamiento para todos los usuarios user_sub_token=$USER local_root=/home/$USER/ftp
La variable $USER es una variable del sistema que contiene el nombre del usuario actual. De este modo cada usuario, accede a su propia ruta.
Al activar la directiva chroot_local_user
enjaularemos a todos los usuarios del sistema. Pero podemos indicar a qué usuarios queremos enjaular/liberar indicándolo sus nombres en el fichero vsftpd.chroot_list
.
# Solo se enjaulan los usuarios del fichero chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list # Solo están sin enjaular los usuarios del fichero chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
Otra forma de mantener la seguridad es crear usuarios para el servicio FTP que no tengan acceso a la linea de comandos (shell) de Linux. De este modo no podrán ejecutar comandos mediante SSH. Vamos a hacerlo con el shell nologin
.
# Comprobamos que tengamos el shell nologin en el fichero /etc/shells $ cat /etc/shells # Si no está indicado lo añadimos (puedo hacerlo con el comando o cat, o con un editor) $ cat >> /etc/shells /sbin/nologin # Modificamos el shell del usuario $ usermod -s /sbin/nologin fer
La opción user_config_dir
permite definir un directorio de configuraciones personalizadas para cada usuario. Si un fichero de ese directorio tiene el nombre de un usuario, se cargara la configuración contenida en él para ese usuario:
#Indicamos el directorio de configuraciones de usuarios user_config_dir=/etc/vsftpd
# Creamos un fichero para el usuario "usuario1" e indicamos sus opciones. Con cat o con un editor $ cat > /etc/vsftpd/usuario1 local_root=/srv/ftp/usuario1 write_enable=NO
Al usuario “usuario1” y sólo a él, se le aplican las directivas incluidas en el fichero, que sobreescribirán a la que puedan encontrarse en el fichero general, incluidas las de enjaulamiento.
La información enviada por el protocolo FTP no se encripta al ser enviada, ni siquiera las credenciales de login. Podemos encriptarla mediate SSL/TSL, y para ello comenzaremos por crear un certificado SSL mediante el servicio openSSL que ya tenemos instalado:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Donde:
Podemos ver que tanto el certificado como la clave se almacenarán en el mismo fichero: /etc/ssl/private/vsftpd.pem
Para crear el certificado se nos solicitarán unos datos, que serviran al cliente para identificar el certificado:
Generating a 2048 bit RSA private key ............................................................................+++ ...........+++ writing new private key to '/etc/ssl/private/vsftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: ES State or Province Name (full name) [Some-State]: CyL Locality Name (eg, city) []: Leon Organization Name (eg, company) [Internet Widgits Pty Ltd]: Centro Educativo Organizational Unit Name (eg, section) []: Despliegue Common Name (e.g. server FQDN or YOUR name) []: despliegueFTP Email Address []: despliegue@ftp . . .
Una vez que lo tengamos generado y conozcamos su ubicación debemos comentar las siguientes lineas del fichero de configuración e indicar los valores correctos:
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem # rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key . . . rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
TLS es más seguro que SSL, por lo que vamos a indicar en el fichero de configuración los detalles SSL añadiendo las siguientes lineas:
# SSL configuration (TLS v1.2) ssl_enable=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
Y por último, una vez que tenemos habilitado SSL, vamos a forzar su uso siempre que sea posible:
# Prevent anonymous users from using SSL allow_anon_ssl=NO # Force all non-anonymous logins to use SSL for data transfer force_local_data_ssl=YES # Force all non-anonymous logins to use SSL to send passwords force_local_logins_ssl=YES # Impedir reusar certificados por parte de los clientes require_ssl_reuse=NO # Usar certificados de al menos 128 bits ssl_ciphers=HIGH
Las cuotas nos permiten limitar el uso del disco por parte de los usuarios. Son muy útiles combinarlas con los servicios de transferencia de ficheros para evitar un uso descontrolado del espacio del sistema por parte de los usuarios.
$ apt-get install quota
Ahora debemos modificar el fichero /etc/fstab
, que contiene las informaciones que conciernen al montaje de las particiones que hay en el sistema.
Añadimos a la 4ª columna las opciones que queremos (usrquota, y/o grpquota)
Debemos añadir en la columna pass de las particiones en las que nos interese gestionar las cuotas las opciones usrquota
y/o grpquota
en caso de que queramos gestionar la cuotas de usuarios y grupos respectivamente en las particiones indicadas. Separamos las opciones mediante comas ,
.
En el ejemplo lo vamos a usar en el directorio personal de los usuarios /home
y en el directorio de datos del servidor web /var
. Si tan solo tenemos una particion para todo el sistema /
lo añadiremos ahí.
Una vez modificado el fichero, aplicamos los cambios volviendo a montar las particiones modificadas:
$ mount -o remount /home /var #Comprobamos los puntos de montaje con mount $ mount
mount
: muestra los puntos de montaje que soportan cuotas y qué tipo de cuotas
Ahora, debemos crear los ficheros que almacenarán las cuotas del directorio /home
. Haremos el resto del proceso solo para este directorio. El comando quotacheck
verifica los sistemas de archivos que soporten cuotas. Este comando crea, verifica o repara el control de cuotas en los sistemas que lo soporten.
# Crear el fichero de cuotas para el directorio /home $ quotacheck -ugmv /home
Es conveniente ejecutar quotacheck periódicamente para que verifique inconsistencias y se corrijan a tiempo. Las opciones posibles son:
La opcion a
solo es necesaria si tengo cuotas en más de un punto de montaje. En este caso solo tenemos /home
.
El resultado es similar al siguiente:
Una vez realizado esto, veré que tengo los ficheros referentes a las cuotas que tenga configuradas (usuario y/o grupo) en el directorio que he habilitado para cuotas. Los ficheros son: aquota.user y aquota.group.
Para arrancar el servicio:
# Arrancar el servicio $ quotaon -ugv /home # Parar el servicio $ quotaoff -ugv /home
Una vez que hemos arrancado el servicio ya no hará falta volverlo a hacer. Ahora podemos establecer cuotas para los diferentes usuarios:
# Establecer una cuota para el usuario fer $ setquota -u fer 10240 20480 100 200 /home # Establecer una cuota de forma interactiva $ edquota -u fer # Comprobar cuotas de un usuario tamaño en (MB, GB, etc) $ quota -u -s fer # Comprobar todas las cuotas de usuarios en todas las particiones $ repquota -a -s # Modificar tiempo de gracia en segundos $ setquota -t 86400 86400 /home # Modificar el tiempo de gracia global $ edquota -t # Modificar el tiempo de gracia global de un usuario $ edquota -T -u fer
Al establecer cuotas se definen valor a los siguientes parámetros:
En cuanto al tiempo de gracia, si no se indica nada se ofrecen 7 días desde que se supera el soft limit.
El servicio SSH FTP está habilitado en el momento en que tengamos un servidor SSH. Podemos utilizarlo desde un cliente gráfico o desde linea de comandos con los comandos que usamos para el protocolo FTP. Para utilizar este servicio desde un cliente debo indicar que la conexión la realizo al puerto SSH: puerto 22
.
Debemos entender que el servicio SFTP se basa en SSH, y es completamente independiente del servicio FTP: no es necesario tener un servidor FTP para usar SFTP.
Aun así, vamos a comentar algúnas opciones que pueden resultar interesantes. El fichero de configuración lo podemos encontrar en /etc/ssh/sshd_config
. Siempre es recomendable hacer una copia del fichero de configuración, para poder restaurarla en caso de error.
Si en algún momento no soy capaz de realizar una configuración, puedo desinstalar el servidor ssh:
$ apt-get purge openssh-server
Para modificar las configuraciones de los usuarios debemos editar su fichero de configuración /etc/ssh/sshd_config
.
Esta configuración impide el acceso por SSH, por lo que tampoco podremos usar el servicio SSH FTP. Podemos denegar a usuarios concretos, o a todo un grupo:
# Denegar a usuarios concretos DenyUsers nombre-usuario # Denegar a un grupo DenyGroups nombre-grupo
También puedo indicar a quién concedo el acceso
# Permitir a usuarios concretos AllowUsers nombre-usuario # Permitir a usuarios concretos AllowGroups nombre-grupo
Si queremos que el usuario “user1” solo pueda usar el servicio SFTP, y no se le permita conectarse mediante SSH:
Match User user1 ForceCommand internal-sftp PasswordAuthentication yes
Del mismo modo que hemos hecho con el servicio FTP, puede ser interesante limitar el acceso al sistema a ciertos usuarios. Para ello podemos crear ciertos usarios que solo puedan utilizar este servicio con unas limitaciones. Para enjaular usuarios, SSH requiere que el directorio de enjaulamiento cumpla unas condiciones:
Para ello podemos crear un directorio para enjaular a todos los usuarios o un directorio diferente para cada usuario.
A continuación crearemos la estructura de directorios necesaria para enjaular a los usuarios user1 y user2:
$ mkdir -p /home/sftp/jaula_user1 /home/sftp/jaula_user2 $ chown root:root /home/sftp/jaula_user1 $ chown root:root /home/sftp/jaula_user2 $ chmod 755 /home/sftp/jaula_user1 $ chmod 755 /home/sftp/jaula_user2
Lo que acabo de hacer es:
sftp
en /home
, para contener las jaular de los dos usuarios. El propietario debe ser root./home/sftp
: jaula_user1
y jaula_user2
. Estos directorios también deben pertenecer a root.Ahora ambos directorios de enjaulamiento (jaula_user1, jaula_user2) pertenecen a root y nadie más tiene permisos de escritura. Vamos a crear un directorio para que ambos usuarios puedan transferir ficheros.
$ mkdir /home/sftp/jaula_user1/ficheros /home/sftp/jaula_user2/ficheros $ chown user1:user1 /home/sftp/jaula_user1/ficheros $ chown user2:user2 /home/sftp/jaula_user2/ficheros
Lo que acabamos de hacer es:
Recordemos: Para que SSH nos permita enjaular a un usuario, no puede tener permisos sobre el directorio jaula (jaula_userX
), pero si quiero que pueda subir ficheros, debe tener permisos en algún directorio dentro de la jaula.
Y ahora procedemos a editar el fichero de configuración. Debemos añadir las siguientes directivas por cada usuario que desee enjaular:
Match User user1 ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /home/sftp/jaula_user1 PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
ForceCommand internal-sftp
: Fuerza al servidor SSH a usar SFTP para este usuario, impidiendo el acceso al terminal de comandos.AllowAgentForwarding no
, AllowTcpForwarding no
, X11Forwarding no
. Desactiva la redirección de puertos, el tunneling, y la redirección X11. La finalidad es limitar el acceso al servidor.En caso de que tengamos más usuarios, repetiremos ese código para cada usuario dentro del fichero de configuración.
Una vez realizados los cambios, reiniciamos el servicio:
$ systemctl restart sshd
Si preveemos que vamos a tener muchos usuarios para acceder a este servicio podemos crear un grupo de usuarios:
$ addgroup sftpusers $ adduser user1 sftpusers $ adduser user2 sftpusers
Ahora editamos el fichero de configuración pero añadiendo solo una sección para el grupo:
Match Group sftpusers ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /home/sftp PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
© 2024 Fernando Valdeón