#4sysadmins

Inicio » GNU/Linux » Como compartir archivos en Linux mediante FTP

Como compartir archivos en Linux mediante FTP

Últimas Entradas

Follow #4sysadmins on WordPress.com

En esta entrada vamos a aprender a instalar, configurar y compartir una carpeta bajo el protocolo FTP. Para ello vamos a utilizar el servidor vsftpd (Very Secure FTP daemon), servidor FTP para muchas de las distribuciones GNU/Linux mas famosas.

Instalación

La instalación de vsftpd se hace mediante repositorios, por lo que será tan simple como:

$ sudo apt-get install vsftpd    ## Debian
$ sudo yum install vsftpd    ## RPM

Configuración

El archivo de configuración para vsftpd es /etc/vsftpd.conf, por lo que con nuestro editor de texto preferido pasaremos a abrir el archivo y editarlo:

Nota: De momento dejaremos todo el contenido tal cual, menos las directivas que anotemos aquí, que deberemos de añadirlas si no existen, descomentarlas si están comentadas o modificarlas si hiciera falta.

$ sudo vi /etc/vsftpd.conf
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd/empty

Una vez modificado el archivo de configuración, reiniciaremos el servicio:

$ sudo service vsftpd restart

Aclaraciones sobre estos parámetros de configuración:

Si queremos permitir la escritura en los directorios deberemos de habilitar a YES la opción “write_enable“. Por otra parte estamos haciendo que todos los usuarios que no se encuentren en la lista “/etc/vsftpd.chroot_list” estarán encerrado en su directorio de inicio asegurándonos así de que no lean o accedan a contenido no personal. Lo normal es que el usuario administrador del servidor FTP si se encuentre en la lista de chroot. Para terminar la opción “secure_chroot_dir” nos permite encerrar en un directorio vacío (este no puede tener permisos de escritura) a todos los usuarios anónimos.

AVISO: El archivo /etc/vsftpd.chroot_list no existe por lo que al iniciar la conexión desde el cliente quizás obtengamos un error tipo:

“Respuesta: 500 OOPS: could not read chroot() list file:/etc/vsftpd.chroot_list”

Podemos crearlo aunque no añadamos ningún usuario:

$ sudo touch /etc/vsftpd.chroot_list

Si volvemos a reiniciar el servicio e intentamos acceder desde el cliente, quizás nos encontremos ante otro error tipo:

“Respuesta: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()”

Este error ya no es tan trivial… y la raíz del problema es los permisos de escritura en el directorio home del usuario. vsftpd no permite que el usuario o mas bien su carpeta raíz (/home/<usuario>) tenga permisos de escritura por lo que un workaround para este problema podría ser eliminar los permisos de escritura en esa carpeta y crear otra dentro con permisos de rw y trabajar sobre ella.

No obstante otras soluciones pueden ser crear una carpeta que nos haga de raíz y sobre esa crear las carpetas compartidas, por ejemplo:

$ sudo mkdir -p /home/compartido/nebul4ck

Y ahora añadimos al archivo de configuración la siguiente opción:

local_root=/home/compartido

Ahora ya cada vez que inicie un usuario mediante el cliente FTP accederá a esta carpeta.

AVISO: La carpeta anterior deberá de o NO tener permisos de escritura o que su propietario sea root.

IMPORTANTE: Al final de la entrada realizaremos una configuración estándar simulando un servidor FTP en el que se conectan varios usuarios y solo tendrán acceso a su directorio personal tanto para leer como para escribir, aportando con ello otra solución al error “Respuesta: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

Opciones adicionales:

Otras opciones que nos puedan resultar interesante dentro del archivo de configuración son:

local_root=/ruta/raíz : Ya la hemos visto antes, sirve para modificar la ruta por defecto /home/<usuario> a otra personalizada.

anonymous_enable=YES : Si queremos permitir la entrada al servidor a usuarios anónimos. Recordar que los usuarios anónimos accederán directamente a la carpeta especificada en la opción “secure_chroot_dir

anon_upload_enable=YES : Si hemos habilitado la entrada a usuarios anónimos quizás nos interese que estos puedan crear carpetas y subir contenido en algún directorio dentro del directorio especificado en “secure_chroot_dir” (recordar que este no tiene permisos de escritura, por lo que habría que crear otro dentro para que usuarios anónimos puedan crear contenido)

