FTP服务配置

GO

1. FTP介绍

FTP是File Transfer Protocol(文件传输协议,简称”文传协议”)的英文简写形式,用于在互联网上控制文件的双向传输。它同时也是一个应用程序,用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,以访问服务器上的大量程序和信息。FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。FTP方便传输数据,所以个人用户很多,但在企业里用得越来越少,因为FTP是有一定安全隐患的。在本章会介绍两种FTP软件。

2. 使用vsftpd搭建FTP服务

CentOS或RHEL上有自带的FTP软件vsftpd,默认并没有安装,需要用yum安装,安装后不用配置,启动后便可以使用。但本节介绍的是它的高级用法。

2.1. 安装 vsftpd

yum install -y vsftpd db4-utils

这里安装了两个软件包,同时也会把依赖的包安装上。其中db4-utils包用来生成密码库文件。

2.2. 建立账号

vsftpd默认可以支持使用系统账号体系登陆,但是那样不太安全,所以建议使用虚拟账号体系登陆。

  1. 首先建立与虚拟账号相关联的系统账号:useradd virftp -s /sbin/nologin
  2. 接着建立与虚拟账户相关的文件:vim /etc/vsftpd/vsftpd_login,其内容如下:

    1
    2
    3
    4
    test1
    123456
    test2
    abcdfe
    • 需要说明的是,该文件的奇数行为用户名,偶数行为上一行的用户密码。
  3. 更改文件的权限,提升安全级别:chmod 600 /etc/vsftpd/vsftpd_login
  4. vsftpd使用的密码不是明文的,需要生成对应的库文件:db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
  5. 最后建立与虚拟账号相关的目录以及配置文件:
    • mkdir /etc/vsftpd/vsftpd_user_conf
    • cd /etc/vsftpd/vsftpd_user_conf

2.3. 创建和用户对应的配置文件

用户的配置文件是单独存在的,每一个用户都有一个自己的配置文件,文件名和用户名一致。如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
# vim test1 //内容如下
local_root=/home/virftp/test1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000

说明:

  • local_root为test1账号的家目录
  • anonymous_enable用来限制是否允许匿名账号登陆(若为NO,表示不允许匿名账号登陆)
  • write_enable=YES表示可写
  • local_umask指定umask值
  • anon_upload_enable表示是否允许匿名账号上传文件
  • anon_mkdir_write_enable表示是否允许匿名账号可写
  • 以上为关键配置参数,其他参数暂时不用关心

创建test2账号的步骤和test1一样。接下来的步骤如下所示:

1
2
3
4
5
6
# mkdir /home/virftp/test1
# touch /home/virftp/test1/aminglinux.txt
# chown -R virftp:virftp /home/virftp
# vim /etc/pam.d/vsftpd //在最开头添加两行
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

说明:

  • CentOS7为64位系统,所以库文件路径为/lib64/security/pam_userdb.so(32位系统的库文件路径为/lib/security/pam_userdb.so)

2.4. 修改全局配置文件/etc/vsftpd/vsftpd.conf

修改用户的配置文件后还不可用,还需要修改vsftpd的一些全局配置文件。

首先编辑vsftpd.conf文件,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
# vim /etc/vsftpd/vsftpd.conf //修改如下内容
- 将anonymous_enable=YES 改为 anonymous_enable=NO
- 将#anon_upload_enable=YES 改为 anon_upload_enable=NO
- 将#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO
// 再增加如下内容
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES

然后启动vsftpd服务,执行如下命令:systemctl start vsftpd

2.5 测试安装是否成功

以上所示的整个配置过程有点繁琐,但是并不复杂。接下来我们做一下测试:

  • ps aux | grep vsftp 查看进程是否存在
  • yum install -y lftp 安装lftp客户端软件
  • lftp test1@127.0.0.1 输入口令后即可登陆到vsftpd,然后利用ls命令查看test1家目录下面的aminglinux.txt。文件的所属主和所属组以virftp用户的UID和GID的方式显示。

如果在这一步遇到问题,请检查/var/log/secure日志,通常会记录一些错误信息。

3. 使用pure-ftpd搭建FTP服务(YUM安装方式)

pure-ftpd为另一款比较小巧实用的FTP软件,平时用的比较多。

3.1. 安装 pure-ftpd

默认的CentOS的yum源并不包含pure-ftpd,需要安装epel扩展源,具体过程如下:

1
2
# yum install -y epel-release
# yum install -y pure-ftpd

3.2. 配置 pure-ftpd

在启动pure-ftpd之前,需要先修改配置文件/etc/pure-ftpd/pure-ftpd.conf。该配置文件里面的内容很多,其中需要修改的是:把PureDB /etc/pure-ftpd/pureftpd.pdb前面的#删除,然后启动pure-ftpd,启动之前需要关闭vsftpd,因为有端口冲突,过程如下所示:

1
2
3
# systemctl stop vsftpd
# systemctl start pure-ftpd
# ps aux | grep pure-ftp

启动成功的话,ps aux可以看到相关的进程。如果乜有正常启动,需要通过/var/log/messages日志查看原因。

3.3. 建立账号

为了安全,pure-ftp使用的账号并非Linux的系统账号,而是虚拟账号。

首先,创建一个虚拟账号,如下所示:

1
2
3
4
5
6
# mkdir /data/ftp/
# useradd -u 1010 pure-ftp
# chown -R pure-ftp:pure-ftp /data/ftp/
# pure-pw useradd ftp_user1 -u pure-ftp -d /data/ftp/
Password:
Enter it again:

说明:

  • -u选项将虚拟用户ftp_user1与系统用户pure-ftp关联再一起,也就是说,使用ftp-user1账号登陆FTP后,会以pure-ftp的身份来读取和下载文件
  • -d选项后面的目录为ftp_user1账户的家目录,这样可以使ftp_user1只能访问其家目录/data/ftp/

然后创建用户信息数据库文件,这一步很关键。执行如下命令:
pure-pw mkdb

其中,pure-pw还可以列出当前FTP账号以及删除某个账号。例如,我们再创建一个账号,如下所示:

1
2
# pure-pw useradd ftp_user2 -u pure-ftp -d /tmp
# pure-pw mkdb

列出当前账号,执行如下命令:

1
2
3
# pure-pw list
ftp_user1 /data/ftp/./
ftp_user2 /tmp/./

如果想删除账号,执行如下命令:

1
pure-pw userdel ftp_user2

3.4. 测试pure-ftpd

测试过程如下:

1
2
3
4
5
# lftp ftp_user1@172.0.0.1
口令:
# ls
# put /etc/fstab
# ls

说明:

  • 登陆后,使用ls可以查看当前目录都有什么文件
  • 使用put命令可以把系统的文件上传到FTP服务器上
  • 你还可以再Windows机器里安装一个FTP客户端软件(推荐开源的FileZilla),然后远程链接测试。

4. 使用pure-ftpd搭建FTP服务(源码安装方式)

4.1. 下载软件

Pure-ftpd的官网是http://www.pureftpd.org/project/pure-ftpd

1
2
3
[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget --no-check-certificate https://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.44.tar.bz2
#<==因为该链接的https所用的SSL证书未生效,所以无法正常连接,加上上面的选项后可以连接。

4.2. 安装pure-ftpd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost src]# tar jxf pure-ftpd-1.0.44.tar.bz2
[root@localhost src]# cd pure-ftpd-1.0.44
[root@localhost pure-ftpd-1.0.44]# ./configure \
--prefix=/usr/local/pureftpd \
--without-inetd \
--with-altlog \
--with-puredb \
--with-throttling \
--with-peruserlimits \
--with-tls
[root@localhost pure-ftpd-1.0.44]# echo $?
0
[root@localhost pure-ftpd-1.0.44]# make && make install
[root@localhost pure-ftpd-1.0.44]# echo $?
0

4.3. 配置pure-ftpd和启动

Pure-ftpd编译和安装完成后,下面就该配置它了,但是最新版本默认的配置就已经很好,如果有特殊需求可以更改它的配置文件/usr/local/pureftd/etc/pure-ftpd.conf,该文件的主要配置内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@localhost pure-ftpd-1.0.44]# cat /usr/local/pureftpd/etc/pure-ftpd.conf | grep -v ^# | grep -v ^$
ChrootEveryone yes
BrokenClientsCompatibility no
MaxClientsNumber 50
Daemonize yes
MaxClientsPerIP 8
VerboseLog no
DisplayDotFiles yes
AnonymousOnly no
NoAnonymous no #no为可以匿名,yes为不可以匿名
SyslogFacility ftp
DontResolve yes
MaxIdleTime 15
# PureDB /etc/pureftpd.pdb
LimitRecursion 10000 8
AnonymousCanCreateDirs no
MaxLoad 4
AntiWarez yes
Umask 133:022
MinUID 100
AllowUserFXP no
AllowAnonymousFXP no
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
AutoRename no
AnonymousCantUpload no
# PIDFile /var/run/pure-ftpd.pid
MaxDiskUsage 99
CustomerProof yes

启动pure-ftpd服务

1
[root@localhost ~]# /usr/local/pureftpd/sbin/pure-ftpd /usr/local/pureftpd/etc/pure-ftpd.conf

启动后检查是否成功启动:

1
2
[root@localhost ~]# ps aux | grep ftp | grep -v grep
root 9590 0.0 0.0 139412 824 ? Ss 16:33 0:00 /usr/local/pureftpd/sbin/pure-ftpd /usr/local/pureftpd/etc/pure-ftpd.conf

由于没有启动脚本,所以只能通过上面的方式启动,如果是重启的话,只能先把该服务杀掉,然后再启动,如下:

1
2
3
4
[root@localhost ~]# killall pure-ftpd
[root@localhost ~]# ps aux | grep ftp | grep -v grep
[root@localhost ~]# /usr/local/pureftpd/sbin/pure-ftpd /usr/local/pureftpd/etc/pure-ftpd.conf
[root@localhost ~]# ps aux | grep ftp | grep -v grep root 9599 0.0 0.0 139412 816 ? Ss 16:36 0:00 /usr/local/pureftpd/sbin/pure-ftpd /usr/local/pureftpd/etc/pure-ftpd.conf

4.4. 建立虚拟账号

这部分内容和上一章节《YUM方式安装pure-ftpd》的内容相同。在这里不再重复记录。


OK

0%