sábado, 29 de septiembre de 2018

Administración de un servidor VSFTPD en Ubuntu

Arranques y paradas del servidor VSFTPD

Xinetd (eXtended InterNET daemon) es un servicio o demonio presente en la mayoría de los sistemas Linux. Este demonio controla varios subservicios de red como puede ser el control de accesos, o la gestión de recursos o protocolos FTP  o TELNET.
Los servicios se arrancarán o detendrán desde la interfaz de comandos. Los scripts  o lanzadores del servicio FTP se encuentran en el el directorio /etc/init.d
Iniciar un servicio VSFTPD.
Para iniciar un servicio VSFTPD ejecutaremos los siguientes comandos:

sudo /etc/init.d/vsftpd start


Arranques y paradas del servidor VSFTPD


Como se trata de un servicio, también puede realizarse con el comando service del siguiente modo:

sudo service vsftp start

Para detenerlo hacemos

sudo service vsftp stop

Y si deseamos detenerlo y levantarlo de nuevo (reiniciarlo) hacemos:

sudo service vsftpd restart

Registros del sistema

El servidor vsftpd tiene muchas opciones para registrar las tareas que se están ejecutando mientras está el servicio activo. Estas opciones se pueden consultar en el archivo de configuración de vsftpd   /etc/vsftpd.conf

dual_log_enable permite generar en paralelo dos ficheros de log, uno con formato vsftpd y otro con el formato wu-ftpd.

vsftpd_log_file     Muestra la ubicación y el nombre de los ficheros de log.

xferlog_file     Muestra la ubicación y el nombre del fichero de log compatible con wu-ftpd.

log_ftp_protocol   Registra las peticiones y respuestas. Permite hacer un análisis exhaustivo del servicio. 

xferlog_enable    Escribirá en el log los detalles de los contenidos subidos y descargados del servicio.

xferlog_std_format  El archivo de registro de transferencia se escribirá en el formato estándar xferlog, utilizado por wu-ftpd.

syslog_enable   Todos los datos que vayan al fichero vsftpd.log se redirigirán al registro del sistema.

El archivo log suele encontrarse en /var/log/vsftpd.log

Con este comando podemos ver sus últimas 20 líneas.
sudo tail -20f /var/log/vsftpd.log

Registros del sistema

 Cuentas de usuario

VSFTPD permite encapsular a los usuarios con la herramienta chroot, con lo que estos usuarios tendrán acceso únicamente a una carpeta del servidor y no a la estructura completa de ficheros del sistema. Aun así estos usuarios pueden tener acceso a la máquina Linux. Para evitar este problema se puede registrar a los usuarios Linux que no tienen privilegios para hacer login directamente sobre el sistema operativo o se utilizan usuarios virtuales de vsftpd.
Una vez más editaremos el archivo de configuración de vsftpd, teniendo en cuenta los puntos más importantes.

sudo nano /etc/vsftpd.conf

Los parámetros que modificaremos esta vez son los siguientes:

listen = YES  para que vsftpd se inicie con el sistema.

anonymous_enable = NO  no permitimos que usuarios anónimos puedan conectarse a nuestro servidor. Por seguridad.

local_enable = YES  permite conectarse con los usuarios locales del servidor donde está instalado.

write_enable = YES  si queremos que los usuarios tengan permisos de escritura.

local_umask = 022 esta máscara hace que cada vez que subamos un archivo, sus permisos sean 755. Es lo más típico en servidores FTP.

chroot_local_user = YES

chroot_list_enable = YES sirve para que los usuarios locales puedan navegar por todo el árbol de directorios del servidor. Esto sólo queremos permitírselo a ciertos usuarios, para ello tenemos el siguiente parámetro.

chroot_list_file = /etc/vsftpd.chroot_list Indicamos el fichero donde están listados los usuarios que pueden navegar hacía arriba por los directorios del servidor, lo normal es que sea el administrador del servidor.