anon_mkdir_write_enable=YES : Permitir crear nuevos directorios a usuarios anónimos

local_umask=022 : Esta opción hará que cada vez que un usuario suba archivos o carpetas sus permisos sean 755.

ftpd_banner=Welcome! : Por si queremos poner un mensaje de bienvenida.

ls_recurse_enable=YES : Habilitar la navegación recursiva de directorios

passwd_chroot_enable = YES : Con esto y además una modificación en el archivo /etc/passwd, en concreto en el home del usuario, podremos escribir en el directorio raíz del usuario – VER SOLUCIÓN ABAJO

 

Creando una configuración personalizada

Ahora voy a exponer una configuración básica para un servidor FTP donde se conectan diferentes usuarios para subir archivos a sus directorios compartidos.

Lo primer va a ser definir un directorio raíz donde cada usuario tendrá su home:

$ sudo mkdir /home/ftp
$ ls -l /home
drwxr-xr-x    2    root root    6    ago 25 20:35    ftp

Vamos a crear un grupo para los usuarios FTP:

$ sudo groupadd ftpusers

Ahora vamos a crear los usuarios pero con ciertas particularidades, por ejemplo:

  • El usuario no podrá acceder mediante SSH. Para ello deberemos de crear una “consola ficticia” y asignársela como shell predeterminada a los usuarios ftp.
  • Crearemos un directorio esqueleto (opcional) para que cada usuario tenga una estructura de directorios bajo su directorio raíz.
  • Habilitaremos la escritura en el directorio raíz del usuario
  • Existirá un usuario que será administrador, por lo que tendrá acceso a todos los directorios

Crear una jerarquía de directorios esqueletos para los futuros usuarios:

$ sudo mkdir -p /home/skel/Imágenes
$ sudo mkdir /home/skel/Cine
$ sudo mkdir /home/skel/Música
$ sudo mkdir /home/skel/Descargas
$ sudo mkdir /home/skel/Documentos
$ sudo mkdir /home/skel/Escritorio

Crear shell ficticia para prohibir el acceso SSH a los usuarios FTP:

$ sudo mkdir /bin/ftp
$ sudo vi /etc/shells    # Añadimos al final del archivo la línea /bin/ftp

Creamos los usuarios

$ sudo useradd -d /home/ftp/paula -m -g ftpusers -s /bin/ftp -c "Paula Cabello" -k /home/skel/ paula
$ sudo useradd -d /home/ftp/alberto -m -g ftpusers -s /bin/ftp -c "Alberto González" -k /home/skel/ alberto

Les asignamos una contraseña:

$ sudo passwd alberto
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
$ sudo passwd paula
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

Modificamos el archivo /etc/passwd para que puedan escribir en su directorio raíz:

Antes:

paula:x:5101:5101:Paula Cabello:/home/ftp/paula:/bin/ftp
alberto:x:5103:5101:Alberto González:/home/ftp/alberto:/bin/ftp

Después:

paula:x:5101:5101:Paula Cabello:/home/ftp/./paula:/bin/ftp
alberto:x:5103:5101:Alberto González:/home/ftp/./alberto:/bin/ftp

AVISO: Prestar especial atención al cambio, el punto delante del nombre de usuario

Creamos la lista de usuarios que tendrán privilegios para recorrer todos los directorios del sistema:

$ sudo vi /etc/vsftpd.chroot_list
nebul4ck

Nota: En nuestro caso el usuario nebul4ck es el administrador por lo que tendrá privilegios para ver todos los directorios.

Editando el archivo de configuración:

Como siempre una buena práctica es crear una copia del archivo de configuración a modificar, luego eliminaremos el original, crearemos uno nuevo y añadiremos el siguiente contenido:

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
$ sudo rm  /etc/vsftpd.conf
$ sudo vi /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
ftpd_banner=Welcome!
chroot_local_user=YES
passwd_chroot_enable=yes
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd

Ahora para terminar reiniciamos el servicio:

$ sudo service vsftpd restart

Listo!

 


Deja un comentario, Gracias!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: