一、前述
企业中linux搭建ftp服务器还是很实用的,所以本文针对CentOS7和CentOS6搭建服务器教程做个总结。
二、安装过程
1、显示如下图则表示已安装 vsftp 软件。如果未显示则需要安装 vsftpd 软件。

如果没有则通过 yum 源进行安装:
yum install -y vsftp
yum -y install lftp # 本地 ftp 客户端
2、安装完成之后
进入到ftp的根目录默认是 /etc/vsftpd/ 文件中进行配置

| 文件名 | 含义 |
| /etc/vsftpd/vsftpd.conf | vsftpd 的核心配置文件 |
| /etc/vsftpd/ftpusers | 用于指定哪些用户不能访问FTP 服务器。 黑名单 |
| /etc/vsftpd/user_list | 指定允许使用vsftpd 的用户列表文件。 白名单 |
| /etc/vsftpd/chroot_list | 指定允许使用vsftpd 的用户列表文件。 控制名单下的目录能不能离开ftp根目录 |
| 配置项目名 | 含义 |
| 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 | # 从端口20连接 |
| xferlog_file=/var/log/xferlog | # ftp日志目录 |
| idle_session_timeout=6000 | # 设置客户端连接时间 |
| data_connection_timeout=1200 | # 设置数据连接时间 针对上传,下载 |
| chroot_list_file=/etc/vsftpd/chroot_list | # 改变根目录 |
| chroot_list_enable=YES | # 若为NO,则记录在chroot_list_file所指定的文件(默认是/etc/vsftpd.chroot_list)中的用户将被chroot在登录后所在目录中,无法离开.如果为YES,则所记录的用户将不被chroot这里YES。 |
| chroot_local_user=YES | # 本地用户 |
| userlist_deny=NO | # 若设置为YES则记录在userlist_file选项指定文件(默认是/etc/vsftpd.user_list)中的用户将无法login,并且将检察下面的userlist_deny选项。 |
| userlist_enable=YES | # 若为NO,则仅接受记录在userlist_file选项指定文件(默认是/etc/vsftpd.user_list)中的用户的login请求,若为YES则不接受这些用户的请求。 |
| userlist_file=/etc/vsftpd/user_list | # 白名单 |
| local_root=/var/ftp/pub | # 根目录 |
| listen=YES | # 监听端口 |
| pam_service_name=vsftpd | |
| tcp_wrappers=YES |
3、创建白名单 useradd xxx passwd xxx 并添加到 user_list 和 chroot_list 中去
4、关闭防火墙
centos 7操作为 systemctl stop firewalld.service
centos 6操作位 service stop iptables
5.启动ftp服务器
centos 7操作为 /bin/systemctl restart vsftpd.service
centos 6操作为 service vsftpd restart
6.赋权,将ftp指定的根目录赋权为777权限
chmod 777 /var/ftp/pub
7.检查SElinux状态并关闭
![]()
getsebool -a | grep ftp
若centos 7 到此结束用ftp工具即可访问或者本地 ftp 服务器测试,通过 rpm -ivh 安装包,安装ftp客户端配置。
若centos 6 则在设置几个权限:
通过:setsebool httpd_enable_ftp_server 1 设置成如下状态即可。通过 getsebool - a | grep ftp 查看。

至此搭建成功!!!!
三、VSFTP服务器实战
实战1:
公司技术部准备搭建一台功能简单的FTP 服务器,允许所有员工上传和下载文件,并允许创建用户自己的目录。
分析:
允许所有员工上传和下载文件需要设置成允许匿名用户登录并且需要将允许匿名用户上传功能。
开启,anon_mkdir_write_enable 字段可以控制是否允许匿名用户创建目录。
备份原配置文件:
[root@python vsftpd]# cp vsftpd.conf vsftpd.conf_bak
[root@python ~]# vim /etc/vsftpd/vsftpd.conf
允许匿名用户访问:
anonymous_enable=YES
允许匿名用户上传文件并可以创建目录:
anon_upload_enable=YES
anon_mkdir_write_enable=YES


启动服务:
[root@python ~]# service vsftpd restart


[root@python pub]# chown ftp.ftp /var/ftp/pub/
然后测试,是可以新建文件夹了,但是不能重命名,不能删除!


