前言
这里以树莓派4B+官方系统为例,建议开启树莓派root,这样可以设置成开机自启动。
安装过程
安装 vsftpd
apt install vsftpd
运行 vsftpd
systemctl start vsftpd.service
运行以下命令查看 FTP 服务监听的端口。
pi@qing:/etc $ netstat -antup | grep ftp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
pi@qing:/etc $ sudo netstat -antup | grep ftp
tcp6 0 0 :::21 :::* LISTEN 443/vsftpd
本地用户登录是指用户使用 Linux 操作系统的账号和密码登录 FTP 服务器。
树莓派本身就有用户Pi,可以直接用来登陆,当然也可以重新创建一个。
1.运行以下命令为FTP服务创建一个Linux用户。
sudo useradd ftptest
2.运行以下命令修改ftptest 用户的密码。
sudo passwd ftptest
3.运行以下命令创建一个供FTP服务使用的文件目录。
sudo mkdir /srv/ftp/ ftptest 或者sudo mkdir /srv/ftp/pi
4.运行以下命令更改/srv/ftp/ ftptest目录的拥有者为 ftptest。
sudo chown -R ftptest: ftptest /srv/ftp/ftptest 或者 sudo chown -R pi:pi /srv/ftp/pi
这里的/srv/ftp/pi就是普通用户登陆后的根目录。
5.修改vim /etc/vsftpd.conf配置文件。
谨慎起见,先备份。
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
vim /etc/vsftpd.conf
配置参数如下:
#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#设置本地用户登录后所在的目录
local_root=/srv/ftp/pi
#写权限
write_enable=YES
#全部用户被限制在主目录
chroot_local_user=YES
#启用例外用户名单
chroot_list_enable=YES
#指定例外用户列表,这些用户不被锁定在主目录
chroot_list_file=/etc/chroot_list#主目录可写权限allow_writeable_chroot=YES
#配置其他参数
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
6、touch /etc/chroot_list命令创建chroot_list文件,并写入不受只可以访问其主目录限制的例外用户名
注意:如果没有例外用户也必须要有 chroot_list文件,内容可为空
vsftpd.conf 的配置文件参数说明
用户登录控制:
参数 | 说明 |
---|---|
anonymous_enable=YES | 接受匿名用户 |
no_anon_password=YES | 匿名用户login时不询问口令 |
anon_root=(none) | 匿名用户主目录 |
local_enable=YES | 接受本地用户 |
local_root=(none) | 本地用户主目录 |
用户权限控制:
参数 | 说明 |
---|---|
write_enable=YES | 可以上传(全局控制) |
local_umask=022 | 本地用户上传文件的umask |
file_open_mode=0666 | 上传文件的权限配合umask使用 |
anon_upload_enable=NO | 匿名用户可以上传 |
anon_mkdir_write_enable=NO | 匿名用户可以建目录 |
anon_other_write_enable=NO | 匿名用户修改删除 |
chown_username=lightwiter | 匿名上传文件所属用户名 |
测试
filezilla工具是一款不错的开源工具,这里仅仅使用浏览器测试,在浏览器中输入ftp://+树莓派ip
输入密码后登陆。
后言
FTP服务器可以配置为主动模式或被动模式。
FTP两种模式的区别:
(1)PORT(主动)模式
所谓主动模式,指的是FTP服务器“主动”去连接客户端的数据端口来传输数据,其过程具体来说就是:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口(即tcp 21端口),紧接着客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。然后服务器会从它自己的数据端口(20)“主动”连接到客户端指定的数据端口(N+1),这样客户端就可以和ftp服务器建立数据传输通道了。
(2)PASV(被动)模式
所谓被动模式,指的是FTP服务器“被动”等待客户端来连接自己的数据端口,其过程具体是:当开启一个FTP连接时,客户端打开两个任意的非特权本地端口(N >1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。(注意此模式下的FTP服务器不需要开启tcp 20端口了)
两种模式的比较:
(1)PORT(主动)模式模式只要开启服务器的21和20端口,而PASV(被动)模式需要开启服务器大于1024所有tcp端口和21端口。
(2)从网络安全的角度来看的话似乎ftp PORT模式更安全,而ftp PASV更不安全,那么为什么RFC要在ftp PORT基础再制定一个ftp PASV模式呢?其实RFC制定ftp PASV模式的主要目的是为了数据传输安全角度出发的,因为ftp port使用固定20端口进行传输数据,那么作为黑客很容使用sniffer等探嗅器抓取ftp数据,这样一来通过ftp PORT模式传输数据很容易被黑客窃取,因此使用PASV方式来架设ftp server是最安全绝佳方案。
事实上,vsftp默认支持被动模式。