vsftpd
安装
$ sudo apt update
$ sudo apt install vsftpd
配置文件配置项参考
/etc/vsftpd.conf
# /etc/vsftpd.conf
# 未测试,仅供参考。
# 默认FTP服务器端口号是21,出于安全目的,有时需修改默认端口号
listen_port=4449
# 是否允许监听。
# 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen=YES
# 设定是否支持IPV6,默认监听IPv6的所有地址可接受IPv4和IPv6的连接。如果要监听具体的地址(listen_address参数项),则必须运行两套vsftpd。此参数和listen参数是互斥的。
listen_ipv6=NO
# 设置在指定的IP地址上侦听用户的FTP请求。若不设置,则对服务器所绑定的所有IP地址进行侦听。只有在以standalone模式运行时才有效。 对于只绑定了一个IP地址的服务器,不需要配置该项,默认情况下,配置文件中没有该配置项。若服务器同时绑定了多个IP地址,则应通过该配置项,指定在哪 个IP地址上提供FTP服务,即指定FTP服务器所使用的IP地址。注意:设置此值前后,可以通过netstat -tnl对比端口的监听情况
listen_address=IP地址
# 如果设置为NO,则所有下载请求都将拒绝权限。默认值:YES
download_enable=YES
# 启用PASV模式。若设置为YES,则使用PASV工作模式;若设置为NO,使用PORT模式。默认为YES。
pasv_enable=YES|NO
# 在PASV工作方式下,数据连接可以使用的端口范围的上界。默认值为0,表示任意端口。
pasv_max_port=0
# 在PASV工作方式下,数据连接可以使用的端口范围的下界。默认值为0,表示任意端口。
pasv_mim_port=0
# 指定FTP数据传输连接使用20端口。若设置为NO,则进行数据连接时,所使用的端口由ftp_data_port指定。 默认值为YES。
connect_from_port_20=YES
# 设置PORT方式下FTP数据连接所使用的端口,默认值为20。ftp-data数据传输,21为连接控制端口。
ftp_data_port=20
# 是否允许匿名登录FTP服务器,默认设置为YES允许
anonymous_enable=NO
# 是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES
anon_upload_enable=NO
# 是否允许匿名用户创建新文件夹
anon_mkdir_write_enable=NO
# 匿名用户的根目录,默认为/var/ftp/,主配置文件中默认无此项。
anon_root=/var/ftp
# 默认值为YES只允许匿名用户下载可阅读的文件。NO允许匿名用户浏览整个服务器的文件
anon_world_readable_only=YES
# 安全沙箱目录,指向一个ftp用户无写权限的空目录,默认为/usr/share/empty。当vsftpd不需要访问文件系统时,这个目录将被作为一个安全的容器,用户将被限制在此目录中。
secure_chroot_dir=/usr/share/empty
# 虚拟用户,若是启动这项功能,所有的非匿名登入者都视为guest,默认值为NO关闭。如果要使用ftp虚拟用户需要启用
guest_enable=NO
# 定义VSFTPD的guest用户在系统中的用户名。默认值为ftp,在使用ftp虚拟用户时建议自定义,例如ftpvuser
guest_username=
# 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许。本地用户登录后会进入用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub
local_enable=YES
# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
write_enable=YES
# 定义所有本地用户的根目录。默认为空,本地用户登录到自己的宿主目录
local_root=
# 在vsftpd中,用户登录后一般是直接登录在自己的家目录下,默认的一般家目录就是/根目录,也就是最顶级的目录所在了。如果用户有chroot命令的权限,那么其就可以修改自己的家目录也就是/根目录到任何目录,所以就有了访问任何目录的权限。所以这就是安全隐患的一个问题。一般来说ftp登录的目录没有必要访问其它的任何目录,就限制在自己原来的家目录即可。如果有特别情况,其用户需要有访问其它目录的权限也可以添加。
# 直接在配置文件中添加,此方法简单又方便,所有的用户都将拥有chroot权限。
allow_writeable_chroot=YES
# 是否将所有用户限制在主目录,YES为启用 NO禁用。YES表示所有用户都没有chroot权限,都限制在自己的家目录为根目录。
chroot_local_user=YES
# chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!与chroot_list_file的设置项配合。
chroot_list_enable=YES
# 被列入此文件的用户作为例外。
chroot_list_file=/etc/vsftpd/chroot_list
# 匿名用户是否拥有除了上传和新建目录之外的其他权限,如删除、更名等。默认为NO不拥有
anon_other_write_enable=NO
# 设定是否允许改变上传文件的属主,与chown_username参数项配合使用。注意,不推荐使用root用户上传文件
chown_uploads=YES
# 设置想要改变的上传文件的属主,如果需要,则输入一个系统用户名。whoever:任何人
chown_username=whoever
# 默认情况下,VSFTPD使用二进制传输数据,禁止使用ASCII传输模式。如果FTP客户端使用ascii命令,指明要使用ASCII模式,VSFTPD表面上接受了ascii命令,但在实际传输文件时,还是使用二进制方式,就会出现乱码文件
# 是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。
# 启用此选项将允许服务器以ASCII方式传输数据
# 不过,这样可能会导致由"SIZE /big/file"方式引起的DoS攻击
ascii_upload_enable=YES
ascii_download_enable=YES
# max_client设置项 用于设置FTP服务器所允许的最大客户端连接数,值为0时表示不限制。
max_client=100
# max_per_ip设置项 用于设置对于同一IP地址允许的最大客户端连接数,值为0时表示不限制。
max_per_ip=5
# local_max_rate设置项 用于设置本地用户的最大传输速率,单位为B/s,值为0时表示不限制。
local_max_rate=500000
# anon_max_rate设置项 用于设置匿名用户的最大传输速率,单位为B/s,值为0表示不限制。
ano_max_rate=200000
# 设置建立被动(PASV)数据连接的超时时间,单位为秒,默认值为60。
accept_timeout=60
# PORT方式下建立数据连接的超时时间,单位为秒。
connect_timeout=60
# 配置空闲的用户会话的中断时间:如下配置将在用户会话空闲10分钟后被中断,以释放服务器的资源。单位s
Idle_session_timeout=600
# 配置空闲的数据连接的中断时间:如下配置将在数据空闲连接10分钟后被中断,同样也是为了释放服务器的资源。单位s
Data_connection_timeout=600
添加用户和用户
$ sudo mkdir -p /data/ftp_dir
$ sudo mkdir /data/ftp_dir/user001
$ sudo addgroup ftp_group
$ sudo userdel user001
$ sudo useradd -g ftp_group -d /data/ftp_dir/user001 -s /bin/false user001
$ sudo passwd user001
$ sudo chown user001:ftp_group /data/ftp_dir/user001
$ sudo chmod 700 /data/ftp_dir/user001
重启服务
$ sudo systemctl status vsftpd
$ sudo systemctl restart vsftpd