vsftpd 是"very secure FTP daemon"的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用。
在开源操作系统中常用的FTPD套件主要还有ProFTPD、PureFTPd和wuftpd等[360百科]
准备
- 安装ftp服务器。
目前Linux上使用较多的ftp服务器是vsftpd。所以,我们需要先安装vsftpd软件。在Ubuntu上安装vsftpd,使用的命令是
sudo apt-get update #不一定非要写这条命令
sudo apt-get install vsftpd
我使用的Ubuntu版本为18.10,vsftpd为3.0.3-11版本,个人觉得ubuntu的版本对vsftpd的设置影响不大。
FTP服务器配置
ftp配置是很有学问的,必须要强调的是如果你的ftp服务无法启动,十有八九就是配置文件的配置错误。
配置参考如下:
#去掉下面语句的注释
write_enable=YES
local_umask=022
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
utf8_filesystem=YES
#将vsftpd修改成ftp
pam_service_name=ftp #ubuntu用户需要更改成ftp
#添加下列语句在vsftpd.conf
allow_writeable_chroot=YES
local_root=/home/xingyu/Documents/ftpdirs #此处设置一个想让用户访问的主目录
# 下面几句话不是必须的,不过我觉得设置了更好,因为这样可以登录的用户全都在自己可控的范围内。
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd.userlist #文件名是任意的,只要不和etc下的文件重名就行
max_clients=500 #最大客户端连接数
max_per_ip=3 #同一ip的最大连接数
上面的配置文件中,我不是很熟悉,我挑一些我稍微知道的讲。
- listen=NO 配置文件中说以独立模式运行。不过不太了解,我查看了很多博客,有设置为YES,也有设置为NO的。我没有做改动,不影响后来的登陆与上传。
- anonymous_enable=NO 拒绝匿名登陆,设置为YES允许匿名登陆,但是还要设置配置文件中的其他参数才能工作。我暂时不想设置匿名登陆,所以没有修改
- write_enable=YES 设置可以上传文件,这个设置看需要个人需要
- xferlog_enable=YES 开启日志记录
- xferlog_file=/var/log/vsftpd.log 设置日志文件路径
- xferlog_std_format=YES 设置日志格式为标准输出
- connect_from_port_20=YES 绑定20端口
- ftpd_banner=Welcome to FTP service. 欢迎语句,在使用shell时可以看到
- local_umask 新建文件或文件夹时的掩码
- allow_writeable_chroot vsftpd 3版本一下当设置了chroot_local_user后需要设置,否则将无法登陆FTP
下面这几个的设置比较重要:
- chroot_local_user=YES
- chroot_list_enable=YES
- chroot_list_file=/etc/vsftpd.chroot_list
上面的这几个配置实现的功能是:用户被限制在自己的主目录下。用户名单来源于/etc/vsftpd.chroot_list。 个人认为设置一个可以访问主目录的上级目录的用户就可以了,其他用户全部都只能访问规定的主目录。这样的话在/etc/vsftpd.chroot_list 中添加上用户,例如我添加的是ftpuser,那么只有ftpuser可以访问ftpdirs的上级目录Documents(以我自己的为例子),其他用户均不可以。
具体可以参考:http://blog.csdn.net/bluishglc/article/details/42398811
userlist_enable和userlist_deny的组合效果可以参考下表:
userlist_enable=YES | userlist_enable=NO | |
---|---|---|
userlist_deny=YES | 1.vsftpd 将会从所给的用户列表中加载用户名字列表 2.使用userlist_file指定的用户列表,这些用户不允许登录FTP | 1.vsftpd 将不会从所给的用户列表中加载用户名字列表 2.userlist_deny和userlist_file设置无效 |
userlist_deny=NO | 1.vsftpd 将会从所给的用户列表中加载用户名字列表 2.使用userlist_file指定的用户列表,只有这些用户允许登录FTP | 1.vsftpd 将不会从所给的用户列表中加载用户名字列表 2.userlist_deny和userlist_file设置无效 |
一个重要的配置
pam_service_name=ftp原配置中为vsftpd,ubuntu用户需要更改成ftp
关于编码:
utf8_filesystem=YES
不知道这项有没有起作用,上传的文件不乱码,用浏览器打开是乱码(浏览器编码问题?),使用windows自带的文件资源管理器是没有乱码的,使用filezila乱码。
创建用户:
因为我想创建一个只用于登陆FTP的用户,所以我创建一个FTP用户ftpuser,ftpuser的主目录为Documents下面的ftpdirs,并设置为不具有登陆系统的权限,ftpuser所属的用户组为默认的ftpuser组,-M代表不自动创建家目录。
创建好用户之后最好立刻就设置好密码,否则后期更改密码必须切换到root用户(su - root)才可以修改密码
修改密码的命令为"sudo passwd 想要修改密码的用户名",例如sudo passwd ftpuser
后期再创建的FTP用户我就会设置为全部属于ftpuser组,例如
我添加两个用户ftpuser1和ftpuser2,并指定两个用户所属的组为ftpuser。
重要的一点:
新建/etc/vsftpd.chroot_list将ftpuser放进去
启动vsftpd或者重启
重启或是启动vsftpd服务的命令有如下三种方式
命令 | 方法1 | 方法2 | 方法3 |
---|---|---|---|
启动vsftpd | sudo service vsftpd start | sudo systemctl start vsftpd | sudo /etc/init.d/vsftpd start |
重启vsftpd | sudo service vsftpd restart | sudo systemctl restart vsftpd | sudo /etc/init.d/vsftpd restart |
停止vsftpd | sudo service vsftpd stop | sudo systemctl stop vsftpd | sudo /etc/init.d/vsftpd stop |
尝试访问FTP
- Ubuntu中访问
- windows访问ftp
使用windows浏览器访问FTP服务器界面我觉得太low了,所以我使用了Xftp6来访问FTP服务器
打开Xftp后,新建会话如下图所示。
登录成功后显示如下界面
左边就是windows中文件了,右边是FTP服务器中的目录,上传文件直接拖拽文件就可以啦。
文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步