# [ftp] vsftpd para web

## Theasker

He montado un servidor web (vsftpd) + MySQL para los usuarios virtuales pero no se como hacer para que me permita subir los ficheros al servidor web. las configuraciones son:

```
listen=YES

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

file_open_mode=0666

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

chown_uploads=YES

nopriv_user=ftp

chroot_local_user=YES

#secure_chroot_dir=/var/run/vsftpd

pam_service_name=vsftpd

#pasv_promiscuous=YES

pasv_min_port=40000

pasv_max_port=41000

guest_enable=YES

guest_username=ftp

local_root=/home/ftp/$USER

user_sub_token=$USER

# Dónde encontrar las configuraciones específicas de cada usuarix

user_config_dir=/etc/vsftpd

# Directorio FTP predeterminado. Si no creamos un perfil, no toquen nada.

#local_root=/etc/vsftpd

# Privilegios locales para escribir, para los usuarios FTP remotos.

virtual_use_local_privs=YES

# SSL configuration

#ssl_enable=YES

#force_local_data_ssl=YES

#force_local_logins_ssl=YES

#ssl_tlsv1=YES

#ssl_sslv2=YES

#ssl_sslv3=YES

#rsa_cert_file=/etc/ssl/certs/vsftpd.pem

#rsa_private_key_file=/etc/ssl/certs/vsftpd.pem
```

luego está el usuario theaskerweb que tiene en su archivo de configuración el directorio del servidor web

```
local_root=/var/www/localhost/htdocs
```

pero cuando intento subir un fichero me dice que no puede, supongo que por permisos

```
553 Could not create file
```

El usuario es ftp del grupo ftp y lo he agregado al grupo apache (gpasswd -a ftp apache) pero no hay manera de subir nada.

----------

## Inodoro_Pereyra

No tengo experiencia con vsftpd pero esta línea:

```
local_root=/home/ftp/$USER
```

Implicaría que dentro del directorio ftp en tu home debería haber además un directorio adicional por cada usuario que se loguee en tu servidor. Para el usuario guest que has renombrado a ftp, debería existir /home/ftp/ftp y este último debería pertenecer a ftp:ftp o bien tener permisos de lectura/escritura para todo el grupo.

A ver si es eso.

Salud!

----------

## Theasker

 *Inodoro_Pereyra wrote:*   

> No tengo experiencia con vsftpd pero esta línea:
> 
> ```
> local_root=/home/ftp/$USER
> ```
> ...

 

tiene que ser parecido a lo que dices pero no eso, porque esa línea es justo la que sustituyo creando un archivo de configuración con el nombre del usuario el cual sustituye las líneas que me interesan. En mi caso el archivo /etc/vsftpd/usuario contiene:

```
local_root=/var/www/localhost/htdocs
```

