问题描述
到目前为止,我无法将 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。
我试过了:
-
Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
-
Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot() on vsftpd
我们如何才能既修复此错误又将用户限制在他们的主目录中?
最佳回答
对于 VSFTPD 3,
-
转到:
/etc/vsftpd.conf
-
并添加:
\n
allow_writeable_chroot=YES\n
\n
如果它尚不存在,只需添加它。
-
重启vsftpd服务:
\n
service vsftpd restart\n
它应该有效。
次佳回答
这个问题的真正解决方案:用户的主文件夹不应该是可写的,只能是可读的。
因此,如果用户站点位于文件夹 cat/example.com/http/
中,则文件夹 cat
必须具有 chmod 555
并且一切正常。
第三种回答
在进一步审查这篇文章后,在评论中发布了一个包来解决我的问题。您可以通过我的名字或 “Marks” 文档: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]
第四种回答
根据之前的回答“这个问题的真正解决方案:用户的主文件夹不应该是可写的,只能是可读的。”。一般的想法是对的,但认识是错误的。
下面我将尝试举一个简单的例子:
首先,我们需要构建用户目录的拓扑结构:
/home (ro)
|-someuser (rw,700)
|-ftp_upload (ro,555) - ch_rooting here, required read-only by vsftpd :(
|-temp (rw,755)
|-in_box (rw,755)
|-out_box (rw,755)
vsftpd.conf 剪切:
# Enable chrooting
chroot_local_user=YES
# chroot all users except listened inside chroot_list
chroot_list_enable=YES
# Exception list. Ideally, it should be blank ;)
chroot_list_file=/etc/vsftpd/chroot_list
# Map ftp root directory to specific directory
local_root=/home/someuser/ftp
此配置适用于 single-user 配置。对于 multi-user,应额外使用 “user_config_dir” 指令。
**更新 20/09
——**
这是棘手的解决方法,不是最好的使用方法,但是….\n如果您需要可写的 ftp 根文件夹,只需在预启动和 post-start 命令中插入权限更改命令。
-
预启动 – 将服务器所需的权限更改为只读(:
-
启动服务器
-
Post-start – 更改读写权限或您需要的权限。
第五种回答
这几乎就是 toastboy70 提到的内容。将 ftp-root 目录更改为 ftp.ftp 且不可写 (/etc/vsftpd.conf):\nanon_root=/srv/ftp
然后制作一个可写的子目录:/srv/ftp/upload