Crear un grupo de usuarios para FTP

En este caso los usuarios que se conectarán no tendrán acceso al servidor vía SSH, por lo tanto debemos darles permisos especiales.

sudo groupadd ftp

Creamos una shell para que no puedan entrar a la consola del servidor:

sudo mkdir /bin/ftp

Editamos el listado de shells del sistema:

sudo nano /etc/shells

Agregamos nuestra shell en el archivo editado con la línea anterior

/bin/ftp

Crear un usuario que pertenecerá al grupo FTP

Debemos crear la carpeta del usuario en el servidor, será donde tendrá acceso vía FTP y asignamos los permisos correctos.

mkdir /home/ftp/usuarioftp
chmod -R 777 /home/ftp/usuarioftp

Creamos el usuario que pertenece al grupo FTP

sudo useradd -g ftp -d /home/ftp/usuarioftp -c "MiUsuario" usuarioftp

Los parámetros que utilizamos en la línea anterior son:

-g ftp  el usuario pertenece al grupo ftp.
-d /home/ftp/usuarioftp  El directorio principal del usuario es /home/ftp/usuarioftp.

-c “Nombre del Usuario”  el nombre completo del usuario.

usuarioftp  la última palabra será el nombre de usuario
Creamos la contraseña para el usuario:

sudo passwd usuarioftp


Enjaular al usuario

El usuario no podrá escalar en la jerarquía del directorio y solamente se mantendrá en su directorio. Buscamos nuestro usuario recién creado en:

sudo nano /etc/passwd

Copiamos la línea del archivo que puede ser algo así:

usuarioftp:x:1004:118:MiUsuario:/home/ftp/usuarioftp:/bin/ftp

Luego la pegamos en la última línea del archivo vsftpd.chroot_list:
sudo nano /etc/vsftpd.chroot_list

Usuarios virtuales

VSFTPD permite la creación de usuarios virtuales que no serán usuarios del sistema porque sus datos de acceso se almacenarán en un archivo de texto. Luego convertimos el archivo en una base de datos y VSFTPD mapeará a los usuarios de esta  base de datos como si fueran usuarios del sistema.

Creamos un usuario local debajo de cuya carpeta de usuario colgarán las de los usuarios virtuales:

sudo useradd usr_local -s /usr/sbin/nologin -d /home/usr_local -m

Creamos carpetas para los usuarios virtuales dentro de /home/usr_local:
Salimos de la raíz y nos posicionamos sobre la carpeta usr_local

cd
cd/home/usr_local
mkdir usuariovir1 usuariovir2 usuariovir3

Establecemos propietario y permisos (¡OJO!: los directorios de los usuarios virtuales no pueden tener permisos de escritura):

chown -R usr_local:usr_local usuariovir1
chown -R usr_local:usr_local usuariovir2
chown -R usr_local:usr_local usariovir3
chmod -R 555 usuariovir1
chmod -R 555 usuariovir2
chmod -R 555 usuariovir3

Dentro de cada carpeta de usuario, creamos una carpeta "ftp_subidas" y le damos permiso de escritura. Nos posicionamos en cada carpeta virtual y hacemos.

cd usuariovir1
mkdir ftp_subidas
chmod -R +w ftp_subidas

A continuación creamos un archivo de texto con todos los usuarios y passwords del servicio. Creamos el archivo de texto "vsftpd_users" dentro de /etc con cada usuario seguido de su contraseña:

usuariovir1
pwd1
usuariovir2
pwd2
usuariovir3
pwd3

Después convertimos el archivo de texto de la base de datos Berkeley en un archivo binario. Descargamos la base de datos.  A la pantalla que sale le damos guardar archivo.

Usuarios virtuales en vsftpd

Salimos de la consola de root con exit
Y vamos al directorio descargas con cd Descargas y lo instalamos con 

sudo dkpg –i db4.8-util_4.8.30-12+deb7u1_amd64.deb

Para no escribir todo, se hace

