Сообщение об ошибке «500 OOPS: vsftpd: отказ от запуска с доступным для записи корнем внутри chroot ()» - держать пользователя в тюрьме


19

До сих пор я не мог держать пользователя FTP в тюрьме в каталоге их сайта. Есть ли решение, которое исправляет эту ошибку и удерживает пользователя в тюрьме?

Мои настройки vsFTPd, которые я изменил:

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

В конце файла я добавил:

# 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]

Пользователь, о котором идет речь, mybloguserзаключен в каталог своего веб-сайта, /srv/www/myblogи этот пользователь не является частью nano /etc/vsftpd.chroot_listфайла. Домашний каталог пользователя также /srv/www/myblogиспользуется в прошлом.

Я попытался allow_writeable_chroot=YESрешение, которое не сработало, и фактически сломал vsFTPd полностью.

Я пытался:

Как мы можем исправить эту ошибку и оставить пользователя в тюрьме в своем домашнем каталоге?


Каким-то образом, для меня, по крайней мере с «виртуальными» пользователями ftp, достаточно просто добавить настройку allow_writeable_chroot=YESи работать «как положено» FWIW ...
rogerdpack

Ответы:


18

Для ВСФТПД 3,

  1. Перейти к: /etc/vsftpd.conf
  2. и добавьте это:

    allow_writeable_chroot=YES
    

    Просто добавьте его, если он еще не существует.

  3. Перезапустите службу vsftpd:

    service vsftpd restart
    

И это должно работать.


3
Спрашивающий фактически заявляет, что он уже попробовал это, и это не сработало, так что это не ответ на его вопрос.
Реквист

2
Где я могу прочитать о последствиях безопасности для этого выбора?
flickerfly

работал для меня (это было также упомянуто в комментарии принятого ответа)
Сверре

16

Реальное решение этой проблемы: домашняя папка пользователя не должна быть доступна для чтения только для чтения.

Итак, если пользовательский сайт находится в папке cat/example.com/http/, папка catдолжна быть chmod 555и все будет в порядке.


12
Это бессмысленно. Каталог пользователя не должен быть доступным для записи ???
Кевин Боуэн

6
Как именно пользователь должен загружать файлы, если они не могут писать ?!
Cerin

Это работает хорошо для анонимного ftp без прав загрузки, спасибо!
Palacsint

право! теперь все нормально
user1406691

5
Это работает отлично! Просто создайте дом для пользователя с помощью chmod 555, а затем внутри него создайте дом для веб-сайта (или веб-сайтов) с помощью chmod 755 или того, который вам нужен: все будет работать, и у пользователя будут права на запись.
Lucaferrario

13

После дальнейшего просмотра этого поста в комментариях был размещен пакет, который исправил мою проблему. Вы можете искать его либо по моему имени, либо по документу "Марки": http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ . Вот мои детали того, как я исправил это дальше.

ПОЛЬЗОВАТЕЛИ ВСЕГДА ЗАВЕРШИЛИСЬ В ИХ ДОМАШНИЕ КАТАЛОГИ !!!

# ------------------------------------------------------------------------------
# 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]

11
Обратите внимание: решение Chris добавит сторонний пакетный сервер в ваш список репозиториев! Зачем устанавливать безопасный FTP-сервер с поддержкой chroot, если вы слепо принимаете иностранные пакеты программного обеспечения для установки в вашей системе. (Крис: я не думаю, что вы воспользуетесь преимуществом, но использование этого решения ИМХО является плохим сисадмином)
reto

1
у вас есть лучший подход к решению этой дилеммы @reto? Это был небольшой беспорядок, чтобы решить. Спасибо за помощь.
Крис Хо

если есть обновленный пакет из дистрибутива, я бы попытался использовать это. Большинство дистрибутивов предоставляют бэкпорты для старых версий. Если это невозможно, я получу исходный код от разработчика и соберу его сам. Если есть плавающий патч, я мог бы применить его (обычно они маленькие и их можно проверить вручную).
до

Эта тема имеет 12 000 просмотров, давайте предположим, что 5% используют ваше решение и добавили репо. Вы можете легко добавить новую версию базового пакета с интегрированным бэкдором. В течение недели вы можете получить доступ к 600 системам. Я не думаю, что вы сделали бы это, но добавление стороннего репо просто не очень безопасно.
Reto

