Categories: Debian

Servicio ftp con usuarios fantasma

Configuración de vsftpd con usuarios fantasma

Vamos a instalar y configurar un servidor de ftp, en este caso lo vamos a hacer con vsftpd. En la configuración vamos a ver paso por paso las múltiples opciones que tenemos, aunque muchas de ellas vienen explicadas (en inglés) en el archivo de configuración vsftpd.conf [1]

Vamos a crear usuario fantasma, es decir, solo serán usuarios del ftp, no existirán como usuario del sistema, de esta manera en caso de que exista algún tipo de fallo en el servidor, sólo se quedaría comprometido el ftp. Además vamos a enjaular a los usuarios, para que solo puedan acceder al directorio que nosotros queramos, y así evitar que naveguen por nuestro disco duro.

Instalación

Como tenemos un sistema con Debian, la instalación es extremadamente simple, el servidor se instala con el siguiente comando;

diablo:~# apt-get install vsftpd 

Configurando

Una vez instalado, nuestro debian lo inicia por nosotros con la configuración que viene por defecto. Así que podemos probar a conectarnos a nosotros mismos para ver que realmente funciona. Para ver todas las opcines de forma detallada tecleamos:

diablo:~# man vsftpd.conf 

Aqui nos aparecerán muchísimas opciones, así como el estado por defecto en el que se encuentran (Las opciones más relevantes para el caso que nos ocupan, vienen detalladas en el Apéndice). Es decir si nuestro archivo de configuración [1] se encontrase en blanco, el estado de las opciones se encontrarán tal y como aparecen aquí. En el Apéndice, están comentadas muchas de las opciones.

Para indicarle los usuarios que queremos, hacemos uso de db3 (Berkereley db), sino lo tenemos instalado, tecleamos:

diablo:~# apt-get install libdb3 

Lo que hacemos ahora es crear un archivo con los login / passwords que queramos en formato db, para ello creamos un archivo de texto, y metemos logins y passwords en lineas altenas, de esta manera:

usuario1 pass1 usuario2 pass2 

Por lo tanto tenemos dos usuarios, usuario1 y usuario2, con contraseñas pass1 y pass2 respectivamente, (y al archivo lo hemos llamado users). Ahora creamos la base de datos en formato db ayudándonos de Berkereley db (tenemos que ser root, puesto que necesitamos permisos de escritura en /etc)

diablo:~# db3_load -T -t hash -f users /etc/vsftpd_login.db 

Con esto hemos creado /etc/vsftpd_login.db, ahora nos aseguramos que los permisos son lo más resctrictivo posible:

diablo:~# chmod 600 /etc/vsftpd_login.db 

Archivo PAM

Una vez creada nuestra base de datos, necesitamos crear un archivo PAM para indicar que use nuestra base de datos. Para ello incluimos estas líneas:

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login 

Básicamente lo que hacen es direccionar a nuestra base de datos. Una vez lo tengamos, lo copiamos a /etc/pam.d/vsftpd

Nota: En otras distribuciones que no son Debian, hay que copiarlo a /etc/pam.d/ftp no a /etc/pam.d/vsftpd. Si miramos en [1] (en debian) vemos que aparece esto:
pam_service_name This string is the name of the PAM service vsftpd will use. 
Default: vsftpd 

Por lo tanto, o lo copiamos a vsftpd o indicamos pam_service_name=ftp, o lo que queramos. Ahora vamos a crear a nuestro usuario fantasma, para esto hacemos:

diablo:~# useradd -d /srv/ftp fantasma 

Usuarios Anonimos

He creado el usuario fantasma dentro de /srv/ftp. Ya tenemos casi todo, solo nos falta crear una buena configuración. Para esto vamos por el archivo vsftpd.conf que se en cuentra en /etc. Como ya comentamos antes, vamos a configurarlo de tal manera que no permitamos usuarios anónimos,

anonymous_enable=NO local_enable=YES 

