安装FTP包
安装
yum install -y vsftpd
设置开机启动
systemctl enable vsftpd
启动
systemctl start vsftpd
查看状态, 出现下图则代表启动成功,可进行下一步操作
systemctl status vsftpd
firewall防火墙设置
打开firewall,设置开机启动,永久开放ftp服务,--permanent 代表永久生效,开启21端口,然后重载防火墙规则
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-port=21/tcp --permanent
firewall-cmd --reload
systemctl restart firewalld
查看firewall的规则,出现如下图红框中的ftp服务和21端口,代表启动成功
firewall-cmd --list-all
到这里,我们上述步骤全部正确的话,现在是可以成功连接到ftp服务器的,我们可以打开浏览器尝试连接,windows系统也可以使用资源管理器打开,同意还可以使用ftp工具连接,工具可以自行百度查询
ftp地址:ftp://ip地址
比如我的ip地址是192.168.17.128,那么就如下图所示,成功连接ftp服务
selinux设置
为什么要设置selinux呢,因为会对ftp服务的上传下载造成权限影响,具体有设置有如下两种方法
方法一:直接关掉selinux,但是需要重启centos服务器,如果熟悉linux的,有条件的可以使用此方法,不熟悉当前centos部署那些项目与服务,请勿使用该方法
打开selinux配置文件
vim /etc/selinux/config
#修改配置参数,SELINUX=enforcing前面加上#号注释,增加SELINUX=disabled
#SELINUX=enforcing
SELINUX=disabled
重启centos服务期,此命令请谨慎使用,请先暂停所有部署在此服务器的项目服务,避免重启开机造成错误
reboot
方法二:修改selinux
查看所有与ftp相关的selinux服务,会出现下图,每个人可能有一点点不同,不过不影响
getsebool -a|grep ftp
将包含有 ftp_home_dir 和 ftpd_full_access 相关的都设置为 1
setsebool ftpd_full_access 1
setsebool tftp_home_dir 1
FTP配置文件修改
备份原来配置文件,再打开配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
vim /etc/vsftpd/vsftpd.conf
修改如下配置,对照好配置文件如下配置修改,不要修改错了
anonymous_enable=NO
anon_mkdir_write_enable=YES
chown_uploads=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
添加下列内容到vsftpd.conf末尾
use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES
建立虚拟用户,关闭匿名登录
虽然再开启firewall防火墙后已经可以连接ftp服务了,但是属于匿名登录,任何人知道ip地址就可以进入,存在安全隐患,所以建议使用ftp专用的虚拟用户登录
创建编辑用户文件
vim /etc/vsftpd/virtusers
第一行为用户名,第二行为密码。不能使用root作为用户名,可以建立多个用户,如下图所示, 我建立两个账户
生成用户数据文件,添加新用户时,vim /etc/vsftpd/virtusers 写入账号密码,在先后添加一个虚拟用户的个人配置文件(下面有详细说明), 再重新运行一次该命令即可,删除用户 vim /etc/vsftpd/virtusers,然后删掉要删除的账号密码,再重新运行一次该命令即可
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
chmod 600/etc/vsftpd/virtusers.db
修改 /etc/pam.d/vsftpd 文件,先备份原油文件,再打开修改
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
vi /etc/pam.d/vsftpd
先将配置文件中原有的 auth 及 account 的所有配置行均注释掉,再添加下面两行到文件最下面,如下图所示,然后保存退出
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
新建系统用户vsftpd,用户目录为/home/vsftpd, 用户登录终端设为/bin/false(即:使之不能登录系统)
useradd vsftpd -d /home/vsftpd -s /bin/false
chown -R vsftpd:vsftpd /home/vsftpd
建立虚拟用户个人配置文件,上面我建立了两个用户,我现在拿用户test1做举例
mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
touch test1
vi test1
把下面的复制粘贴放入打开的test1文件中即可,保存退出,就可是用使用用户test1登录,密码为test123456,登录后可以上传下载
local_root=/data/media/ #该用户可以访问的文件路径,比如我设置的是/data/media
write_enable=YES #设置为YES则可以上传,NO是禁止上传
anon_world_readable_only=NO #下面四个都是匿名用户相关,默认即可
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
最后重启vsftpd,重启后就可以使用我们设置的虚拟用户登录看到指定的目录了
systemctl restart vsftpd