sudo dkpg –i db4.8-util_4.8

Y cuando de error, se pulsa la tecla tabulador y escribe el paquete completo. Para ello utilizaremos el comando db4.8_load.
Ahora convertimos el archivo de texto previamente creado en un archivo .db de la base de datos.

sudo db4.8_load -T -t hash -f /etc/vsftpd_users /etc/lista_usuarios.db

Protegemos el archivo:

chmod 600 lista_usuarios.db

A continuación para cada usuario virtual se creará un fichero de configuración, en este caso el primero sería usuariovir1, lo creamos de este modo /etc/vsftpd/users creamos un archivo para cada usuario con el siguiente contenido:

mkdir vsftpd
cd /vsftpd
mkdir users
cd /users

Y dentro de cada directorio de usuario hacemos.

sudo nano usuariovir1

Y metemos estas líneas:

write_enable=YES
dirlist_enable=YES
download_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_upload_enable=YES
anon_world_readable_only=NO

Idem para el resto de usuarios. 

Para conectar la autentificación con los usuarios de la base de datos utilizaremos al herramienta PAM (Pluggable Authentication Modules) esta herramienta permite escoger el modo en que se autenticarán los usuarios. 

Modificamos el archivo /etc/pam.d/vsftpd dejando sólo las siguientes líneas:

auth required pam_userdb.so db=/etc/lista_usuarios
account required pam_userdb.so db=/etc/lista_usuarios
session required pam_loginuid.so
Modificamos el fichero vsftpd.conf:
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=usr_local
user_config_dir=/etc/vsftpd/users
virtual_use_local_privs=YES
user_sub_token=$USER
local_root=/home/usr_local/$USER

Esto deshabilitará a los usuarios anónimos y al mismo tiempo activará los usuarios locales que pasarán a ser usuarios virtuales. La propiedad guest_username establece el usuario del sistema con el que se personarán los usuarios virtuales. User_config_dir hace referencia al directorio donde se encuentran los archivos con los diferentes privilegios de los usuarios.

Hecho esto, reiniciamos el servicio.

sudo service vsftpd restart

Y desde un equipo cliente, con filezilla ponemos el usuario virtual y entramos al servidor.


Usuarios virtuales en vsftpd

Gestión de accesos

Puede darse el caso que necesitemos bloquear un acceso desde una máquina remota. Existen varias herramientas Linux que permiten filtrar las IP que acceden al servidor. En este caso vamos a instalar la herramienta tcp wrapper
Para ello en el fichero de configuración /etc/vsftd.conf añadimos la línea:

tcp_wrappers=YES

Para bloquear definitivamente una IP o un rango editamos el archivo /etc/hosts.deny y añadimos 
Vsftpd:192.168.0.140 ó vsftpd:192.168.0.*

También es posible restringir el acceso a algunos usuarios locales de la máquina Linux que no se desea que accedan a FTP. Para ello creamos un fichero de texto plano en /etc/vsftpd/user_list con los usuarios que tiene el acceso restringido, por ejemplo:
usuario1
usario2
Esta lista de usuarios debe ser referenciada desde el fichero de configuración /etc/vsftpd.conf

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list

Cambiar el Puerto por defecto de vsftpd

Cambiar el puerto por defecto es una Buena idea si deseamos implementar un aumento en la seguridad.
Para esto se debe ingresar al servidor Linux con acceso root.
Abrir el archivo vsftpd.conf  (su ubicación en general es /etc/vsftp/vsftpd.conf o /etc/vsftpd.conf)

vim vsftpd.conf

Encontrar la línea que dice “listen_port”

listen_port=21

Y posteriormente debemos reemplazar el puerto 21 con el nuevo puerto (por ejemplo: 212)

listen_port=212

Guardamos y salimos. Para estar seguros de que no hay otro servicio usando el puerto debemos reiniciar vsftpd


/etc/init.d/vsftpd restart



No hay comentarios:

Publicar un comentario