Si queremos que nuestros usuarios no tengas posibilidad de escribir, hacemos:

write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO 
anon_other_write_enable=NO 

Y con esto enjaulamos al fantasma

chroot_local_user=YES 

Y ahora el puntito final en lo que a la configuración de usuarios se refiere.

guest_enable=YES guest_username=fantasma 

Con esto estamos diciendo que todos los usuarios sean fantasma a nivel de usuario en nuestro servidor. El resto de opciones, como ya comentamos antes vienen correctamente explicadas en [1]. Si ahora entramos en nuestro servidor, nos va a decir que

150 Here comes the directory listing. 226 Transfer done 
(but failed to open directory). 

Puesto que no tenemos permisos suficientes. Una vez aqui, alguno se preguntará y ¿como hacemos ahora para bajar/subir los archivos, si el servidor no nos deja ni movernos? La explicación es sencilla, lo que hemos hecho es crear un entorno lo más seguro posible, que se adapte a nuestras exigencias.

Permisos Usuarios

Ahora lo que vamos a hacer es definir permisos usuario por usuario. Y eso lo vamos a conseguir con la opción user_config_dir, que nosotros vamos especificarla en /etc/vsftpd/users, de la siguiente manera:

user_config_dir=/etc/vsftpd/users

Como no queremos que los usuarios del sistema se logueen, lo que hacemos es ponerlo explicitamente como indicamos ahora Creamos los directorios /etc/vsftpd y /etc/vsftpd/users, para luego meter las características de nuestros usuarios. Cremos una lista de usuarios a los que se deniega el acceso, y la guardamos en /etc/vsftpd/denied_users Para crear la lista, podemos hacerlo por ejemplo:

diablo:~# cat /etc/passwd | cut -d ":" -f 1 | sort > /etc/vsftpd/denied_users 

Si te estás preguntando porqué no queremos que los usuarios del sistema se logueen, la respuesta es: por seguridad, puesto que los usuarios suelen tener más persmisos de los necesarios en el ftp, además, los login/passwd en ftp van en texto claro, siendo muy propensas a ser esnifadas, y pueden comprometer la seguridad del servidor.

Ahora solo nos queda definir usuario a usuario los permisos de cada uno. Para ello ló unico que tenemos que hacer es crear un archivo por usuario, con el nombre del mismo dentro de /etc/vsftpd/users, especificando las opciones extras que queremos que tenga cada uno de ellos. Por ejemplo a usuario1, le vamos a permitir ver y descargar lo que hay en /data, para ello como indicamos antes, creamos el archivo /etc/vsftpd/users/usuario1

dirlist_enable=YES download_enable=YES local_root=/data write_enable=NO 
anon_world_readable_only=NO

Y a usuario2, le vamos a permitir escribir en /srv/ftp, para lo cual creamos otro archivo pero esta vez se llama usuario2, que contenga

dirlist_enable=YES download_enable=YES local_root=/srv/ftp 
anon_upload_enable=YES anon_world_readable_only=NO write_enable=YES 

Y así usuario a usuario podemos determinar los privilegios de cada uno, y dejarles enjaulados donde nosotros queramos, sin que puedan fisgar por el resto de nuestro sistema.

Con todo esto, hemos conseguido configurar el servidor de ftp, con usuarios fantasma, y estableciendo una configuración personalida por cada usuario. De esta manera se consigue una mayor versatilidad a la hora de configurar el servidor, y una mayor seguridad.

Apéndice

# Entre las opciones destacables para nuestro propósito caben destacar estas:
anonymous_enable

Este parámetro se utiliza para definir si se permitirán los accesos anónimos al servidor de
archivos. En nuestro caso seleccionamos NO queremos accesos anónimos, por lo tanto
seleccionamos NO.

# chroot_local_user

Si este parámetro es YES, el usuario local estará enjaulado en lo que hayamos definido como
su home

# guest_enable

