servidor Web para que los diseñadores y webmasters puedan dejar allí sus
creaciones sin molestar a los administradores, nosotros. Con este
objetivo, vamos a montar un servidor ftp.
Usuario: cliente_01
Acceso a su directorio: /var/www/dominio1
Sin shell en el sistema y en un entorno chroot
Usuario: cliente_02
Acceso a su directorio: /var/www/dominio2
Sin shell en el sistema y en un entorno chroot
Usuario: webmaster
Acceso a su directorio: /var/www
Sin shell en el sistema y en un entorno chroot
Preparación del sistema
Antes de instalar el servidor ftp vamos a crear los usuarios y
securizarlos para que tengan los mínimos permisos y sólo puedan hacer lo
que nosotros definamos.
Crearemos un grupo llamado ftp al cual asociaremos los usuarios.
# groupadd ftp
Creamos los usuarios con sus correspondientes características.
#useradd -g ftp -d /var/www/dominio1 -c " Cliente 1 " client_01
#useradd -g ftp -d /var/www/dominio2 -c " Cliente 2 " client_02
#useradd -g ftp -d /var/www -c " webmaster " webmaster
Les asignamos un password a los usuarios con el comando passwd. Si no
tiene password no funcionará.
Ahora creamos una shell fantasma en el directorio correspondiente.
#mkdir /bin/ftp
Editamos el fichero /etc/shells y la añadimos en la ultima línea y
continuación editamos el fichero /etc/passwd y buscamos las líneas donde
están definidos los usuarios que hemos creado antes y les añadimos el
shell falso:
client1:x:1005:1005: Cliente 1 :/var/www/dominio1:/bin/ftp
client2:x:1006:1005: Cliente 2 :/var/www/dominio2:/bin/ftp
webmaster:x:1007:1005: webmaster :/var/www:/bin/ftp
Instalación del servidor
Ahora es cuando realmente vamos a realizar la instalación del servidor
con el comando apt-get.
#apt-get install vsftpd
Esto descargará los paquetes y los dejará ordenados en sus directorios
correspondientes junto a los scripts de arranque y parada del servicio.
Configuración del servidor
El fichero de configuración del servidor se encuentra
en /etc/vsftpd.conf. Lo editamos para configurarlo a nuestro gusto y
objetivo. El contenido es algo parecido, buscamos las líneas indicadas y
las modificamos:
# Example config file /etc/vsftpd.conf
#Escuchando
listen=YES
#
...............................................
# Desactivamos el acceso anónimo
anonymous_enable=NO
#
# Descomentamos la línea para que se puedan conectar
local_enable=YES
#
# Permitimos a usuarios locales escribir
write_enable=YES
#
# APLICA CONFIGURACIÓN UMASK
local_umask=003
#Mensajes welcome
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
............................
#
# You may override where the log file goes if you like. The default is
shown
# below.
xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog
format
xferlog_std_format=YES
# Se descomenta esto para crear una jaula
chroot_local_user=YES
# You may specify an explicit list of local users to chroot() to their
home
# directory. If chroot_local_user is YES, then this list becomes a list
of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#
# Debian customization
# secure_chroot_dir=/var/run/vsftpd
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
# This option specifies the location of the RSA certificate to use for
SSL
# encrypted connections.
#rsa_cert_file=/etc/ssl/certs/vsftpd.pem
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=NO
A continuación creamos el fichero vsftpd.chroot_list el cual tendrá la
lista de usuarios que no tendrán acceso al servidor:
# touch /etc/vsftpd.chroot_list
Volcamos los datos a este fichero desde etc/password con el comando.
# cat /etc/passwd | awk -F: '{ print $1 }' > /etc/vsftpd.chroot_list
Esto nos genera un fichero con los login de usuarios del sistema del
cual quitamos los que si queremos que tengan acceso y los ponemos en el
fichero /etc/vsftpd.user_list.
Ejemplos de ficheros:
vsftpd.chroot_list
# usuarios con no acceso
root
daemon
bin
sys
sync
games
man
lp
mail
news
vsftpd.user_list
#usuarios con acceso
webmaster
client_01
client_02
Despues solo ejecutamos el comando:
# sudo /etc/init.d/vsftpd restart
Y Listo, Ya tenemos nuestro Servidor FTP operativo.
13 comentarios:
hola otra vez mira ya instale mi servidor samba, quiero hacer un ftp y con el tiempo y la practica hacer uno web y un mail bueno mi pregunta es esta que nesecito para poder tener mi servidor ftp en internet, estoy dado de alta en no-ip ya instale no ip (sudo apt-get install no-ip)lo configure "no-ip -C" me pidio los datos, bueno lo que quiero es como le puedo agregar mi dominio o mi direccion no-ip o que es lo que ocupo para poder tenerlo gracias
Jomel:
En no-ip creas un dominio al registrarte, solo tienes que poner esta direccion en cualquier navegado y listo, debe funcionar, por ultimo puedes poner la ip plublica que te asigna no-ip, si accedes en forma local, LAN, solo pones la ip de la maquina donde tienes el servidor FTP y listo.
oye volvi hacer los pasos y no me puede crear los usuario, bueno dime como debe estar configurado el no ip , por que lo tengo configurado en su pagina como dns host (A) no se como debo de configurarlo si es asi me puedes ayudar
hola he hecho todo lo que dijiste pero no puedo acceder a mi servidor web via FTP, he abierto los puertos 20 y 21 en el router para tener acceso y no me deja, mi servidor lo tengo en /home/servidor/www/
como puedo hacer para que me funcione????
yo tengo instalado Xubuntu.
buen tutorial, bien explicado solo que me eh atorado en un problemita, se creo el grupo,! en el grupo añadi el usuario " x " bien este usuario y su carpeta de home como tu indicaste cambia a /var/www/x
tube algunos contratiempos nada no solucionable, al fin logre acceder a ftp por medio de tu tutorial, el problema es el siguiente:
al momento de subir un archivo en alguna carpeta secundaria que no sea /var/www/x me da el mensaje 550, te lo pondre mas sencillo si no me di a enteder
en la carpeta /var/www/x/cgi-bin/ (no necesariamente esa...) intento subir el archivo ip.cgi y me lo rechaza con estos mensajes:
[10:11:54] CWD /var/www/x/cgi-bin/ip.cgi
[10:11:54] 550 Failed to change directory.
[10:11:54] TYPE A
[10:11:54] 200 Switching to ASCII mode.
[10:11:54] PASV
[10:11:54] 227 Entering Passive Mode (x,x,x,x,88,199)
[10:11:54] Abriendo conexión de datos x.x.x.x Puerto: 22727
[10:11:54] LIST -aL
[10:11:55] 376 bytes transferidos. (24,4 KB/s) (15 ms)
[10:11:55] 150 Here comes the directory listing.
[10:11:55] 226 Directory send OK.
[10:11:55] La operación ha sido añadida a la Cola de Transferencia. Para el estatus chequea la Cola de Transferencia.
[10:11:56] MDTM ip.cgi
[10:11:56] 550 Could not get file modification time.
[10:11:56] STAT ip.cgi
[10:11:56] 213-Status follows:
[10:11:56] 213 End of status
no acostumbro mucho escribir para buscar soluciones, me gusta aprender de la manera dificil de esa manera no se olvida, el problema es que por el momento eh andado con el trabajo y estudiando algo de chroot y se me dificulta darle la atencion necesaria. te dejo mi config en vsftpd.conf y mis opciones a configurar como vsftpd.user_list y vsftpd.chroot_list
*****
vsftpd.conf
listen=YES
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=NO
max_clients=5
dirmessage_enable=YES
xferlog_enable=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
userlist_enable=YES
userlist_deny=NO
check_shell=NO
*****
vsftpd.user_list
x
****
vsftpd.chroot_list
root
daemon
bin
sys
sync
games
man
lp
mail
news
no se si sea necesario pero te agrego el /etc/passwd de la cuenta junto con lo agregado en el /etc/shells
1.a (/et/passwd)-
x:x:1013:1013: prueba :/var/www/x:/bin/ftp
1.b (/etc/shells)#~
#!/bin/bash
/bin/ftp
Nota: obviamente censure mi login con " x " y mi direccion ip, te dejo mi correo de igual manera visitare tu blog para ver una rspuesta de tu parte
nos vemos y espero con tu ayuda poder solucionar el problema, un saludo cordial.
Si te aparece el mensaje de error "550 - Create directory operation failed", posiblemente no haya permisos suficientes para crear el directorio o estés utilizando un usuario de FTP incorrecto.
Como norma general, utiliza el usuario principal de tu Hosting para trabajar con todo el contenido de la carpeta www, y los usuarios secundarios de FTP restringidos para las carpetas a las que se encuentren asociados. Evita modificar contenido de las carpetas restringidas con el usuario principal.
Además, por otra parte, revisa siempre cual es el usuario asociado a la carpeta que deseas modificar, ya que todo aquel contenido generado a través de PHP, asumirá como propietario "nobody".
Comentanos como te va con esto.
Saludos.
dejame revisar bien lo que comentas. hablamos del usuario principal viendo bien a que te refieres. tengo agregados a FTP algunos usuarios pero logicamente van dirigidos al /home/usuario y en este caso eso no me sirve de mucho, mi fin es llegar a la raiz del directorio apache que en este caso si no me equivoco es /var/www/
y con referente a los permisos mi idea principal es:
chmod -R /var/www/x/
quiza este mal quiza no comprendi tu punto no estoy muy familiarizado con este sistema operativo, si pudieces ser un poco mas especifico realmente agraeceria tu comentario de regreso.
(..) -->
Además, por otra parte, revisa siempre cual es el usuario asociado a la carpeta que deseas modificar, ya que todo aquel contenido generado a través de PHP, asumirá como propietario “nobody”.
<-- (.)
eso esta definido en /etc/shells no?
o bien en los grupos mi contexto fue el siguiente:
~# groupadd ftp
~# useradd -g ftp -d /var/www/x -c ” prueba ” x
~# mkdir /var/www/x
~# chmod -R /var/www/x
y de ahi crear el /bin/ftp
agregarlo a /etc/shells
agregar el usuario a user list de el vsftpd
reiniciar el servicio vsftpd
segùn veo... hice lo indicado imagino que es algo sobre los permisos
porque en las cuentas ftp normales en /bin/bash para usuarios al crearce en /home/usuario no tengo ningun tipo de problema en ese aspecto.
algo relamente extraño... que piensa?
bien creo que entendi tu punto abri una sesion FTP xon usuario x y me dio este resultado en consola de root:
x 27625 0.0 0.3 3776 852 ? S 18:25 0:00 /usr/sbin/vsftpd
nobody 27644 0.0 0.4 3752 1020 ? Ss 18:25 0:00 /usr/sbin/vsftpd
x 27646 0.0 0.3 3776 844 ? S 18:25 0:00 /usr/sbin/vsftpd
veo a que te referias con lo de nobody, trate de usar un poco la logica pero no me resulto como esperaba, configure el vsftpd.chroot_list y agregue al usuario "nobody" pensado... quiza esta pueda ser la solucion pero al parece no despues de reiniciar volvi a intentarlo y dio el mismo resultado. ya localizado el problema que manera existe para arreglarlo?
En Unix, "nobody" es el nombre convencional de una cuenta de usuario que no es propietario de los archivos, no está en los grupos privilegiados, y no tiene capacidad, excepto los que cada usuario tiene en otras.
Por otra parte creo que solo un problema de derechos en el directorio en el que quieres entrar, osea, creaste un directorio con el usuario principal y ahora quieres acceder a un directorio al interior con otro usuario.
Saludos.
bien... encontre la respuesta al parecer hice todo perfecto, no sin tu ayuda claro tan solo era un sencillo comando...:
chown -R x /var/www/x
y listo, un saludo
hola ya hice cada paso tengo los usuarios creados pero no me puedo conectar
me sale este error:
Error: Authentication failed.
Error: Critical error
Error: Could not connect to server
Faltaría asignar el propietario adecuado al directorio /var/www/dominio1
Yo hice chown root:ftp /var/www/dominio1
Si es inseguro o hice algo mal díganmelo, pero así me funciona.
Antes era root:root y no me permitía escribir desde el ftp en el directorio.
buen manual :)
Publicar un comentario