打开配置文件sudo vim /etc/vsftpd.conf,如下修改
#禁止匿名访问 anonymous_enable=NO #接受本地用户 local_enable=YES #允许上传 write_enable=YES #用户只能访问限制的目录 chroot_local_user=YES #设置固定目录,在结尾添加。如果不添加这一行,各用户对应自己的目录(用户家目录),当然这个文件夹自己建 local_root=/home/ftp #如果使用主动模式,下面几行可以不配置 #使用被动模式 pasv_enable=YES #端口设置 pasv_min_port=1024 pasv_max_port=1048 pasv_address=你的访问IP(服务器外网IP)这里补充一个知识点关于主动模式和被动模式,FTP是基于TCP的服务,使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。
主动模式:数据连接上,服务端从20端口去连接客户端大于1024的端口
命令连接:客户端 (>1024端口) -> 服务器 21端口
数据连接:客户端 (>1024端口) <- 服务器 20端口
优势:主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。
被动模式:数据连接上,客户端从大于1024端口去连接服务端大于1024的端口
命令连接:客户端 (>1024端口) -> 服务器 21端
数据连接:客户端 (>1024端口) -> 服务器 (>1024端口)
优势:被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
3.为ftp服务器新建ftp用户并新建ftp根目录新建用户,专门用于登录ftp服务器进行操作,并且新建配置文件中指定的ftp根目录,这里就有很多BUG了。
建立ftp根目录
mkdir /home/ftp建立新用户和密码
sudo useradd -d /home/ftp -M ftptest sudo passwd ftptest满怀信心地测试一下,利用命令行连接一下,结果出现==530 login incorrect==错误,解决方式如下:
sudo vim /etc/pam.d/vsftpd注释掉
#auth required pam_shells.so然后sudo service vsftpd restart重启服务生效.
原因:
这是因为启用了这个模块,只有带有shell的用户才能访问,什么是带有shell呢?你可以看一下\etc\shells文件,这里列出的就是可用的shell列表,然后你再执行一下cat \etc\passwd,最后一行你可以看到你新添加的用户,比���一下你可以看到新用户没有指定shell,因此不带有shell,就被这个生效的模块发好人卡了。
于是再次ftp连接一下,wtf,结果出现==500 OOPS: vsftpd: refusing to run with writable root inside chroot()==,解决方式:
sudo chmod a-w /home/ftp sudo mkdir /home/ftp/data原因:这是因为vsftpd的chroot不允许根目录具有可写权限,ftp根目录下的目录可以有写权限,所以就只能这么解决。
连接成功进入可以看到data目录,并且你只能看到/home/ftp下的内容,你发现你所在的根目录就是它,不可能跳到其他目录去,很安全
4.利用vsftpd的chroot但其实我们想让一些用户(如管理员级别的)可以访问所有目录,限制另外的只能访问ftp根目录(如其他一般用户),那么我们就需要vsftpd的chroot功能。