CentOS安装FTP

开启防火墙ftp端口

21端口是ftp服务端口;10060到10090是Vsftpd被动模式需要的端口,可自定义一段大于1024的tcp端口

阿里云服务器记得开放上面的端口

CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。

关闭firewall:

1
2
3
systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

编辑防火墙配置文件

vi /etc/sysconfig/iptables

1
2
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10060:10090 -j ACCEPT

重启防火墙使配置生效

1
2
3
systemctl restart iptables.service #最后重启防火墙使配置生效

systemctl enable iptables.service #设置防火墙开机启动

关闭SELINUX

1
2
3
4
5
6
7
8
9
vi /etc/selinux/config

#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出
setenforce 0 #使配置立即生效

安装vsftpd

1
2
3
4
5
6
7
8
9
rpm -qc vsftpd #查询vsftpd是否安装

yum install -y vsftpd #安装vsftpd

yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI #安装vsftpd虚拟用户配置依赖包

systemctl start vsftpd.service #启动

systemctl enable vsftpd.service #设置vsftpd开机启动

ftp的配置文件主要有三个,位于/etc/vsftpd/目录下,分别是:

  • ftpusers 该文件用来指定那些用户不能访问ftp服务器。

  • user_list 该文件用来指示的默认账户在默认情况下也不能访问ftp

  • vsftpd.conf vsftpd的主配置文件

新建系统用户vsftpd

1
2
3
useradd vsftpd -d /data/wwwroot -s /bin/false #用户目录为/data/wwwroot, 用户登录终端设为/bin/false(即使之不能登录系统)

chown vsftpd:vsftpd /data/wwwroot -R

建立虚拟用户

建立虚拟用户个人Vsftp的配置文件和子账号FTP权限

1
2
3
4
5
6
7
8
9
10
11
mkdir /etc/vsftpd/vconf

cd /etc/vsftpd/vconf

touch zhangjian #这里创建虚拟用户配置文件

mkdir -p /data/wwwroot/qgadmin
#设置FTP上传文件新增权限,最新的vsftpd要求对主目录不能有写的权限所以ftp为755,主目录下面的子目录再设置777权限
chmod -R 755 /data/wwwroot/
chmod -R 777 /data/wwwroot/qgadmin
vi zhangjian #编辑用户zhangjian配置文件,其他的跟这个配置文件类似

输入以下内容

1
2
3
4
5
6
local_root=/data/wwwroot/qgadmin/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

保存退出

1
:wq!

配置vsftp服务器

1
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-bak #备份默认配置文件

执行以下命令进行设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sed -i "s/anonymous_enable=YES/anonymous_enable=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#anon_upload_enable=YES/anon_upload_enable=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#anon_mkdir_write_enable=YES/anon_mkdir_write_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#chown_uploads=YES/chown_uploads=NO/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#async_abor_enable=YES/async_abor_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ascii_upload_enable=YES/ascii_upload_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ascii_download_enable=YES/ascii_download_enable=YES/g" '/etc/vsftpd/vsftpd.conf'
sed -i "s/#ftpd_banner=Welcome to blah FTP service./ftpd_banner=Welcome to FTP service./g" '/etc/vsftpd/vsftpd.conf'
echo -e "use_localtime=YES\nlisten_port=21\nchroot_local_user=YES\nidle_session_timeout=300
\ndata_connection_timeout=1\nguest_enable=YES\nguest_username=vsftpd
\nuser_config_dir=/etc/vsftpd/vconf\nvirtual_use_local_privs=YES
\npasv_min_port=10060\npasv_max_port=10090
\naccept_timeout=5\nconnect_timeout=1
\nallow_writeable_chroot=YES" >> /etc/vsftpd/vsftpd.conf

解决服务器发回了不可路由的地址。使用服务器地址代替的问题

查看生成的配置文件:

1
vi /etc/vsftpd/vsftpd.conf
1
2
listen=NO -> listen=YES
listen_ipv6=YES ->listen_ipv6=NO

开启被动模式

1
2
3
4
5
6
7
8
#开启被动模式
pasv_enable=YES
#被动模式端口范围
pasv_min_port=10060
pasv_max_port=10090
#需要加入外部ip,否则被动模式会失败
pasv_address=110.110.110.110
pasv_addr_resolve=YES

pasv_address 是所在服务器的公网IP

配置文件说明:

1
2
3
4
5
6
7
8
9
10
11
12
anonymous_enable=NO //设定不允许匿名访问
local_enable=YES //设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
chroot_list_enable=YES //使用户不能离开主目录
ascii_upload_enable=YES
ascii_download_enable=YES //设定支持ASCII模式的上传和下载功能
pam_service_name=vsftpd //PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证


#以下这些是关于vsftpd虚拟用户支持的重要配置项,默认vsftpd.conf中不包含这些设定项目,需要自己手动添加
guest_enable=YES //设定启用虚拟用户功能
guest_username=vsftpd //指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了,通过映射到vsftpd
user_config_dir=/etc/vsftpd/vuser_conf //设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。(配置文件名=虚拟用户名)

建立虚拟用户名单文件

1
touch /etc/vsftpd/virtusers

编辑虚拟用户名单文件:(单行账号,双行密码,注意:不能使用root做用户名,系统保留)

1
vi /etc/vsftpd/virtusers

输入

1
2
zhangjian
123456

保存退出

1
:wq!

生成虚拟用户数据文件

1
2
3
4
5
rm -rf /etc/vsftpd/virtusers.db 
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取
chmod 600 /etc/vsftpd/virtusers.db

vsftpd配置

/etc/pam.d/vsftpd的文件头部加入以下信息(在后面加入无效)

修改前先备份

1
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpdbak

打开文件

1
vi /etc/pam.d/vsftpd

先注释vsftpd所有配置,加入下面部分

1
2
auth    sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers

注意:如果系统为32位,上面改为lib,否则配置失败

重启vsftpd服务器

1
systemctl restart vsftpd.service

可通过 tail -f /var/log/secure 指令,查看服务器安全日志,便于分析错误问题,设置操作效果一定要仔细