安装 FTP 服务:yum install -y vsftpd
如果是内网机器,要离线安装,先在有互联网的服务器上(尽量和内网机器的系统版本相差不大)执行:yumdownloader --resolve --destdir /opt/rpmPackage vsftpd
把下载到 /opt/rpmPackage 文件夹下的 rpm 包拷贝到内网机器上,执行:rpm -ivh *.rpm
vsftpd 配置文件为:/etc/vsftpd/vsftpd.conf
各项配置说明如下:
/etc/vsftpd/ftpusers:用于指定哪些用户不能访问FTP 服务器。黑名单。不允许访问FTP服务器的用户名
/etc/vsftpd/user_list:指定允许使用vsftpd 的用户列表文件。黑/白名单。不允许/允许登陆FTP服务器的用户。根据userlist_deny、userlist_enable两个配置项控制。
/etc/vsftpd/chroot_list:指定不能离开ftp根目录的用户
vsftpd.conf具体配置如下:
anonymous_enable=NO #允许匿名用户访问为了安全选择关闭
local_enable=YES # 允许本地用户登录
write_enable=YES # 是否允许写入
local_umask=022 # 本地用户上传文件的umask
dirmessage_enable=YES #为YES则进入目录时显示此目录下由message_file选项指定的文本文件(,默认为.message)的内容
xferlog_enable=YES #开启日志
xferlog_std_format=YES #标准格式
connect_from_port_20=YES
xferlog_file=/var/log/xferlog #ftp日志目录
idle_session_timeout=6000 #设置客户端连接时间
data_connection_timeout=1200 #设置数据连接时间 针对上传,下载
chroot_list_enable=YES #设置为YES则下面的chroot控制有效
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=YES #当为YES时,chroot_list中的用户不锁定目录,为NO时,chroot_list中的用户锁定目录
allow_writeable_chroot=YES
userlist_deny=NO #若设置为YES则记录在userlist_file选项指定文件中的用户将无法登陆
userlist_enable=YES #若为NO,则仅接受记录在userlist_file选项指定文件中的用户的login请求.若为YES则不接受这些用户的请求.
userlist_file=/etc/vsftpd/user_list
local_root=/data/ftp #FTP服务器的根目录
listen=YES #监听ipv4的地址
listen_ipv6=NO #监听ipv6的地址。与listen选项互斥。只能开一个
pam_service_name=vsftpd
tcp_wrappers=YES
创建一个用户:useradd ftpuser
设置密码:passwd ftpuser
把用户名添加到user_list和chroot_list中。
检查防火墙和selinux是否关闭。不想关闭则要手动配置放行规则
关闭防火墙:systemctl stop firewalld.service
关闭selinux(暂时):setenforce 0
启动 FTP 服务器:systemctl restart vsftpd
可以访问了。
坑:
1、建用户的时候,想着控制该用户不允许通过ssh登陆服务器,就加了 -b /bin/nologin 参数,结果后来用该用户登不上FTP服务器,按理说不可能有影响。但是把 /etc/passwd 文件里ftpuser用户的登陆shell改成/bin/bash后就能正常登陆FTP了。干
2、本来可以通过windows文件资源管理器使用 ftp://主机ip 的形式访问FTP服务器的,结果后来不知道怎么就不行了,报错:windows无法访问目标文件夹,检查是否有权限啥的,通过winscp、浏览器、xftp等FTP连接工具又可以正常访问。后来才了解到,如果通过windows文件资源管理器的话,得使用 ftp://用户名@主机ip 的形式访问FTP服务器。