Si está habilitado, todos los logins no anónimos (en nuestro caso todos), serán lo que hemos
llamado usuarios fantasma. Es decir cualquier login será mapeado como fantasma. Nota:
nosotros hemos creado un usuario en el sistema llamado fantasma, puedes ponerle el
nombre que quieras, muchos lo llaman virtual. Este parámetro va asociado a
guest_username, que es donde definimos el nombre de usuario fantasma, en nuestro caso
también es fantasma.

# guest_username

Ver guest_enable.

# listen

Si está habilitado, vsftpd iniciará en modo standalone. Esto quiere decir que no debe ser
iniciado por algún inetd, y en su lugar se ejecutará directamente.

# listen_address

Si vsftpd se encuentra en modo standalone, inidicamos la dirección en la que estará
escuchando.

# local_enable

Este parámetro permite que los usuarios locales pueden acceder al ftp. En nuestro caso
vamos a seleccionar que YES, puesto que vamos a crear un solo usuario fantasma que
acceda al servidor.

# pam_service_name

Indica el servicio PAM que usará vsftpd, en nuestro caso como habíamos copiado la base de
datos a /etc/pam.d/vsftpd, lo llamamos vsftpd.

# user_config_dir

Con esta opción como hemos explicado antes, podemos añadir permisos usuario por
usuario, creando archivos simples de texto con los permisos por usuario que queramos. En
esta opción se define el directorio en el que vamos a guardar esos archivos.

# userlist_enable

Si está habilitado, los nombres de usuario que haya en el archivo indicado por userlist_file, no
podrán acceder, siendo rechazados ANTES de que introduzcan el password, de esta manera
evitamos que el password en claro de usuarios privilegiados, vaya en claro por la red.

# userlist_file

Ver userlist_enable.

El resto de opciones las podemos ver detalladas en [1]

Via | www.yawag.org/?q=node/78

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, and with no Front-Cover Texts, and with no Back-Cover Texts. Full text of the license is at file /usr/share/doc/gnome-core/html/fdl/C/index.html on your Debian system.

Linux Gratis

No soy un asesor financiero y la información que proporciono es solo para fines educativos e informativos. No brindo asesoramiento de inversión y cualquier decisión que tome con respecto a sus inversiones es suya. Consulte a un asesor financiero autorizado antes de tomar cualquier decisión de inversión. El valor de las criptomonedas puede ser volátil e invertir en ellas implica un riesgo significativo. Debe considerar cuidadosamente su propia situación financiera y tolerancia al riesgo antes de tomar cualquier decisión de inversión. No garantizo la exactitud o integridad de la información proporcionada y no soy responsable de ninguna pérdida o daño que pueda resultar del uso de esta información.

Disqus Comments Loading...

Recent Posts

Más Allá de la Teoría: Estudiantes en la Vanguardia de Lightning Network 2023

En el ámbito de la informática y la cadena de bloques, el conocimiento teórico a…

6 meses ago

Un Análisis Detallado del Informe de Crimen Cripto 2023: Una Guía para Principiantes

El emergente dominio de las criptomonedas ha cautivado la imaginación colectiva por su potencial para…

7 meses ago

Capital de Riesgo en Cripto: Sobreviviendo y Prosperando en un Mercado Bajista

En el siempre evolucionante mundo de las criptomonedas, el capital de riesgo (VC) ha encontrado…

7 meses ago

Bitcoin, divisas y criptomonedas: Potencial y perspectivas | Análisis 2023

?? Resumen video : Gareth Soloway Bitcoin, prepárate para lo que viene Introducción El mercado…

12 meses ago

El desmoronamiento de Silicon Valley Bank: la crisis bancaria del 2023

En marzo de 2023, el mundo financiero se vio sacudido por el repentino colapso de…

1 año ago

SegWit – Bitcoin Segregated Witness

A medida que Bitcoin continúa ganando popularidad y reconocimiento, aumenta la necesidad de escalabilidad y…

1 año ago