在centos7.4下安装FTP

2018年2月12日旧文

这两天在centos7.4上安装FTP服务器,发现网上都是针对centos老版本(7以下)的建议,比如Redhat已经废弃不用的selinux设置,对新人很容易造成误导,总结自己的经验如下:

环境:CenOS7.4,阿里云ECS,PHP5.4,MySQL5.6.

选型:FTP(File Transfer Protocol)是典型的C/S架构产品,用来在客户端与服务端之间便捷传输文件,支持匿名下载更显方便。另外,一般安装的FTP是不安全的,因为用户凭证与数据都不加密。

在linux上常使用VSFTPD(vs代表very sucure,d代表Daemon),CentOS/红帽和Fedora这两种发新版都支持vsftpd。

下面各步骤都需要预先取得root权限,在命令行键入sudo即可(super user do的意思)

第一步:安装FTP服务器软件


1.安装vsftpd非常简单,在命令行键入:

# yum -y install vsftpd

2.安装完成后,ftp服务默认是关闭的,需要手动开启,并设置系统启动时自动开启。

#systemctl start vsftpd

#systemctl enable vsftpd

3.为了能够让外网客户端可以接入FTP服务,需要开启端口。注意有两个地方要添加端口:

  • 首先,在阿里云控制台里,安全组选择添加安全规则,开放20/21端口,并对所有ip地址开放。
  • 其次,如果centos上开启了防火墙,需要在对防火墙进行设置,命令如下,注意firewall后面没有空格

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

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

firewall-cmd –reload

第二步:配置FTP服务器


4.在编辑配置文件前,需要先进行备份,然后使用vim进行编辑

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

#vim /etc/vsftpd/vsftpd.conf

打开vim,按照如下内容进行编辑,完成后,按esc,输入“:wq”保存后退出。

anonymous_enable=NO             # 禁止匿名登录
local_enable=YES		# 允许本地登录
write_enable=YES		# 允许修改文件名称
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES		# 保存上传下载日志文件
connect_from_port_20=YES        # 开启主动模式
xferlog_std_format=YES
listen=NO
listen_ipv6=YES		        # 监听ipv6,要与listen=NO同时开启
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist    # 存储用户名
userlist_deny=NO                      

5.在完成vsftpd.conf编辑后,需要把ftp用户名加入vsftp.userlist,这里比较奇怪是,vsftpd.userlist里的用户默认是被禁止接入的(userlist_deny=YES),所以需要把deny修改为NO,则可以明确只有userlist里的用户才能接入ftp服务,还有两点需要注意:

  • 首先,使用useradd在系统内增加用户,并赋予相关权限(目录及文件);
  • 其次,在wordpress里增加插件、主题时会提示通过ftp上传文件,则必须将相关用户名和密码加入/var/www/html/wp-config.php

6.用户登录ftp服务器时,会被置于chroot中,这是用来作为ftp会话的本地root目录(被当作这些用户的home目录),我们需要把这些用户指向他们自己的home目录,在配置文件里加入下面两行。

chroot_local_user=YES  #本地用户被置于chroot
allow_writeable_chroot=YES  #YES确保chroot目录可写

第三步:通过SELinux提升FTP服务器安全


7.这里有个坑,在网上看到需要通过设置SELinux的boolean来允许FTP用户只读其home目录内的文件,即下面的命令,但是在CentOS7上总是报错:“boolean ftp_home_dir is not defined”,经过google(百度无用),原来红帽早就发了官方声明:“相关boolean已经在RHEL7.3中移除了,bugzilla.redhat.com上可以查询1406542,即ftp用户可以默认登录自己的home目录,如果此举无效,可以设置ftpd_full_access”。

#setsebool -P ftp_home_dir on

在设置full access时,发现semanage命令也需要安装,该命令是用来查询和修改SELinux默认目录的安全上下文,因为centos自带的chcon工具只能修改文件,目录等文件类型,无法对端口、消息接口和网路接口等进行管理,semanage能有效胜任SELinux的相关配置工作。semanage命令安装完毕后,需要重启系统,ECS会重启1-2分钟。

#yum -y install semanage

#reboot

#semanage boolean -m ftpd_full_access –on

最后,重启vsftpd服务以便让上面的所有改动生效。

#systemctl restart vsftpd.service

好,现在可以试试你的VPN服务器了。

Leave a Reply

Your email address will not be published. Required fields are marked *