Introducción
SFTP (Secure File Transfer Protocol) es una solución potente y segura para la transferencia de archivos a través de una red. Este tutorial le guiará a través de la comprensión de SFTP, la solución de problemas de errores de 'Permission Denied' (Permiso Denegado) y la resolución de problemas de permisos de SFTP en su sistema Linux. Aprenderá a configurar un servidor SFTP, crear usuarios con los permisos apropiados y diagnosticar problemas de permisos comunes que ocurren durante las transferencias de archivos.
Configuración del Servidor SFTP en Ubuntu
SFTP (Secure File Transfer Protocol) proporciona un método seguro para transferir archivos entre sistemas. A diferencia del FTP normal, SFTP encripta tanto los comandos como los datos durante la transmisión, protegiendo su información del acceso no autorizado.
En este paso, configuraremos un servidor SFTP básico en nuestro sistema Ubuntu.
Instalación del Servidor OpenSSH
Primero, asegurémonos de que nuestro sistema esté actualizado e instalemos el servidor OpenSSH, que incluye las capacidades de SFTP:
sudo apt update
sudo apt install -y openssh-server
Después de ejecutar estos comandos, debería ver una salida similar a:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
openssh-server is already the newest version (1:8.9p1-3ubuntu0.1).
Verificación del Estado del Servicio SSH
Dado que estamos en un contenedor Docker, el comando systemctl estándar no funcionará. Verifiquemos si el servicio SSH se está ejecutando usando el comando de estado del proceso:
ps aux | grep sshd
Debería ver una salida que indique que sshd se está ejecutando:
root 1234 0.0 0.1 12016 5604 ? Ss 10:20 0:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Creación de un Usuario de Prueba para SFTP
Creemos un usuario dedicado para probar la funcionalidad SFTP:
sudo adduser sftpuser
Cuando se le solicite, ingrese una contraseña simple como password123 y puede presionar Enter para omitir los campos de información de usuario adicionales. Debería ver una salida similar a:
Adding user `sftpuser' ...
Adding new group `sftpuser' (1001) ...
Adding new user `sftpuser' (1001) with group `sftpuser' ...
Creating home directory `/home/sftpuser' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Creación de Archivos de Prueba para la Transferencia SFTP
Ahora, creemos algunos archivos de prueba en nuestro directorio de inicio que usaremos para las transferencias SFTP:
cd ~/project
echo "This is a test file for SFTP transfers" > testfile.txt
echo "This file has different permissions" > restrictedfile.txt
Verifiquemos que los archivos se crearon correctamente:
ls -l testfile.txt restrictedfile.txt
Debería ver una salida similar a:
-rw-rw-r-- 1 labex labex 37 Sep 28 10:30 restrictedfile.txt
-rw-rw-r-- 1 labex labex 38 Sep 28 10:30 testfile.txt
De forma predeterminada, ambos archivos tienen permisos de lectura y escritura para el propietario y el grupo, y permisos de solo lectura para otros. Experimentaremos con el cambio de estos permisos en los siguientes pasos.
Comprensión de los Permisos de Archivo y su Impacto en SFTP
Antes de explorar los problemas de permisos de SFTP, comprendamos el sistema de permisos de archivos de Linux y cómo afecta a las operaciones de SFTP.
Conceptos Básicos de los Permisos de Archivo en Linux
En Linux, cada archivo y directorio tiene tres tipos de permisos:
- Lectura (r): Permite ver el contenido del archivo o listar el contenido del directorio
- Escritura (w): Permite modificar archivos o crear/eliminar archivos en un directorio
- Ejecución (x): Permite ejecutar archivos o acceder a un directorio
Estos permisos se asignan a tres categorías de usuarios:
- Propietario (Owner): El usuario que creó el archivo
- Grupo (Group): El grupo asignado al archivo
- Otros (Others): Todos los demás
Visualización de los Permisos Actuales
Verifiquemos los permisos actuales de nuestros archivos de prueba:
ls -l ~/project/testfile.txt ~/project/restrictedfile.txt
Verá una salida similar a:
-rw-rw-r-- 1 labex labex 38 Sep 28 10:30 /home/labex/project/testfile.txt
-rw-rw-r-- 1 labex labex 37 Sep 28 10:30 /home/labex/project/restrictedfile.txt
La cadena de permisos -rw-rw-r-- se puede desglosar de la siguiente manera:
- El primer carácter
-indica un archivo regular (seríadpara un directorio) - Los siguientes tres caracteres
rw-muestran los permisos del propietario (lectura, escritura, sin ejecución) - Los siguientes tres caracteres
rw-muestran los permisos del grupo (lectura, escritura, sin ejecución) - Los últimos tres caracteres
r--muestran los permisos de otros (solo lectura)
Modificación de los Permisos de Archivo
Modifiquemos los permisos de nuestros archivos para crear escenarios que podrían conducir a errores de permiso denegado en SFTP:
## Make testfile.txt readable by everyone but writable only by owner
chmod 644 ~/project/testfile.txt
## Make restrictedfile.txt accessible only to the owner
chmod 600 ~/project/restrictedfile.txt
Ahora, verifiquemos los cambios:
ls -l ~/project/testfile.txt ~/project/restrictedfile.txt
Debería ver los permisos actualizados:
-rw-r--r-- 1 labex labex 38 Sep 28 10:30 /home/labex/project/testfile.txt
-rw------- 1 labex labex 37 Sep 28 10:30 /home/labex/project/restrictedfile.txt
Configuración de un Directorio para Pruebas SFTP
Creemos un directorio dedicado para las pruebas de SFTP:
mkdir -p ~/project/sftp_test
echo "This file is in the SFTP test directory" > ~/project/sftp_test/test_file.txt
chmod 755 ~/project/sftp_test
Ahora, creemos un directorio con permisos restringidos:
mkdir -p ~/project/restricted_sftp
echo "This file is in the restricted directory" > ~/project/restricted_sftp/restricted_file.txt
chmod 700 ~/project/restricted_sftp
Verifiquemos los permisos del directorio:
ls -ld ~/project/sftp_test ~/project/restricted_sftp
Debería ver:
drwxr-xr-x 2 labex labex 4096 Sep 28 10:35 /home/labex/project/sftp_test
drwx------ 2 labex labex 4096 Sep 28 10:35 /home/labex/project/restricted_sftp
Se puede acceder al directorio sftp_test por cualquier persona, mientras que solo el propietario (usuario labex) puede acceder al directorio restricted_sftp.
Experimentando y Diagnosticando Errores de Permiso Denegado en SFTP
En este paso, nos conectaremos a nuestro servidor SFTP y experimentaremos de primera mano los errores de permiso denegado. Esto nos ayudará a comprender cómo la configuración de permisos afecta a las operaciones de SFTP.
Conexión al Servidor SFTP Localmente
Dado que estamos trabajando en un entorno local, podemos conectarnos a nuestro servidor SFTP utilizando la dirección localhost. Conectémonos usando el usuario sftpuser que creamos anteriormente:
sftp sftpuser@localhost
Cuando se le solicite la contraseña, ingrese la contraseña que configuró para la cuenta sftpuser (por ejemplo, password123). Si la conexión es exitosa, verá un mensaje como:
Connected to localhost.
sftp>
Si encuentra problemas de conexión, podría deberse a que el servicio SSH no se está ejecutando correctamente en el contenedor. Puede intentar salir con exit y continuar con los siguientes pasos utilizando ejemplos teóricos.
Comandos Básicos de SFTP
Exploremos algunos comandos básicos de SFTP:
- Ver el directorio actual en el servidor remoto:
sftp> pwd
Remote working directory: /home/sftpuser
- Listar archivos en el directorio actual:
sftp> ls
- Navegar a un directorio diferente:
sftp> cd /tmp
sftp> pwd
Remote working directory: /tmp
- Regresar a su directorio de inicio:
sftp> cd
sftp> pwd
Remote working directory: /home/sftpuser
Intentando Acceder a Archivos con Diferentes Permisos
Ahora, intentemos acceder a nuestros archivos de prueba desde la sesión SFTP:
- Intente obtener un archivo de nuestro directorio del proyecto:
sftp> get /home/labex/project/testfile.txt
Fetching /home/labex/project/testfile.txt to testfile.txt
Permission denied
Notará un error de "Permission denied" (Permiso denegado). Esto se debe a que el usuario sftpuser no tiene permiso para acceder a los archivos en el directorio de inicio del usuario labex.
Salir de la Sesión SFTP
Salgamos de la sesión SFTP para continuar:
sftp> exit
Comprensión de los Errores de Permiso Denegado
Hay varias razones comunes para los errores de "Permission denied" (Permiso denegado) en SFTP:
- Permisos de Archivo: El usuario no tiene acceso de lectura/escritura al archivo
- Permisos de Directorio: El usuario no puede acceder al directorio que contiene el archivo
- Problemas de Propiedad: El archivo/directorio pertenece a un usuario o grupo diferente
- Restricciones de Travesía de Ruta: La configuración de SFTP podría restringir a los usuarios a ciertos directorios
Hagamos que uno de nuestros archivos de prueba sea accesible para nuestro usuario SFTP:
## Create a directory that can be accessed by others
mkdir -p /tmp/shared
echo "This is a shared file for SFTP testing" > /tmp/shared/shared_file.txt
chmod 777 /tmp/shared
chmod 666 /tmp/shared/shared_file.txt
Ahora, vuelva a conectarse a SFTP e intente acceder a este archivo:
sftp sftpuser@localhost
Después de conectarse, intente:
sftp> get /tmp/shared/shared_file.txt
Fetching /tmp/shared/shared_file.txt to shared_file.txt
/tmp/shared/shared_file.txt 100% 36 1.0KB/s 00:00
Esto debería funcionar porque hemos dado a todos los permisos de lectura/escritura tanto al directorio como al archivo.
Salga de la sesión SFTP nuevamente:
sftp> exit
Uso de SFTP con Modo de Depuración
Para obtener más información sobre los errores de permiso, puede usar SFTP en modo de depuración:
sftp -v sftpuser@localhost
La salida detallada le mostrará información detallada sobre la conexión y cualquier error que ocurra:
debug1: Sending subsystem: sftp
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
Transferred: sent 2412, received 2876 bytes, in 0.1 seconds
Bytes per second: sent 30074.7, received 35857.2
debug1: Exit status 0
Resolución de Errores de Permiso Denegado en SFTP
Ahora que entendemos cómo los permisos afectan el acceso SFTP, aprendamos cómo resolver los errores comunes de permiso denegado.
Solución 1: Ajuste de los Permisos de Archivos y Directorios
La solución más directa a los problemas de permisos es ajustar los permisos de archivos y directorios. Creemos un nuevo caso de prueba:
## Create a new test file with restrictive permissions
echo "This file has restricted permissions" > ~/project/restricted_access.txt
chmod 600 ~/project/restricted_access.txt
Verifique los permisos actuales:
ls -l ~/project/restricted_access.txt
Salida:
-rw------- 1 labex labex 35 Sep 28 11:05 /home/labex/project/restricted_access.txt
Ahora, hagamos que este archivo sea accesible para otros cambiando sus permisos:
chmod 644 ~/project/restricted_access.txt
ls -l ~/project/restricted_access.txt
Salida:
-rw-r--r-- 1 labex labex 35 Sep 28 11:05 /home/labex/project/restricted_access.txt
Con estos permisos (644), el propietario del archivo (labex) puede leer y escribir en el archivo, mientras que los miembros del grupo y otros solo pueden leerlo.
Solución 2: Cambio de la Propiedad del Archivo
Otra solución es cambiar la propiedad de los archivos para que coincida con el usuario SFTP. Creemos otro archivo de prueba:
echo "This file will be owned by sftpuser" > ~/project/ownership_test.txt
Ahora, cambiemos la propiedad a nuestro usuario SFTP:
sudo chown sftpuser:sftpuser ~/project/ownership_test.txt
ls -l ~/project/ownership_test.txt
Salida:
-rw-rw-r-- 1 sftpuser sftpuser 36 Sep 28 11:10 /home/labex/project/ownership_test.txt
Ahora el archivo es propiedad de sftpuser, quien puede leer y escribir en él.
Solución 3: Creación de un Directorio Compartido
Una solución común para compartir archivos SFTP es crear un directorio con los permisos apropiados a los que puedan acceder varios usuarios:
## Create a new shared directory with appropriate permissions
mkdir -p /tmp/sftp_shared
sudo chown labex:labex /tmp/sftp_shared
chmod 755 /tmp/sftp_shared
## Create a subdirectory for uploads that's writable by everyone
mkdir -p /tmp/sftp_shared/uploads
chmod 777 /tmp/sftp_shared/uploads
## Create a sample file in the shared directory
echo "This file is in the shared SFTP directory" > /tmp/sftp_shared/sample.txt
chmod 644 /tmp/sftp_shared/sample.txt
Verifiquemos nuestra configuración:
ls -la /tmp/sftp_shared/
Salida:
total 12
drwxr-xr-x 3 labex labex 4096 Sep 28 11:15 .
drwxrwxrwt 4 root root 4096 Sep 28 11:15 ..
-rw-r--r-- 1 labex labex 39 Sep 28 11:15 sample.txt
drwxrwxrwx 2 labex labex 4096 Sep 28 11:15 uploads
Con esta configuración:
- El directorio principal es legible y ejecutable por todos, pero solo escribible por el propietario
- El subdirectorio de cargas es escribible por todos (adecuado para cargas SFTP)
- El archivo sample.txt es legible por todos, pero solo escribible por el propietario
Esta configuración permite al usuario SFTP:
- Navegar al directorio compartido
- Leer el archivo de muestra
- Cargar archivos en el directorio de cargas
Solución 4: Uso de ACLs para un Control más Detallado
Las Listas de Control de Acceso (ACLs) proporcionan una gestión de permisos más detallada. Instalemos el paquete necesario y usemos ACLs:
sudo apt install -y acl
Ahora, creemos un archivo y establezcamos permisos específicos usando ACLs:
echo "This file uses ACLs for permissions" > ~/project/acl_test.txt
## Set basic permissions
chmod 640 ~/project/acl_test.txt
## Add ACL permission for sftpuser
sudo setfacl -m u:sftpuser:r ~/project/acl_test.txt
## View the ACL settings
getfacl ~/project/acl_test.txt
Salida:
## file: /home/labex/project/acl_test.txt
## owner: labex
## group: labex
user::rw-
user:sftpuser:r--
group::r--
mask::r--
other::---
Esta configuración de ACL permite:
- Al propietario del archivo (labex) leer y escribir
- Al sftpuser leer el archivo
- Al grupo leer el archivo
- Otros no tienen acceso
Mejores Prácticas para la Gestión de Permisos SFTP
En este paso final, cubriremos algunas de las mejores prácticas para gestionar los permisos SFTP y solucionar los problemas de permisos de manera efectiva.
Creación de un Grupo de Usuarios SFTP Dedicado
Es una buena práctica crear un grupo dedicado para los usuarios SFTP:
sudo groupadd sftp_users
sudo usermod -a -G sftp_users sftpuser
Verifique que el usuario se haya agregado al grupo:
groups sftpuser
Salida:
sftpuser : sftpuser sftp_users
Configuración de un Directorio Gestionado por el Grupo
Ahora, creemos un directorio que sea gestionado por el grupo sftp_users:
## Create a new directory for the SFTP group
sudo mkdir -p /tmp/sftp_group_shared
sudo chown labex:sftp_users /tmp/sftp_group_shared
sudo chmod 770 /tmp/sftp_group_shared
## Set the SGID bit to ensure new files inherit the group
sudo chmod g+s /tmp/sftp_group_shared
## Create a test file in this directory
echo "This file is in the SFTP group directory" > /tmp/sftp_group_shared/group_file.txt
Verifiquemos los permisos:
ls -la /tmp/sftp_group_shared/
Salida:
total 12
drwxrws--- 2 labex sftp_users 4096 Sep 28 11:25 .
drwxrwxrwt 5 root root 4096 Sep 28 11:25 ..
-rw-rw-r-- 1 labex sftp_users 42 Sep 28 11:25 group_file.txt
La s en los permisos del grupo indica que el bit SGID está configurado, lo que significa que los nuevos archivos creados en este directorio heredarán el grupo sftp_users.
Comandos Comunes de Solución de Problemas para Permisos SFTP
Al solucionar problemas de permisos SFTP, estos comandos son particularmente útiles:
- Verifique los permisos de los archivos:
ls -la /path/to/file
- Verifique los grupos de usuarios:
groups username
- Verifique los ID de usuario y grupo actuales:
id
- Vea los registros del servidor SFTP:
## In a production system, you would check system logs
## For our lab environment, we can simulate viewing logs
grep "sshd" /var/log/auth.log | tail
- Pruebe el acceso a archivos desde la línea de comandos:
sudo -u sftpuser cat /path/to/file
Árbol de Decisiones de Errores de Permiso Denegado
Cuando encuentre un error de permiso denegado en SFTP, siga este árbol de decisiones:
¿Puede el usuario SFTP acceder al directorio principal?
- Verifique con:
sudo -u sftpuser ls -la /path/to/directory/ - Solucione con:
chmod o+x /path/to/directory/
- Verifique con:
¿Puede el usuario SFTP leer el archivo?
- Verifique con:
sudo -u sftpuser cat /path/to/file - Solucione con:
chmod o+r /path/to/fileosetfacl -m u:sftpuser:r /path/to/file
- Verifique con:
¿Puede el usuario SFTP escribir en el archivo o directorio?
- Verifique con:
sudo -u sftpuser touch /path/to/directory/test_file - Solucione con:
chmod o+w /path/to/directory/osetfacl -m u:sftpuser:w /path/to/directory/
- Verifique con:
Creación de un Script de Prueba para Permisos SFTP
Creemos un script de prueba simple que verifique si el usuario SFTP puede acceder a archivos y directorios específicos:
cat > ~/project/check_sftp_permissions.sh << 'EOF'
#!/bin/bash
USER="sftpuser"
echo "Testing SFTP permissions for user: $USER"
echo "-------------------------------------------"
## Test directories
for DIR in /tmp/shared /tmp/sftp_shared /tmp/sftp_group_shared /home/labex/project; do
echo -n "Can $USER access $DIR? "
if sudo -u $USER ls -la $DIR &>/dev/null; then
echo "YES"
else
echo "NO"
fi
done
## Test files
for FILE in /tmp/shared/shared_file.txt /tmp/sftp_shared/sample.txt /home/labex/project/testfile.txt; do
echo -n "Can $USER read $FILE? "
if sudo -u $USER cat $FILE &>/dev/null; then
echo "YES"
else
echo "NO"
fi
done
echo "-------------------------------------------"
echo "Testing complete!"
EOF
chmod +x ~/project/check_sftp_permissions.sh
Ahora ejecute el script de prueba:
sudo ~/project/check_sftp_permissions.sh
Debería ver una salida que indica a qué directorios y archivos puede acceder el usuario SFTP. Esto le ayuda a identificar los problemas de permisos rápidamente.
Consejos Finales para la Gestión de Permisos SFTP
- Utilice el principio del mínimo privilegio: Solo otorgue los permisos mínimos necesarios
- Audite los permisos regularmente: Use herramientas como
findpara identificar archivos con permisos inapropiados - Documente su estructura de permisos: Realice un seguimiento de qué usuarios y grupos tienen acceso a qué directorios
- Considere el uso de jaulas chroot SFTP: Para entornos de producción, restrinja a los usuarios a directorios específicos
- Pruebe desde la perspectiva del usuario: Siempre verifique los permisos probando como el usuario SFTP real
Resumen
En este tutorial, ha aprendido a configurar un servidor SFTP, crear usuarios con los permisos apropiados y solucionar los errores comunes de permiso denegado. Ha adquirido experiencia práctica con:
- La instalación y configuración de un servidor SFTP en Ubuntu
- La comprensión de los permisos de archivos de Linux y su impacto en el acceso SFTP
- La experiencia y el diagnóstico de errores de permiso denegado
- La implementación de varias soluciones para resolver problemas de permisos
- La aplicación de las mejores prácticas para la gestión de permisos SFTP
Estas habilidades le ayudarán a gestionar eficazmente las transferencias de archivos en un entorno seguro, minimizando los problemas relacionados con los permisos. Recuerde que la gestión adecuada de los permisos es esencial para mantener un servidor SFTP seguro y funcional, equilibrando los requisitos de seguridad con las necesidades de acceso de los usuarios.



