Mensaje de error "500 OOPS: vsftpd: se niega a ejecutar con root escribible dentro de chroot ()" - mantenga al usuario encarcelado

19

Hasta ahora no he podido mantener a un usuario FTP encarcelado en el directorio de su sitio web. ¿Hay alguna solución que corrija este error y mantenga al usuario encarcelado en su directorio?

Mi configuración de vsFTPd que cambié:

listen_port=9000
Set: anonymous_enable=NO
Uncomment: local_enable=YES
Uncomment: write_enable=YES
Uncomment: local_umask=022
Set: connect_from_port_20=NO
Uncomment: idle_session_timeout=600
Uncomment: data_connection_timeout=120
Comment out: #ftpd_banner=Welcome to blah FTP service. [should be on line 104]
Added: banner_file=/etc/issue.net
Uncomment: chroot_local_user=YES
Uncomment: chroot_local_user=YES
Uncomment: chroot_list_enable=YES
Uncomment : chroot_list_file=/etc/vsftpd.chroot_list

Al final del archivo agregué:

# Show hidden files and the "." and ".." folders.
# Useful to not write over hidden files:
force_dot_files=YES

# Hide the info about the owner (user and group) of the files.
hide_ids=YES

# Connection limit for each IP address:
max_per_ip=10

# Maximum number of clients:
max_clients=5

# FTP Passive Settings
pasv_enable=YES
#If your listen_port is 9000 set this range to 7500 and 8500
pasv_min_port=[port range min]
pasv_max_port=[port range max]

El usuario en cuestión, mybloguserestá encarcelado en el directorio de su sitio web /srv/www/myblogy este usuario no forma parte del nano /etc/vsftpd.chroot_listarchivo. El directorio de inicio del usuario también es el /srv/www/myblogque solía funcionar en el pasado.

allow_writeable_chroot=YESProbé la solución que no funcionó, y en realidad rompí vsFTPd por completo.

Yo he tratado:

¿Cómo podemos solucionar este error y mantener al usuario encarcelado en su directorio personal?

Chris Hough
fuente
De alguna manera, para mí, al menos con usuarios de ftp "virtuales", basta con agregar la configuración allow_writeable_chroot=YESy realmente funcionó "como se esperaba" FWIW ...
rogerdpack

Respuestas:

18

Para VSFTPD 3,

  1. Ir: /etc/vsftpd.conf
  2. y agrega esto:

    allow_writeable_chroot=YES
    

    Simplemente agréguelo si aún no existe.

  3. Reinicie el servicio vsftpd:

    service vsftpd restart
    

Y debería funcionar.

Carlos Sura
fuente
3
El interrogador en realidad afirma que ya lo intentó y no funcionó, por lo que esta no es una respuesta a su pregunta.
Requist
2
¿Dónde puedo leer sobre las implicaciones de seguridad de esta elección?
flickerfly
funcionó para mí (esto también fue mencionado en el comentario de la respuesta aceptada)
Sverre
16

La solución real de este problema: la carpeta de inicio del usuario no debe poder escribirse solo legible.

Entonces, si el sitio del usuario está en la carpeta cat/example.com/http/, la carpeta catdebe tener chmod 555y todo estará bien.

nikita
fuente
12
Eso no tiene sentido. ¿El directorio del usuario no debe poder escribirse?
Kevin Bowen
66
¿Cómo exactamente se supone que el usuario CARGARÁ archivos si no puede escribir?
Cerin
Funciona bien para un ftp anónimo sin derechos de carga, ¡gracias!
palacsint
¡Derecha! ahora está bien
user1406691
55
Esto funciona perfectamente! Simplemente cree un hogar para el usuario con chmod 555 y luego, dentro de eso, cree un hogar para el sitio web (o sitios web), con chmod 755 o el que necesita: todo funcionará y el usuario tendrá permisos de escritura.
lucaferrario
13

Después de una revisión adicional de esta publicación, en los comentarios se publicó un paquete que solucionó mi problema. Puede buscarlo por mi nombre o por "Marcas" Documentación: http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ . Aquí están mis detalles de cómo arreglé esto aún más.

¡LOS USUARIOS TODAVÍA ESTÁN ENCARCELADOS A SUS DIRECTORIOS DE INICIO!

# ------------------------------------------------------------------------------
# SETUP FTP USERS --------------------------------------------------------------
# ------------------------------------------------------------------------------

# create the ftp users and lock them to the website directories
useradd -d /srv/www/[website/appname] -m [ftp user name]

# set the ftp account passwords
passwd [ftp user name]

# add the ftp users to the www-data user/group
adduser [ftp user name] www-data

# BUG FIX: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
sudo add-apt-repository ppa:thefrontiergroup/vsftpd
sudo apt-get update
sudo apt-get install vsftpd

# Edit the vsftpd.conf and append this setting to the end of the file to keep users' jailed!
nano /etc/vsftpd.conf

# add all of the text between the starting [[ and ending ]]
# [[

# Keep non-chroot listed users jailed
allow_writeable_chroot=YES

# ]]

# restart the service for changes to take effect
sudo service vsftpd restart

