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=YESuserlist_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服务器了。