lo cual sustituye a esa línea, por lo que el tema va por donde dices tu. Tiene que ser permisos que es una de tantas cosas que llevo mal. Según entiendo accede a ese directorio web el usuario ftp (el cual he añadido al grupo apache pero no debe ser suficiente ya que no me deja escribir en ningún directorio del servidor.

gracias por el interés

----------

## Inodoro_Pereyra

Bueno, como estás usando pam, logueate en un shell en el servidor como el usuario ftp y prueba si el usuario tiene permisos de lectura/escritura sobre /var/www/localhost/htdocs para empezar. Si de esa forma es posible acceder a htdocs entonces el problema es de vsftpd, caso contrario es un problema de permisos.

En función de tus resultados iremos viendo que sale...

¡Salud!

----------

## Theasker

no creo que pueda, me parece q se creó automáticamente sin posibilidad de shell

```
# grep ftp /etc/passwd

ftp:x:21:21:added by portage for ftpbase:/home/ftp:/sbin/nologin

```

----------

## Theasker

he intentado cambiar la línea de configuración del vsftpd que dice:

```
nopriv_user=ftp 
```

por otra cambiando el usuario por apache

```
nopriv_user=ftp 
```

ya que pensaba que ese era el usuario con el que se conectaba pero al crear un archivo con un usuario temporal que tengo en el directorio /home/ftp/temp crea un archivo que el usuario y grupo es ftp.

El problema es de permisos pero no se como solucionarlo, siempre he llevado mal lo de los permisos. Con mi usuario normal theasker tampoco puedo crear archivos en /var/www/localhost/htdocs tengo q crearlos crear los en mi directorio home y luego hacer un chmod apache:apache archivo.

----------

## Inodoro_Pereyra

Probá agregar esta línea al archivo de configuración:

```
virtual_use_local_privs=YES
```

Sacado de aquí después de googlear un poquito.

Otro detalle, cambia el umask por 002.

Algo de todo eso debería solucionar el problema. A ver si hay suerte.

Salud!

----------

## Theasker

a ver la configuración me ha quedado así:

```
listen=YES

anonymous_enable=NO

local_enable=YES

write_enable=YES

local_umask=022

file_open_mode=0666

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

chown_uploads=YES

nopriv_user=ftp

chroot_local_user=YES

#secure_chroot_dir=/var/run/vsftpd

pam_service_name=vsftpd

#pasv_promiscuous=YES

pasv_min_port=40000

pasv_max_port=41000

virtual_use_local_privs=YES

#user_sub_token=$USER

guest_enable=YES

guest_username=ftp

local_root=/home/ftp/$USER

user_sub_token=$USER

# Dónde encontrar las configuraciones específicas de cada usuario

user_config_dir=/etc/vsftpd

# Directorio FTP predeterminado. Si no creamos un perfil, no toquen nada.

#local_root=/etc/vsftpd

# Privilegios locales para escribir, para los usuarios FTP remotos.

virtual_use_local_privs=YES
```

Para las pruebas tengo 2 usuarios:

- Usuario temp donde su home está en /home/ftp/temp con permisos son:

```
# ls -la /home/ftp

total 12

drwxr-xr-x 3 root ftp  4096 abr 18 13:56 .

drwxr-xr-x 6 root root 4096 abr 14 13:08 ..

drwxrwxr-x 2 ftp  ftp  4096 may  5 12:38 temp
```

- Usuario web que su home es /var/www/localhost/htdocs/temp y los permisos de ese directorio son:

```
# ls -la /var/www/localhost/htdocs/ |grep temp

drwxr-xr-x  2 apache   apache   4096 may  5 12:44 temp
```

Con el usuario temp puedo escribir perfectamente en su directorio ya que tiene los permisos ftp:ftp para su directorio pero con el usuario web puedo leer pero no escribir en el directorio porque tiene los permisos apache:apache.

```

Estado:   Conectando a 127.0.0.1:9050...

Estado:   Conexión con el proxy establecida, realizando negociación...

Respuesta:   553 Could not create file.

Error:   Error crítico de transferencia de fichero
```

Yo pensaba que al incluir al usuario ftp en el grupo apache podría escribir pero no me funciona, y con mi usuario normal me pasa lo mismo por lo que para crear las páginas web es un lio de permisos y cambios de permisos.

Evidentemente no controlo los permisos de usuarios y grupo.

----------

## Inodoro_Pereyra

 *Theasker wrote:*   

> Con el usuario temp puedo escribir perfectamente en su directorio ya que tiene los permisos ftp:ftp para su directorio pero con el usuario web puedo leer pero no escribir en el directorio porque tiene los permisos apache:apache.

 

Es por eso mismo que te decía mas arriba que cambies el umask a 002 por que con 022 como está actualmente, el grupo tiene permisos de lectura/ejecución pero no de escritura.

Salud!

EDITO: O es eso, o realmente no estás usando PAM para autenticar tus usuarios si no algún otro método. (O se me acabaron las ideas, jeje).

----------

## Theasker

No me había dado cuenta que no había cambiado eso, pero da el mismo error y me dice q no puede crear el fichero

```
Respuesta:   227 Entering Passive Mode (95,61,198,67,158,201).

Comando:   STOR Prueba.txt

Estado:   Conectando a 127.0.0.1:9050...

Estado:   Conexión con el proxy establecida, realizando negociación...

Respuesta:   553 Could not create file.

Error:   Error crítico de transferencia de fichero
```

En cuanto a lo del pam si que lo estoy usando por narices, porque el usuario que uso sólo está en la base de datos de mysql y no es un usuario de sistema, por lo que si entra en el servidor ftp es que lo de los usuarios funciona.

A lo mejor tendría que asignar otro tipo de permisos a la carpeta que vaya a usar el usuario o ... ¿qué?.

Si esto tiene que ser muy común, es como un hosting, seguro que casi todo el mundo edita ficheros php o html que cuelgan del directorio /var/www/localhost/htdocs/ con un usuario normal pero yo no puedo.

----------

