CentOS 7 搭建ftp服务器

  使用FTP跟服务器之间进行文件的上传与下载操作是很方便的,即使是一个小白也很容易上手,那么怎么在服务器上面来搭建这么一个FTP呢,本文就带着大家在服务器上面进行一次FTP的搭建操作。

物料的准备

CentOS 7 服务器一台
FileZilla –ftp客户端,链接ftp使用

好了,现在我们登录自己的服务器,开始搭建我们的FTP

安装FTP服务器–vsftpd

1、检查服务器是否已安装了vsftpd

有些服务器默认已经安装了vsftpd,因此我们要先确认一下是否安装过,使用以下命令进行查看:

1
vsftpd -v

如果输出版本号,则证明已经安装,如若没有,进行第二步

2、安装vsftpd,使用yum install vsftpd命令即可,安装完成后需要手动启动它,并设置为开机启动(也可以在完成相关配置之后在启动),相关命令如下:

1
2
[root@localhost /]# systemctl start vsftpd
[root@localhost /]# systemctl enable vsftpd

3、由于ftp是默认监听的是21端口,因此我们需要在防火墙里面添加开放21端口,CentOS 7默认使用的是FireWall防火墙,因此我们需要配置该防火墙,开启ftp协议服务,如下所示:

1
2
3
# firewall-cmd --zone=public --permanent --add-port=21/tcp
# firewall-cmd --zone=public --permanent --add-service=ftp
# firewall-cmd --reload

配置ftp服务器

1、备份vsftpd的配置文件,以备后面配置错误还原使用,vsftp默认安装在/etc/下面,使用如下命令进行文件备份

1
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

2、对vsftpd的配置文件进行一些相关的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
anonymous_enable=NO             # 是否允许匿名登录FTP服务器,默认设置为YES允许,这里设置为NO,不允许匿名登录
local_enable=YES # 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许
write_enable=YES # 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许
local_umask=022 # 掩码,本地用户默认掩码为077
dirmessage_enable=YES # 是否激活目录欢迎信息功能,当用户用CMD模式首次访问服务器上某个目录时,FTP服务器将显示欢迎信息,默认情况下,欢迎信息是通过该目录下的.message文件获得的,此文件保存自定义的欢迎信息,由用户自己建立
xferlog_enable=YES # 是否让系统自动维护上传和下载的日志文件,默认情况该日志文件为/var/log/vsftpd.log,也可以通过下面的xferlog_file选项对其进行设定
connect_from_port_20=YES # 是否设定FTP服务器将启用FTP数据端口的连接请求 ftp-data数据传输,21为连接控制端口
xferlog_std_format=YES # 是否以标准xferlog的格式书写传输日志文件 默认为/var/log/xferlog,也可以通过xferlog_file选项对其进行设定
listen=NO # 是否允许监听 如果设置为YES,则vsftpd将以独立模式运行,由vsftpd自己监听和处理IPv4端口的连接请求
listen_ipv6=YES # 设定是否支持IPV6。如要同时监听IPv4和IPv6端口,则必须运行两套vsftpd,采用两套配置文件 同时确保其中有一个监听选项是被注释掉的
pam_service_name=vsftpd # 设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件
userlist_enable=YES # 是否允许ftpusers文件中的用户登录FTP服务器,默认为NO,下面详细讲解
tcp_wrappers=YES # 是否使用tcp_wrappers作为主机访问控制方式。

相关配置的说明,详见对应配置后面的注释

3、开启用户对ftp的访问

在vsftpd目录下面,有个vsftpd.userlist的文件,这个文件存放可以登录ftp的用户

默认情况下,如果userlist_enable=YES,同时将userlist_deny选项设置为YES,那么意味着在userlist_file=/etc/vsftpd/vsftpd.userlist中列出的用户将拒绝登录访问ftp

但是, 使用userlist_deny=NO这个配置会更改对应的权限,这意味着只有在userlist_file =/etc/vsftpd/vsftpd.userlist中明确列出的用户才能被允许登录,因此我们进行以下设置:

1
2
3
userlist_enable=YES
userlist_file=/etc/vsfptd/vsftpd.userlist
userlist_deny=NO

ps:若是/etc/vsftpd下面没有vsftpd.userlist,则自己新建该文件即可

4、锁定用户的主目录
在用户登录之后,默认进入到自己的主目录,并且不允许切换到父级目录以外的目录,把用户锁定在自己的目录内,只能在自己的目录内活动

1
2
chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES限制用户只能在自己的主目录下面活动,不允许跳出主目录之外

开启ftp的保护功能

