Linux-FTP服务器搭建
CentOS配置vsftp
1. 准备
- 在vmware中安装centos7,网络模式为NAT
- 配置centos7的配置文件(etc/sysconfig/network-scripts/ifcfg-ens33 ONBOOT=yes),保证正常生成ip地址,
- 为方便操作,在宿主机使用xshell或其他客户端连接centos
2. 安装vsftp
- 检查是否安装vsftp
[root@localhost ~]# vsftpd -v
-bash: vsftpd: 未找到命令
[root@localhost ~]# rpm -q vsftpd
未安装软件包 vsftpd
- 安装vsftp
[root@localhost ~]# yum install vsftpd
- 查看vsftp服务状态
[root@localhost ~]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
以上输出说明vsftp服务已安装成功,但没有启动
- 启动vsftp服务
[root@localhost ~]# systemctl start vsftpd.service
[root@localhost ~]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since 四 2021-08-05 15:04:58 CST; 22s ago
Process: 1621 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 1622 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─1622 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
8月 05 15:04:58 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...
8月 05 15:04:58 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
[root@localhost ~]#
3. 匿名使用FTP
3.1 匿名登录FTP
- 在宿主机中测试连接ftp服务
在地址栏输入:ftp://192.168.114.139/ (censtos虚拟机的IP地址)
出现上图说明连接失败
- 原因分析: 因为centos中我们开启了防火墙,连接请求被防火墙阻止。
- 解决方案:
- 关闭防火墙,在方法可用在测试环境,生产环境不建议使用
- 修改防火墙配置
- 关闭防火墙再测试
[root@localhost ~]# systemctl stop firewalld.service
在地址栏输入:ftp://192.168.114.139/
出现上图说明连接失败
- 原因分析: 因为centos中我们开启了防火墙,连接请求被防火墙阻止。
- 解决方案:
- 关闭防火墙,在方法可用在测试环境,生产环境不建议使用
- 修改防火墙配置
- 关闭防火墙再测试
[root@localhost ~]# systemctl stop firewalld.service
在地址栏输入:ftp://192.168.114.139/
注: pub 是vsftp的默认目录,对应censtos中的/var/ftp/pub。
3.2 匿名操作FTP
- 此时在pub中创建目录或上传文件会报错:
- 原因分析:
1)centos中/var/ftp/pub目录的权限,默认情况下是可读的,但不可写,需要需改权限
2)selinux阻止对操作
3)vsftpd默认情况下允许匿名用户登录,查看文件, 但不允许匿名用户操作文件,或创建目录。
- 解决方案:
1)修改/var/ftp/pub目录的权限为777
chmod 777 -R /var/ftp/pub
2)关闭selinux
setenforce 0
上面的这种方式只能临时关闭,如果需要永久关闭需要修改配置文件:
[root@localhost targeted]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
将 SELINUX=enforcing 改为 SELINUX=disabled,并注释掉SELINUXTYPE=targeted即可, 注意修改SELinux配置后必须重启服务器才能起效。
3)修改vsftpd的配置文件,配置文件所在的目录为:/etc/vsftpd/ 下
#备份原配置文件
[root@localhost vsftpd]# mv vsftpd.conf vsftpd.conf.bak
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf.bak vsftpd_conf_migrate.sh #将原配置文件中的注释行去掉,并将内容重定向到vsftpd.conf中 [root@localhost vsftpd]# cat vsftpd.conf.bak | grep -v "#" > vsftpd.conf
[root@localhost vsftpd]# ls ftpusers user_list vsftpd.conf vsftpd.conf.bak vsftpd_conf_migrate.sh #查看新生成的配置文件
[root@localhost vsftpd]# vim vsftpd.conf
anonymous_enable=YES
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
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
在vsftpd.conf中加入如下配置:
anon_upload_enable=YES# 允许匿名用户上传文件
anon_mkdir_write_enable=YES # 允许 创建目录或写入文件
anon_other_write_enable=YES # 允许其他权限
完成以上设置,则vsftpd的匿名用户可以查看,获取ftp中的文件或目录,也可以上传,或在ftp中创建目录等操作。
4. 本地用户访问
本地访问,是指使用Linux中已经创建的本地用户和对应的密码来进行登录,本地用户登录后默认会限制在该用户对应的家目录。如果希望强制使用本地用户登录,则可以关闭匿名用户功能。
[root@localhost vsftpd]# vim vsftpd.conf
anonymous_enable=NO# 关闭匿名用户
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO# 关闭匿名用户上传功能
anon_mkdir_write_enable=NO# 关闭匿名用户操作功能
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
同时可以对登录的用户作限制,与黑名单功能类似,为了限制某些用户的登录,可以编辑/etc/vsftpd/ftpusers文件:
[root@localhost vsftpd]# vim ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
news
uucp
operator
games
nobody
注意:上面的这个文件只能做黑名单, 与上面的ftpusers作用类似的还有user_list文件(这个文件与ftpusers存放在同一个目录), 与ftpusers文件不同的是user_list文件既可以作为白名单使用,也可以作为黑名单使用,具体起到的是白名单还是黑名单的作用,则要看vsftpd.conf配置文件中的配置(这个文件与ftpusers,及user_list存放在同一个目录), 配置如下:(vsftpd.conf)
# user_list将作为黑名单使用
userlist_enable=YES
userlist_deny=YES
# user_list将作为白名单使用
userList_enable=YES
userList_deny=NO
# 表示不对任何用户作限制
userList_enable=NO
userList_deny=NO
需要注意的是:ftpusers配置文件是不受配置项约束,总是有效的, user_list是可配置的。
5. 防火墙配置
在生产环境中,直接关闭防火墙不安全,下面是centos系统中针对ftp服务的防火墙配置
[root@localhost vsftpd]# firewall-cmd --zone=public --add-port=21/tcp --permanent
success
[root@localhost vsftpd]# firewall-cmd --zone=public --add-service=ftp --permanent
success
[root@localhost vsftpd]# firewall-cmd --reload
配置完成后,开启防火墙可以正常使用ftp
6. 被动模式
ftp传输数据的方式可以分为:主动方式,被动方式。
简单的理解,主动和被动主要是针对ftp服务器来说的,如果在发生数据时,由ftp服务器发起连接,则叫做主动方式,如果发送数据时,由客户端的发起的,则为被动方式。
编辑/etc/vsftpd/vsftpd.conf配置文件:
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pasv_enable=YES# 打开被动模式支持pasv_min_port=50000 # 被动模式下的数据传输所使用的随机端口的最小值 pasv_max_port=65535# 被动模式下的数据传输所使用的随机端口的最大值
pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES
被动模式的优点是:能够避免客户端网络环境的影响,被动模式的这个特点在实际中经常被使用,需要注意一点的是,具体是对于具体的某次连接,是被动方式还是主动方式则是客户端决定的,比如我们可以在FileZilla中指定连接服务器是使用被动方式还是主动方式
7. SELinx对FTP服务的影响
SELinux对FTP的影响主要发生在匿名操作的时候,具体的影响可以参看【3.2 匿名操作部分】,对于通过认证登录的用户默认情况下是不受影响的(除非自行修改了SELinux的配置)。
对于匿名用户读取文件是可以的,但不能上传或操作,这种默认的配置也是符合安全要求的。尽管不少资料在介绍Linux种ftp配置时,一般开始就将SELinux关闭,(甚至防火墙也关闭)。但为安全起见,还是建议开启SELinux和防火墙,保留匿名用户只能查看的权限(如果没有必要则直接关闭),对于需要上传或操作ftp上的文件时,使用认证用户即可。