需求:创建一个ftp服务器,登录账号访问指定目录,不允许匿名访问,
环境:centos7.8
软件:vsftpd (从iso安装即可)
好久没有配置过了。网上找个文档配置,发现很多很多都是不能用的,或者只是有个参数解释(是否成功全靠自己发挥和测试),以下我将配置和测试好的方法记录,如下:
开始了~~~~~~~~~~~~~~~~~~~
软件安装就不说了,这个自己发挥吧。
首先我要创建一个ftpuser的账号,指定这个账号ftp访问到/ftpdata目录
useradd –M –d /ftpdata –s /bin/bash ftpuser
设置密码:echo 123456 | passwd ftpuser --stdin
# 创建ftp数据目录
mkdir /ftpdata
# 授权,否则ftpuser账号无权限
chown ftpuser:ftpuser /ftpdata/
注意:本地账号登录模式,创建的账号必须是/bin/bash模式,否则无法登录。(这个要注意,经过测试使用/sbin/nologin不好用)
接下来重点到了,配置vsftpd.conf的配置文件
首先我们要了解一下ftp分主动模式和被动模式2种
主动模式:客户端与服务器端的21端口建立连接,然后客户端会发送随机端口n(n>1024)到服务器端作为数据传输端口,然后服务器端会使用20端口主动连接客户端的数据端口,进行数据传输。(注意,是服务器端主动发起连接客户端的随机端口,如果客户端有防火墙,可能会出问题)
vsftpd.conf中的配置为:
Pasv_enable = no
被动模式:客户端与服务器端的21端口建立连接,然后服务器端会返回n(n>1024)端口到客户端作为数据传输端口,客户端接收到后,主动发起到服务器端的n数据端口进行数据传输。
配置为:
Pasv_enable = yes
限定端口范围:
Pasv_min_port=30000
Pasv_max_port = 30999
vsftpd.conf配置文件内容:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
chown_username=ftpuser
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
chroot_local_user=NO
chroot_list_enable=NO
local_root=/opt/ftpdata
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
allow_writeable_chroot=YES
use_localtime=YES
pasv_enable=YES
pasv_min_port=30060
pasv_max_port=30090
以上参数对应解释:
#关闭匿名访问
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 登录用户具有写权限
write_enable=YES
# 新增文件默认umask:666-022=644(权限)
local_umask=022
# 启用日志
xferlog_enable=YES
# 上传文件默认用户
chown_username=ftpuser
# 日志
xferlog_file=/var/log/xferlog
# 日志格式
xferlog_std_format=YES
# 锁定chroot_list列表用户不允许切换到上级目录,只在指定根目录下
chroot_local_user=NO
# 指定登录账号访问的根目录
local_root=/opt/ftpdatau
# 启用chroot_list_file配置项指定的用户列表文件
chroot_list_enable=NO
#chroot_list_file=/etc/vsftpd/chroot_list
listen=NO
listen_ipv6=YES
# 使用默认pam认证账号
pam_service_name=vsftpd
# 启用黑白名单,
userlist_enable=YES
# 只允许在user_list中的用户可以登录,在VSFTP启动时依然会去检查#/etc/vsftpd/ftpusers文件并且禁止该文件中的用户登录
userlist_deny=NO
#开启tcp_wrappers支持
tcp_wrappers=YES
# 运行账号登录具有写权限
allow_writeable_chroot=YES
#使用本地系统时间
use_localtime=YES
# 被动模式
pasv_enable=YES
# 被动模式开启的数据传输口
# 被动模式最小端口号30060
pasv_min_port=30060
# 被动模式最大端口号30090
pasv_max_port=30090
#空闲连接超时
idle_session_timeout=600
#数据传输超时
data_connection_timeout=120
#PAVS请求超时
ACCEPT_TIMEOUT=60
#可接受的最大client数目
max_clients=100
#本地用户的传输比率(b/s)
#local_max_rate=5120000
配置完成后。要重启服务
systemctl restart vsftpd
最后,最后,最重要的来了:
/etc/vsftpd目录文件说明:
/etc/vsftpd/ftpusers 控制登陆系统用户的机制,出现在该文件中的用户不允许使用ftp服务器
/etc/logrotate.d/vsftpd 滚动日志配置文件
/etc/vsftpd/user_list 配合/etc/vsftpd/vsftpd.conf中的userlist_enable=YES和userlist_deny=YES|NO实现黑白名单此处需要注意的是:黑白名单的前提是/etc/vsftpd/vsftpd.conf配置文件中userlist_enable=YES,userlist_deny选项默认为YES(黑名单),即该文件中出现的用户不允许登陆VSFTP,就算手动添加userlist_deny=NO(白名单)即只允许该文件中出现的用户允许登陆VSFTP,在VSFTP启动时依然会去检查/etc/vsftpd/ftpusers文件并且禁止该文件中的用户登录
/etc/vsftpd/vsftpd.conf VSFTP主配置文件,所有的配置选项必须顶格写,配置文件中#后带空格的是说明,不带空格的是注释掉的配置选项
修改如下:
ftpusers:文件中是系统的一些默认账号,不动,这个里面的账号是不能够登录ftp的
user_list:清空这个文件,将新用户:ftpuser 添加进来,表示只运行ftpuser这个用户能够登录ftp系统,如果有其他账号,那么就添加到这个文件中。(切记,登录ftp的账号不可以在ftpusers中)
结束~~~~~~~~以上为亲测。
另外增加个其他的变动:要求只允许账号登录后在当前账号的根目录下,以上配置修改如下:
# 锁定chroot_list列表用户不允许切换到上级目录,只在指定根目录下
chroot_local_user=NO
# 启用chroot_list_file配置项指定的用户列表文件
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
userlist_enable=YES
新建chroot_list文件,并添加需要登录系统的账号
这个方法需要自己测试一下。