A raíz de la pregunta del foro Configuracion FTP me nació la curiosidad de saber si la solución que propuse funcionaba o no.
Es por eso que el presente post muestra como crear Usuario "put only" en VSFtpd:
IMPORTANTE: Estoy partiendo del hecho de que tengo instalado un VSFtpd (vsftpd-2.0.5-16.el5_6.1) sobre un CentOS release 5.6 (Final) con la siguiente configuración en vsftpd.conf
anonymous_enable=NO xferlog_file=/var/sites/ftp_misitio_com_ec/logs/vsftpd.log ftpd_banner=Bienvenido al Servidor FTP de Iknaxio. chroot_local_user=YES chroot_list_enable=NO use_localtime=YES
Procedimiento:
Creamos nuestro usuario de prueba y le asignamos una clave:
useradd -s /sbin/nologin iknaxio passwd iknaxio
Editamos el archivo /etc/vsftpd/vsftpd.conf y agregamos la sgte linea:
user_config_dir=/etc/vsftpd/user_conf
Esta directiva permite crear una configuración específica para cada usuario especificado, sobreescribiendo la configuración global de vsftpd.conf:
user_config_dir
This powerful option allows the override of any config option specified in the manual page, on a per-user basis. Usage is simple, and is best illustrated with an example. If you set user_config_dir to be /etc/vsftpd_user_conf and then log on as the user "chris", then vsftpd will apply the settings in the file /etc/vsftpd_user_conf/chris for the duration of the session. The format of this file is as detailed in this manual page! PLEASE NOTE that not all settings are effective on a per-user basis. For example, many settings only prior to the user's session being started. Examples of settings which will not affect any behviour on a per-user basis include listen_address, banner_file, max_per_ip, max_clients, xferlog_file, etc.Creamos el directorio para la configuración de usuarios:
Default: (none)
mkdir /etc/vsftpd/user_conf
Creamos el archivo de configuración específico para el usuario iknaxio:
touch /etc/vsftpd/user_conf/iknaxio
Lo editamos y dentro colocamos la siguiente opción:
cmds_allowed=PUT,PASV,SYST,STOR,TYPE,QUIT
Finalmente hacemos un reinicio del servicio:
/etc/init.d/vsftpd restart
Y a probar:
ftp -d 127.0.0.1
El -d es para que nos imprima los comandos que se envian al servidor:
Connected to 127.0.0.1. 220 Bienvenido al Servidor FTP del FCME. ftp: setsockopt: Bad file descriptor ---> AUTH GSSAPI 530 Please login with USER and PASS. ---> AUTH KERBEROS_V4 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (127.0.0.1:root): iknaxio ---> USER iknaxio 331 Please specify the password. Password: ---> PASS XXXX 230 Login successful. cmds.c:276: verbose=1 debug=1 overbose=1 ---> SYST 215 UNIX Type: L8 Remote system type is UNIX. Using binary mode to transfer files.
ftp> put phplist.zip local: phplist.zip remote: phplist.zip ---> TYPE I 200 Switching to Binary mode. ---> PASV 227 Entering Passive Mode (127,0,0,1,201,231) ---> STOR phplist.zip 150 Ok to send data. 226 File receive OK. 3443056 bytes sent in 0.011 seconds (3e+05 Kbytes/s)
Y ahora probamos las restricciones:
ftp> get phplist.zip local: phplist.zip remote: phplist.zip ---> PASV 227 Entering Passive Mode (127,0,0,1,220,239) ---> RETR phplist.zip 550 Permission denied.
ftp> ls ---> TYPE A 200 Switching to ASCII mode. ---> PASV 227 Entering Passive Mode (127,0,0,1,135,130) ---> LIST 550 Permission denied.
ftp> mkdir amirak ---> MKD amirak 550 Permission denied. ftp> quit ---> QUIT 221 Goodbye.
Salu2 8)