[root@python ~]# mkdir /var/ftp/pythondata
[root@python ~]# chown ftp.ftp /var/ftp/pythondata
[root@python ~]# ll -d !$
ll -d /var/ftp/pythondata
drwxr-xr-x 2 ftp ftp 4096 Mar 16 14:34 /var/ftp/pythondata
[root@python ~]#
重启服务:
[root@python ~]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
[root@python ~]#
现在匿名上传的文件是禁止删除的。


这样匿名用户的上传就算成功了。
注:工作中,匿名用户只是只读访问,写的权限也没有的。
补充:
如果想让匿名用户可以重命名或者删除的权限,添加如下一条配置参数:

重启服务:
[root@python ~]# service vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: 500 OOPS: bad bool value in config file for: anon_other_write_enable [FAILED]

根据提示,说明刚才添加的那一行匿名写权限的参数有问题
[root@python ~]# vim /etc/vsftpd/vsftpd.conf

也就是说参数后面不能有多余的空格,重新启动就可以重新命名和删除文件夹了,匿名用户可以删除和修改,非常不安全,慎重使用这个参数。
注意:默认匿名用户目录的权限是755,这个权限是不能改变的。切记!
[root@python ~]# service vsftpd restart


实战2:
公司内部现在有一台FTP 和WEB 服务器,FTP 的功能主要用于维护公司的网站内容,包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务,他们分别适用team1 和team2帐号进行管理。先要求仅允许team1 和team2 帐号登录FTP 服务器,但不能登录本地系统,并将这两个帐号的根目录限制为/var/www/html,不能进入该目录以外的任何目录。
ftp 和 www web服务器相结合。
www web服务器根目录:/var/www/html
只允许:team1和team2两用户可以上传。 vsftp禁止匿名。
分析:
将FTP 和WEB 服务器做在一起是企业经常采用的方法,这样方便实现对网站的维护,为了增强安全性,首先需要使用仅允许本地用户访问,并禁止匿名用户登录。其次使用chroot 功能将team1和team2 锁定在/var/www/html 目录下。如果需要删除文件则还需要注意本地权限
解决方案:
1)建立维护网站内容的ftp 帐号team1 和team2 并禁止本地登录,然后设置其密码
[root@python ~]# useradd -s /sbin/nologin team1
[root@python ~]# useradd -s /sbin/nologin team2
[root@python ~]# echo "123456" | passwd --stdin team1
Changing password for user team1.
passwd: all authentication tokens updated successfully.
[root@python ~]# echo "123456" | passwd --stdin team2
Changing password for user team2.
passwd: all authentication tokens updated successfully.
2)配置vsftpd.conf 主配置文件并作相应修改
[root@python vsftpd]# cp vsftpd.conf_bak vsftpd.conf
cp: overwrite `vsftpd.conf'? y
[root@python vsftpd]# vim vsftpd.conf
#anonymous_enable=YES
anonymous_enable=NO 禁止匿名用户登录
# Uncomment this to allow local users to log in.
local_enable=YES 允许本地用户登录

继续将:

修改为:

local_root=/var/www/html:设置本地用户的根目录为/var/www/html
chroot_list_enable=YES:激chroot 功能
chroot_list_file=/etc/vsftpd/chroot_list:设置锁定用户在根目录中的列表文件。此文件存放要锁定的用户名。
保存退出
3)建立 /etc/vsftpd/chroot_list 文件,添加team1 和team2 帐号
[root@python vsftpd]# touch /etc/vsftpd/chroot_list
[root@python vsftpd]# ll !$
ll /etc/vsftpd/chroot_list
-rw-r--r-- 1 root root 0 Mar 16 15:13 /etc/vsftpd/chroot_list
[root@python vsftpd]# vim /etc/vsftpd/chroot_list # 写入以下内容,一行,一个用户名
team1
team2
4)重启vsftpd 服务使配置生效 service vsftpd restart
5)修改本地权限
[root@python vsftpd]# mkdir -p /var/www/html/
[root@python vsftpd]# ll -d /var/www/html/
drwxr-xr-x 2 root root 4096 Mar 16 15:16 /var/www/html/
[root@python vsftpd]# chmod -R o+w /var/www/html/
[root@python vsftpd]# ll -d /var/www/html/
drwxr-xrwx 2 root root 4096 Mar 16 15:16 /var/www/html/
6)测试:

[root@python ~]# lftp 192.168.31.10 -uteam1,123456
lftp team1@192.168.0.10:~> ls
drwxr-xr-x 2 500 500 4096 Mar 16 07:24 web
lftp team1@192.168.0.10:~>