1
Мне не нужно обновляться из репо. Для меня добавление строки "allow_writeable_chroot = YES" исправило ошибку
abumalick

7

Согласно предыдущему ответу «РЕАЛЬНОЕ решение этой проблемы: домашняя папка пользователя не должна быть доступна для чтения только для чтения». Общее мышление правильно, но с неправильной реализацией.

Ниже я попытаюсь привести простой пример:

Для начала нам нужно построить топологию пользовательского каталога:

 / дом (ро)
   | -Someuser (RW, 700)
         | -ftp_upload (ro, 555) - здесь ch_rooting, требуется только для чтения vsftpd :(
           | -temp (RW, 755)
           | -in_box (RW, 755)
           | -out_box (RW, 755)

vsftpd.conf cut:

# Включить хроматирование
chroot_local_user = ДА

# chroot все пользователи, кроме прослушиваемых внутри chroot_list
chroot_list_enable = ДА

# Список исключений. В идеале оно должно быть пустым;)
chroot_list_file = / и т.д. / Vsftpd / chroot_list

# Сопоставить корневой каталог ftp с конкретным каталогом
local_root = / дом / someuser / FTP

Эта конфигурация прекрасно работает с однопользовательской конфигурацией. Для многопользовательских, директива user_config_dir должна использоваться дополнительно.

** ОБНОВЛЕНИЕ 20/09

------ **

Вот хитрый обходной путь, не лучшая идея для использования, но .... Если вам нужна корневая папка ftp с возможностью записи, просто вставьте команды изменения разрешения в команды pre-start и post-start.

  1. Предварительный запуск - измените права доступа только для чтения, которые требуются серверу (:

  2. Запустить сервер

  3. Post-start - поменяйте разрешение на чтение-запись или что вам нужно.


Я перепробовал много вариантов, но не смог заставить его работать на WP-сервере. Это работает для вас в конфигурации WP?
Крис Хо

Посмотрите, чтобы обновить раздел, mauby этот вариант может помочь вам, это не совсем безопасно, но если нет других возможностей ...
Reishin

1

Это в значительной степени то, что упоминал toastboy70. Сделайте ftp-root dir chown'd для ftp.ftp и недоступным для записи (/etc/vsftpd.conf): anon_root = / srv / ftp

Затем создайте доступный для записи дочерний каталог: / srv / ftp / upload


0

Мне нужно было также добавить следующее в файл /etc/vsftpd.conf:

seccomp_sandbox=NO

И нет необходимости в обычном репо!

И раскомментируйте строку:

write_enable=YES

0

Простое исправление заключается в том, чтобы сделать, как подсказывает сообщение об ошибке: сделать корень недоступным для записи, а затем, если вам нужно разрешить загрузку, создать подкаталог, у которого есть разрешение на запись. Никаких изменений конфигурации не требуется.


0

После 3 часов поисков я попал на Ubuntu 14.04.2 LTS VSFTPd 3 работает. Домашняя папка будет видна / home / vimal после доступа с клиентом. Я вошел в систему с Vimal с привилегиями root. У меня есть папка ftpShare, но она не имеет большого значения.

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

некоторые полезные команды:

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

Выше означает, что демон ftp работает

У меня есть следующая конфигурация:

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

После того, как FTP заработает, вы можете настроить его под конкретные нужды, некоторые из перечисленных выше имеют значения по умолчанию, но я точно не помню.

Ошибки, видимые в FTP-клиенте:

1. 500 OOPS: prctl PR_SET_SECCOMP не удалось

Решение.

seccomp_sandbox=no    

[добавьте его в самой первой строке vsftpd.conf, после того, как начальный раздел комментариев закончится]

2. 500 OOPS: vsftpd: отказ от запуска с правами на запись в root ()

allow_writeable_chroot=YES

Я добавил это в последней строке.


0

Я решил проблему vsFTPd, отказывающегося работать с доступным для записи корнем внутри chroot () на моем сервере Ubuntu следующим образом:

Я просто добавил следующую строку в vsftpd.confфайл:

allow_writeable_chroot=YES
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.