1、开启SELinux,允许FTP读取用户主目录中的文件

1
# setsebool -P ftp_home_dir on

如果提示错误,使用如下命令开启:

1
# semanage boolean -m ftpd_full_access --on

这一步如果提示命令semanage不存在,在需要安装,yum的源里面默认是没有的,我们需要使用下面的命令来查找合适的安装源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost /]# yum provides semanage
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.163.com
* extras: mirrors.huaweicloud.com
* updates: mirrors.huaweicloud.com
base/7/x86_64/filelists_db | 6.9 MB 00:00:02
extras/7/x86_64/filelists_db | 444 kB 00:00:01
nginx/x86_64/filelists_db | 44 kB 00:00:00
updates/7/x86_64/filelists_db | 637 kB 00:00:00
policycoreutils-python-2.5-22.el7.x86_64 : SELinux policy core python utilities
Repo : base
Matched from:
Filename : /usr/sbin/semanage

可以看到我们查找到的文件版本,安装即可:

1
[root@localhost /]# yum -y install policycoreutils-python-2.5-22.el7.x86_64

到目前为止,vsftp的相关配置已经完成,现在重启vsftpd服务(如果之前没有开启过,使用上面第一步里面的开启命令即可):

1
[root@localhost /]# systemctl restart vsftpd

创建用户

1、创建一个用户,用来测试登录ftp使用

1
2
[root@localhost /]# useradd -m -c 'ftp test' -s /bin/bash xiaoming
[root@localhost /]# passwd xiaoming

上面创建了一个用户xiaoming,该用户的登录shell是/bin/bash,-c 是用户描述

2、添加到vsftpd的用户列表文件

使用echo命令将用户xiaoming添加到文件/etc/vsftpd.userlist ,如下所示:

1
2
[root@localhost /]# echo 'xiaoming' | tee -a /etc/vsftpd/vsftpd.userlist
[root@localhost /]# cat /etc/vsftpd/vsftpd.userlist

3、现在我们使用ftp登录验证一下(如果提示此命令不存在,使用yum安装即可)

先匿名用户测试:

1
2
3
4
5
6
7
8
[root@localhost /]# ftp 192.188.12.126
Connected to 192.188.12.126 (192.188.12.126).
220 (vsFTPd 3.0.2)
Name (192.188.12.126:root): anonymous

530 Permission denied.
Login failed.
ftp>

由于我们在上面配置了禁止匿名用户登录ftp,所以可以看到使用匿名用户登录失败,不允许访问我们的ftp

2、使用我们刚添加的用户xiaoming测试登录ftp

1
2
3
4
5
6
7
8
9
10
[root@localhost /]# ftp 192.188.12.126
Connected to 192.188.12.126 (192.188.12.126).
220 (vsFTPd 3.0.2)
Name (192.188.12.126:root): xiaoming
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

可以看到,用户xiaoming登录成

用户xiaoming在登录后,并没有自己的目录,那么接下来我们为xiaoming配置他的主目录

配置ftp用户访问目录

1、创建目录(或者使用已有的目录进行分配也可以),这里我们演示一下为用户xiaoming创建自己的ftp目录,并进行赋权

1
2
3
[root@localhost /]# mkdir /home/xiaoming/ftp/files
[root@localhost /]# chown ravi:ravi /home/xiaoming/ftp/files
[root@localhost /]# chmod 0700 /home/xiaoming/ftp/files/

2、修改vsftpd的配置文件

然后在vsftpd配置文件中添加/修改以下选项:

1
2
user_sub_token=$USER         #在根目录插入用户名
local_root=/var/$USER/ftp #定义用户自己的目录

由于修改了vsftpd的配置文件,因此需用重启vsftp服务

3、验证用户xiaoming登录ftp后的访问目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost /]# ftp 192.188.12.126
Connected to 192.188.12.126 (192.188.12.126).
220 (vsFTPd 3.0.2)
Name (192.188.12.126:root): xiaoming
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,188,12,126,58,47).
150 Here comes the directory listing.
drwxrwxrwx 2 0 0 32 May 25 14:06 files
226 Directory send OK.
ftp>

可以看到在用户xiaoming的ftp目录下面,有自己的主目录了,现在可以使用我们上面准备的ftp客户端(FileZilla)进行登录验证了

在使用中如果碰到响应: 550 Failed to change directory.的错误,可进行如下操作

1
[root@localhost /]# chmod -R 777 /var/xiaoming/ftp/files

以上就是本教程的全部内容,相信通过本教程,对服务器搭建ftp能得到一些解惑,谢谢!