centos7搭建ftp服务
一. 简介
公司安卓的测试包下载还是使用的ftp,搭个玩玩。
二. 安装
install_ftp.sh
yum -y install vsftpd
三. 命令
# 启动
systemctl start vsftpd.service
# 开机启动
systemctl enable vsftpd.service
# 重启
systemctl restart vsftpd.service
四. 配置/etc/vsftpd.conf
配置文件是/etc/vsftpd.conf,修改点
# 是否允许匿名FTP访问
anonymous_enable=NO
# 允许本地用户访问,虚拟用户也是本地用户
local_enable=YES
# 允许所有用户都上传文件
write_enable=YES
# vsftpd的默认umask是077,022-其他用户可读
local_umask=022
# 不允许匿名用户上传
anon_upload_enable=NO
# 不允许匿名用户上传
anon_mkdir_write_enable=NO
# 开启目录标语功能
dirmessage_enable=YES
# 开启日志记录功能
xferlog_enable=YES
# 端口20进行数据连接
connect_from_port_20=YES
# 不允许上传文件更改宿主
chown_uploads=NO
# 支持ASCII模式的上传和下载功能
ascii_upload_enable=YES
ascii_download_enable=YES
# 用户连接后看到的欢迎信息
ftpd_banner=Welcome to siyou325 FTP service
# 文件最后添加
# PAM服务下Vsftpd的验证配置文件名
# PAM验证将参考/etc/pam.d/下的vsftpd文件配置
pam_service_name=vsftpd
# userlist_file中的用户将不得使用FTP
userlist_enable=YES
# 支持TCP Wrappers
tcp_wrappers=YES
# 虚拟用户
# 启用虚拟用户功能
guest_enable=YES
# 指定虚拟用户的宿主用户
guest_username=vsftpd
# 设定虚拟用户的权限符合他们的宿主用户
virtual_use_local_privs=YES
# 设定虚拟用户个人Vsftp的配置文件存放路径
user_config_dir=/etc/vsftpd/vconf
# 开启被动模式
pasv_enable=YES
# 随机最小端口
pasv_min_port=40000
# 随机最大端口
pasv_max_port=40010
# 自定义
use_localtime=YES
listen_port=21
idle_session_timeout=300
data_connection_timeout=1
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES
-
真实用户和虚拟用户
真实用户:
系统用户,在/etc/passwd中
虚拟用户:
是ftp服务器的专有用户,只能登录ftp,而不能登录系统,不是系统的用户,这样比较安全
所以我们启用虚拟用户
-
创建guest_username对应的用户vsftpd,需要有用户的主目录,不能登陆shell
useradd vsftpd -s /sbin/nologin
-
主动模式和被动模式
主动模式(PORT)
ftp客户端连接到ftp服务器的21端口,发送用户名和密码登录,登录成功后要list列 表或者读取数据时,客户端随机开放一个端口(1024以上),发送PORT命令到ftp服 务器,告诉服务器客户端采用主动模式并开放端口;ftp服务器收到PORT主动模式命令 和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。
被动模式(PASV)
PASV是Passive的缩写 ftp客户端连接到ftp服务器的21端口,发送用户名和密码登录,登录成功后要list 列表或者读取数据时,发送PASV命令到ftp服务器,服务器在本地随机开放一个端口 (1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口 进行数据传输。
主动模式和被动模式都需要通过服务端21端口登陆。
主动模式需要客户端开放1024以上端口给服务器,被动模式则是服务器开放1024以上端口给客户端。
五:配置PAM模块
/etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
# auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
# auth required pam_shells.so
# auth include password-auth
# account include password-auth
session required pam_loginuid.so
session include password-auth
# 自定义
# 如果系统为32位,lib64改为lib
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
六:添加用户
这里以添加siyou325为例
-
/etc/vsftpd/virtusers中添加一行用户名siyou325,添加一行密码pwdxxx
/etc/vsftpd/virtusers
siyou325 pwdxxx
然后执行
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db chmod 600 /etc/vsftpd/virtusers.db
用户就添加好啦
-
查看/etc/vsftpd.conf中user_config_dir的配置,此处为/etc/vsftpd/vconf
-
在/etc/vsftpd/vconf下新建siyou325的配置文件,文件名称也是siyou325,内容如下
/etc/vsftpd/vconf/siyou325
# 指定虚拟用户的具体主路径 local_root=/vps/hosts/ftp/siyou325/ # 不允许匿名用户访问 anonymous_enable=NO # 允许写操作 write_enable=YES anon_world_readable_only=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO
-
创建该账号对应的文件目录,并设置用户为vsftpd
mkdir -p /vps/hosts/ftp/siyou325/ chown -R vsftpd:vsftpd /vps/hosts/ftp/
七. 防火墙设置
firewalld开放ftp端口
# 开放21端口
firewall-cmd --zone=public --add-service=ftp --permanent
# 开放随机端口40000-40010
firewall-cmd --zone=public --add-port=40000-40010/tcp --permanent
# 加载
firewall-cmd --reload
PS:iptables配合ip_conntrack_ftp和ip_nat_ftp内核模块可以不主动开放随机端口40000-40010,不过我用的是firewalld,不太会操作,后面有空转iptables,感觉比firewalld强大的多。
八. 验证
好了,启动下
systemctl restart vsftpd.service
使用ftp客户端登陆试试,是否可以正常使用。
九. 遇到的问题
-
vsftpd 500 OOPS: cannot change directory:/home/vsftpd
之前创建vsftpd使用的命令是 useradd vsftpd -M -s /sbin/nologin 没有创建用户的主目录/home/vsftpd,所以报了这个错,去掉-M useradd vsftpd -s /sbin/nologin 就好了
-
200 Switching to Binary mode.
227 Entering Passive Mode (89,208,241,153,156,67).连接超时
被动模式需要客户端可以访问服务端1024以上的端口,服务端开放配置文件中设置的端口就可以了。
十. 结尾
大家也试试吧
参考: