13703353520(同微信) 周一~周五, 8:00 - 20:00
QQ:25681881或25295110 邮箱:qhdzxz@163.com
易得优软件 河北•秦皇岛
  • 站群系统

    自主建站,易得优自主建站站群系统

  • 易得优餐饮库管系统

    十七年专注开发

  • 易得优智能工控

    智能工控,易得优是认真的

  • 音乐打铃播放无需电脑

    易得优音乐打铃系统无电脑版

Centos7打造安全可控的FTP服务器

    时间:2019-07-03 15:09:27     人气:1959


《打造安全可控的FTP服务器》一文刊发于《网络安全和信息化》2019年第7期。



   FTP,英文全称File Transfer Protocol,是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。简单的来说呢,就是一台服务器上如果启用了ftp协议,如果你的电脑与这台服务器相连接,只要权限够,你就可以从这个服务器中下载东西和上传东西。

    Centos7是我们常用的服务器系统之一,我们也经常需要在这个系统中安装并配置安全可控的FTP服务器。

一、安装 FTP 服务器。

1、 安装 vsftpd 服务器命令。

# yum install vsftpd

2、 启动vsftpd并设置在下次启动时自动启用。

# systemctl start vsftpd

# systemctl enable vsftpd

3、 设置防火墙,允许外部系统用通过21端口访问 FTP 服务。

# firewall-cmd --zone=public --permanent --add-port=21/tcp

# firewall-cmd --zone=public --permanent --add-service=ftp

# firewall-cmd --reload

二、配置 FTP 服务器。

1、修改配置文件。

配置前先备份一下原始配置文件 /etc/vsftpd/vsftpd.conf

# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig

然后修改这个文件,并将下面的选项设置相关的值:

# vi  /etc/vsftpd/vsftpd.conf

anonymous_enable=NO  ### 禁用匿名登录

write_enable=YES        ### 允许对文件系统做改动的 FTP 命令

local_enable=YES        ### 允许本地用户登录

local_umask=022        ### 本地用户创建文件所用的 umask 值

dirmessage_enable=YES  ### 当用户首次进入一个新目录时显示一个消息

xferlog_enable=YES      ### 用于记录上传、下载细节的日志文件

connect_from_port_20=YES   ### 使用端口 20 (ftp-data)用于 PORT 风格的连接

xferlog_std_format=YES      ### 使用标准的日志格式

listen=NO                 ### 不要让 vsftpd 运行在独立模式

listen_ipv6=YES            ### vsftpd 将监听 IPv6 而不是 IPv4

pam_service_name=vsftpd   ###  vsftpd 使用的 PAM 服务名

userlist_enable=YES        ### vsftpd 支持载入用户列表

tcp_wrappers=YES        ### 使用 tcp wrappers

chroot_local_user=YES    ###禁止切换根目录

chroot_list_enable=YES

# (default follows)

chroot_list_file=/etc/vsftpd/chroot_list  ###如果没有此文件则创建此文件,不需要添加内容

allow_writeable_chroot=YES

local_root=/home/ftp/pub    ###限定主目录

2、创建ftp用户。

# useradd qhdedu

3、为用户qhdedu设置密码qhd123

# echo "qhd123" | passwd qhdedu --stdin

4、限制这个新创建的用户qhdedu只能通过ftp访问。

# usermod -s /sbin/nologin qhdedu

5、为用户分配主目录。

创建目录:

# mkdir -p /home/ftp/qhdedu

创建欢迎文件

echo "欢迎登录FTP" > /home/ftp/qhdedu/.message

设置该目录的访问权限

# chmod a-w /home/ftp/qhdedu && chmod 777 -R /home/ftp/qhdedu

设置为用户主目录

# usermod -d /home/ftp/qhdedu qhdedu

6、基于用户列表文件 /etc/vsftpd/userlist 来配置 FTP 来允许/拒绝用户的访问。

默认情况下,如果设置了 userlist_enable=YES,当 userlist_deny 选项设置为 YES 的时候,userlist_file=/etc/vsftpd/userlist 中列出的用户被拒绝登录。如果配置为 userlist_deny=NO,意味着只有在 userlist_file=/etc/vsftpd/userlist 显式指定的用户才允许登录。

# vi  /etc/vsftpd/vsftpd.conf

#### vsftpd 支持载入用户列表的的配置

userlist_enable=YES  #### vsftpd 将从 userlist_file 给出的文件中载入用户名列表

userlist_deny=NO

userlist_file=/etc/vsftpd/userlist    #### 存储用户名的文件,一行一个用户名

7、将ftp服务器开启被动模式。

# vi /etc/vsftpd/vsftpd.conf   #修改配置文件,在末尾添加以下内容:

pasv_enable=YES

pasv_min_port=30000

pasv_max_port=31000

8、保存后重启vsftpd。

# service vsftpd restart

或 systemctl start vsftpd

我们可以用 systemctl status  vsftpd  可查看当前状态。

三、测试服务器。

1、用qhdedu用户身份登录。

ftp://192.168.1.18

输入用户名:qhdedu

输入密码:qhd123

会显示登录成功,并显示欢迎内容:

1.png

图1

2、用ftp匿名登录会提示失败。

 2.png


图2

 

四、控制匿名账号可以登录、上传及下载。

     vsftpd.conf文件默认支持匿名登陆,修改vsftpd.conf可更改登陆方式。

anonymous_enable=YES   # YES为匿名可以登录  NO为匿名不可以登录

write_enable=YES

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

anon_other_write_enable=YES

anon_world_readable_only=NO

anon_root=/home/ftp/pub

 

     配置完再给相关目录赋权:  

     # chown  root:ftp  /home/ftp/pub

     # chmod 755 /home/ftp/pub    

     这句非常关键,也决定着是否能登录,权限必须为755,而不能是777,如果是777,则登录时出现错误提示:

     500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

3.png

图3

     如果想给匿名账号有写入权限(上传权限),可以建立一个子目录,并赋于权限,如:

     mkdir -p /home/ftp/pub/ftp

     chmod 777 /home/ftp/pub/ftp

     也就是说,要在anon_root=/home/ftp/pub中的目录/home/ftp/pub建立一个子目录(即两个目录不能是同一目录)。

    如果SELinux是启动状态,还要放宽SELinux的控制权限,即更改SELinux为Permissive模式:

# vi /etc/selinux/config

将文件中SELINUX=enforcing 一句改成 SELINUX=permissive  重启动后再 getenforce 时应该显示permissive 。当然也可以用 setenforce 0 直接暂时关闭SELinux,但不推荐此方法。  

这时再测试匿名登录:

ftp://192.168.1.18

ftp

密码回车(密码为空)

cd ftp

看到可以登录成功,并且可以上传文件:

put  E:a.txt  #将E:a.txt这个文件上传至/home/ftp/pub/ftp

5.png

图4