#test ftp via secondary terminal window:
ftp [ftp user name]@[server ipaddress] [ftp port]
Chris Hough
fuente
11
Tenga en cuenta: ¡ La solución de Chris agregará un servidor de paquetes de terceros a su lista de repositorios! ¿Por qué instalar un servidor FTP seguro y chrooteado cuando acepta ciegamente instalar paquetes de software extranjeros en su sistema? (Chris: No creo que se aproveche, pero usar esta solución en mi humilde opinión es una mala administración)
reto
1
¿Tiene un mejor enfoque para resolver este dilema @reto? Ha sido un pequeño desastre para resolver. Gracias por tu ayuda.
Chris Hough
si hay un paquete actualizado de la distribución, trataría de usarlo. La mayoría de las distribuciones proporcionan backports para versiones anteriores. Si eso no fuera posible, obtendría la fuente del desarrollador original y la construiría yo mismo. Si hay un parche flotando, podría aplicarlo (generalmente son pequeños y se pueden verificar manualmente).
reto
Este hilo tiene 12,000 vistas, supongamos que el 5% usa su solución y agrega su repositorio. Puede agregar fácilmente una nueva versión de un paquete principal con una puerta trasera integrada. En una semana podría tener acceso a 600 sistemas. No creo que haga eso, pero agregar repositorio de terceros no es muy seguro.
reto
1
No necesitaba actualizar desde el repositorio. Para mí, agregar la línea "allow_writeable_chroot = YES" solucionó el error
abumalick
7

De acuerdo con la respuesta anterior "La solución REAL de este problema: la carpeta de inicio del usuario no debe ser de solo lectura de escritura". El pensamiento general es correcto, pero con una realización errónea.

A continuación intentaré dar un ejemplo simple:

Para empezar, necesitamos construir una topología del directorio de usuarios:

 / home (ro)
   | -alguien (rw, 700)
         | -ftp_upload (ro, 555) - ch_rooting aquí, requerido solo lectura por vsftpd :(
           | -temp (rw, 755)
           | -in_box (rw, 755)
           | -out_box (rw, 755)

vsftpd.conf corte:

# Habilitar chrooting
chroot_local_user = YES

# chroot todos los usuarios excepto escuchados dentro de chroot_list
chroot_list_enable = YES

# Lista de excepciones. Idealmente, debería estar en blanco;)
chroot_list_file = / etc / vsftpd / chroot_list

# Asigna el directorio raíz ftp a un directorio específico
raíz_local = / home / someuser / ftp

Esta configuración funciona muy bien con una configuración de usuario único . Para usuarios múltiples, la directiva "user_config_dir" debe usarse adicionalmente.

** ACTUALIZACIÓN 20/09

------ **

Aquí hay una solución difícil, no es la mejor idea para usar, pero ... Si necesita una carpeta raíz de ftp grabable, simplemente inserte los comandos de cambio de permiso en los comandos pre-start y post-start.

  1. Preinicio: cambie los permisos a solo lectura, que requiere el servidor (:

  2. Iniciar servidor

  3. Post-inicio: cambie el permiso de lectura-escritura, o el que necesite.

Reishin
fuente
Intenté muchas variaciones pero no pude hacerlo funcionar para un servidor WP. ¿Funciona esto en una configuración de WP?
Chris Hough
mira para actualizar la sección, mauby esta variante puede ayudarte, no es completamente seguro hacerlo, pero si no hay otras posibilidades ...
Reishin
1

Es más o menos lo que toastboy70 mencionó. Haga que el directorio raíz de ftp se muestre en ftp.ftp y no se pueda escribir (/etc/vsftpd.conf): anon_root = / srv / ftp

Luego, haga un directorio secundario de escritura: / srv / ftp / upload

AsifHaswarey
fuente
0

También necesitaba agregar lo siguiente al archivo /etc/vsftpd.conf:

seccomp_sandbox=NO

¡Y no es necesario el repositorio personalizado!

Y descomenta la línea:

write_enable=YES
MuffinMan
fuente
0

La solución simple es hacer lo que sugiere el mensaje de error: haga que la raíz no se pueda escribir y luego, si necesita habilitar las cargas, cree un subdirectorio que tenga permiso de escritura. No se necesitan cambios de configuración.

toastboy70
fuente
0

Después de 3 horas de búsqueda en Google, me puse a trabajar en Ubuntu 14.04.2 LTS VSFTPd 3. La carpeta de inicio será visible / home / vimal una vez que se acceda con un cliente. He iniciado sesión con vimal con privilegio de root. Tengo la carpeta ftpShare creada, pero no tiene mucho significado.

sudo chown vimal:vimal /home/vimal/ftpShare/

algunos comandos útiles:

sudo nano /etc/vsftpd.conf
sudo service vsftpd restart
sudo apt-get purge vsftpd
netstat -a | grep ftp
tcp        0        0        *:ftp         *:*        LISTEN
ftp://12.345.23.xxx/  for browser login

Arriba significa que el demonio ftp está funcionando

Tengo la siguiente configuración:

seccomp_sandbox=no
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
chroot_list_enable=NO
secure_chroot_dir=/var/run/vsftpd/empty
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
allow_writeable_chroot=YES

Una vez que FTP funciona, puede ajustarlo aún más a necesidades específicas, algunas de las anteriores tienen valores predeterminados, pero no recuerdo exactamente.

Errores vistos en el Cliente FTP:

1. 500 OOPS: prctl PR_SET_SECCOMP falló

Solución.

seccomp_sandbox=no    

[agréguelo en la primera línea vsftpd.conf, después de que finalice la sección comentada inicial]

2. 500 OOPS: vsftpd: se niega a ejecutar con raíz de escritura dentro de chroot ()

allow_writeable_chroot=YES

Lo agregué en la última línea.

vimal krishna
fuente
0

Resolví el problema de que vsFTPd se negara a ejecutar con una raíz grabable dentro de chroot () en mi servidor Ubuntu de la siguiente manera:

Acabo de agregar la siguiente línea en el vsftpd.confarchivo:

allow_writeable_chroot=YES
Somnath Das
fuente