Llevo ya unos días peleándome con el proftpd tratando de tener un usuario anónimo en RO y un directorio incoming con RW, además de tener un usuario para el FTP con derechos RW sobre el directorio de trabajo del usuario anónimo. La primera parte muy bien, pero la segunda me encontraba con problemas de autenticación y no podía salir de ahí, pero de tertúlia por el IRC x-ip me ha presentado otro servidor de FTP, el very secure ftp, vsftpd, que permite añadir usuarios con una base de datos externa (en este manual voy a usar una berkeley DB) y configurar de forma individual lo que puede hacer cada usuario, así que vamos a ver hasta donde se puede llegar :)
Partimos de una debian squeeze 6.0.1.
Lo primero es instalar el servicio
# apt-get install vsftpd
Y las herramientas para gestionar bases de datos Berkeley.
# apt-get install db4.8-util
A continuación creamos un fichero con los datos de login y passwords poniendo el usuario y debajo el password, de esta forma:
# vi /root/ftpusers usuario1 password1 usuario2 password2 :wq # chmod 600 /root/ftpusers
Y generamos la base de datos en formato berkeley y la protegimos ante ojos indiscretos:
# db4.8_load -T -t hash -f /root/ftpusers /etc/vsftpd_login.db # chmod 600 /etc/vsftpd_login.db
Una vez creada nuestra base de datos, necesitamos editar el archivo PAM para indicar que use nuestra base de datos.
# vi /etc/pam.d/vsftpd auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
atención: comentamos el resto de líneas de este fichero
Y al fichero de configuración vsftpd que use el fichero de autenticación pam al cual le hemos definido la autenticación con la base de datos Berkeley (esto ya está por defecto)
# This string is the name of the PAM service vsftpd will use. pam_service_name=vsftpd
La instalación por defecto de debian nos deja instalado el servicio con un acceso anónimo bajo el usuario ftp y el directorio de trabajo /usr/ftp, como en el sistema que estoy configurando la partición tocha es /var, voy a cambiar el directorio de trabajo del usuario ftp editando el fichero /etc/passwd:
# vi /etc/passwd ftp:x:104:106:ftp daemon,,,:/var/ftp:/bin/false # mkdir /var/ftp # chgrp -R ftp /var/ftp
Ahora mismo podemos escoger si queremos permitir el usuario anónimo o no en este directorio, tal como he comentado al principio vamos a definir permisos restrictivos para los usuarios anónimos y más permisivos para los autenticados, si queremos en algún momento realizar la acción contraria es tan simple como cambiar la afirmación a negación o viceversa ;)
# vi /etc/vsftpd.conf listen=YES anonymous_enable=YES # permitir login anónimo local_enable=YES # permitir login usuarios del sistema (en este caso pam.d) write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES chroot_local_user=YES # enjaulamos al usuario FTP, para que no pueda ir a directorios superiores secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/private/vsftpd.pem user_config_dir=/etc/vsftpd/users guest_enable=YES guest_username=ftp anon_root=/var/ftp/
A partir de aquí ya tenemos que el usuario anónimo sólo tiene lectura pero no escritura sobre el directorio de trabajo (/var/ftp), así que vamos a definir los usuarios. Para ello añadimos una línea más al fichero /etc/vsftpd.conf
user_config_dir=/etc/vsftpd/users
y creamos los directorios /etc/vsftpd/ y /etc/vsftpd/users/
Ahora tendremos que decirle a vsftpd que no permita el login de los usuarios del sistema al FTP, ya que el password en el FTP es en claro y con un sniffer es sencillo conseguir el password de un usuario con acceso ssh al sistema, por esto se recomienda que los passwords de los usuarios del FTP sean distintos al de los del sistema.
Una forma rápida de sacar los usuarios del sistema es así:
# cat /etc/passwd | cut -d ":" -f 1 > /etc/vsftpd/denied_users
Ahora solo nos queda definir usuario a usuario los permisos de cada uno. Para ello lo 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 leer y descargar lo que hay en /var/ftp, para ello como indicamos antes, creamos el archivo /etc/vsftpd/users/usuario1
# cd /etc/vsftpd/users/ # vi usuario1 dirlist_enable=YES download_enable=YES local_root=/var/ftp write_enable=NO anon_world_readable_only=NO :wq
Y al usuario2, le vamos a permitir escribir en /var/ftp, así que creamos otro archivo usuario2, que contenga:
# vi usuario2 dirlist_enable=YES download_enable=YES local_root=/var/ftp anon_upload_enable=YES anon_world_readable_only=NO anon_other_write_enable=YES # permitir borrar ficheros propios y de otros usuarios write_enable=YES anon_mkdir_write_enable=YES # permitir escribir al directorio local_umask=022 # mascara para los ficheros propios anon_umask=022 # mascara para los ficheros desde otros usuarios :wq
Tras hechas todas las modificaciones ya sólo nos falta reiniciar el servicio y probar que funciona ;)
# /etc/init.d/vsftpd restart
Nota: He estado un rato, pero hasta que lo he encontrado… bufff!!! el directorio superior del FTP no puede tener los permisos del usuario FTP en escritura a other, ya que entra en conflicto con alguno de los parámetros de la configuración del servicio. Para que el FTP funcione tenemos que definir los permisos así:
root@xava:/var# ls -l |grep ftp drw-rwxr-x 5 blackhold blackhold 4096 7 set 04:36 ftp root@xava:/var# cd ftp root@xava:/var/ftp# ls -lh total 12K drwxrwxr-x 2 ftp ftp 4,0K 7 set 04:35 incoming drwxrwxr-x 2 ftp ftp 4,0K 7 set 04:51 musica drwxrwxr-x 2 ftp ftp 4,0K 7 set 04:36 videos
El usuario anónimo no he conseguido que tenga derechos de escritura sobre incoming, pero como mínimo ya tenemos medio camino hecho ;)
Vía: esdebian + rascar un rato!
Pingback: Punto de montaje: FTP | Blackhold
Pingback: Punto de montaje: FTP | Blackhold
Hola, ya hace casi un año que monte un servidor FTP siguiendo estos pasos, y ademas tu blackhold me lo terminaste de configurar cuando viniste a ayudarnos a montar los supernodos.
Ahora me sale que el unico usuario que tengo guifi/guifi ha llegado a su tope de megas subidas (aun que no me sale ningun aviso, no me deja colgar nada mas), si borro datos me deja volver a cargar ese espacio borrado.
El disco duro esta solo un 1% lleno, y el espacio subido por el usuario guifi son unas 260 GB. aproximadamente.
En ningun sitio de la configuración se le pone limite a este usuario.
A que puede ser debido?
Saludos, Jordi
He creado otro usuario, y me hace lo mismo, no me deja colgar nada mas, hasta que no borro algo. He visto que usa el mismo usuario del sistema “ftp” 104 107, aun que cree mas usuarios el “limite” ya esta superado.
Ya descubri que era el error, y no tiene nada que ver con la configuracion del FTP:
tengo la carpeta ftp en /var/ftp y yo pensava que la tenia en /datos/ftp (que es otro disco duro) solo con mover ftp a /datos/ y hacer un enlace simbolico se soluciono.
PD: estos 3 comentarios se pueden borrar ya que no tienen nada que ver con el post.
saludos! Jordi.