Linux --- CentOS 7 搭建FTP服务器详解

FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:”下载”(Download)和”上传”(Upload)。

一般在各种linux的发行版中,默认带有的ftp软件是vsftp,从各个linux发行版对vsftp的认可可以看出,vsftp应该是一款不错的ftp软件。

1、安装 FTP 服务

检查是否已安装vsftpd软件

rpm -qa |grep vsftpd

如果没有安装,使用YUM命令进行安装

yum install vsftpd -y

2、启动 VSFTPD 服务

安装完成后,启动 FTP 服务:

systemctl start vsftpd.service

# 老版本执行命令:

service vsftpd start

启动后,可以看到系统已经监听了 21 端口:

netstat -nltp | grep 21

此时,访问 ftp://< ip 地址 > 可浏览机器上的 /var/ftp 目录了。

停止 ftp 服务

systemctl stop vsftpd.service

# 老版本执行命令:

service vsftpd stop

重启 ftp 服务

systemctl restart vsftpd.service

# 老版本执行命令:

service vsftpd restart

3、配置 FTP 权限

目前 FTP 服务登陆允许匿名登陆,也无法区分用户访问,我们需要配置 FTP 访问权限;

了解 VSFTP 配置:

vsftpd.conf 为主要配置文件

ftpusers 配置禁止访问 FTP 服务器的用户列表

user_list 配置用户访问控制

阻止匿名访问和切换根目录:

vim /etc/vsftpd/vsftpd.conf

编辑 /etc/vsftpd/vsftpd.conf,找到以下配置并修改或添加:

# 禁用匿名用户

anonymous_enable=NO

# 禁止切换根目录

chroot_local_user=YES

# 设置FTP主目录

local_root=/data/ftp

# 配置FTP被动模式的端口

pasv_min_port=30000

pasv_max_port=30000

修改配置后,重新启动 FTP 服务,让配置生效;

匿名访问让所有人都可以上传文件到服务器上而无需鉴权,而允许切换根目录则可能产生越权访问问题。

4、创建 FTP 用户

创建一个用户

useradd user1

为用户设置密码

echo "password1" | passwd user1 --stdin

限制该用户仅能通过 FTP 访问

usermod -s /sbin/nologin user1

限制用户 user1只能通过 FTP 访问服务器,而不能直接登录服务器:

vsftpd 的配置目录为 /etc/vsftpd,包含下列的配置文件:

为用户分配主目录

# 创建目录:

mkdir -p /data/ftp/pub

# 创建登录欢迎说明文件:

echo "Welcome to use FTP service." > /data/ftp/welcome.txt

# 设置访问权限:

chmod a-w /data/ftp && chmod 777 -R /data/ftp/pub

# 设置为用户的主目录: 即用户通过 FTP 登录后看到的根目录

usermod -d /data/ftp user1

为用户创建主目录并约定:

/data/ftp 为主目录, 该目录不可上传文件

/data/ftp/pub 文件只能上传到该目录下

5、访问 FTP 服务

通过资源管理器的地址栏或浏览器地址栏访问:

ftp://user1:Password@<IP 地址>

通过 FTP 客户端工具访问

1) FileZilla - 跨平台的 FTP 客户端,支持 Windows 和 Mac

FileZilla可以处理同时传输,并支持跨平台FTP,SFTP和FTPS客户端,有很多有用的功能和直观的图形用户界面。

FileZilla还支持IPv6,书签,选项卡式用户界面,运行在Windows,Linux,Mac OS X等,远程文件编辑,目录比较,拖放支持,远程文件搜索等等。

2) WinSCP - Windows 下的 FTP 和 SFTP 连接客户端

WinSCP是一个用于Windows的开源免费SFTP客户端,FTP客户端,WebDAV客户端和SCP客户端。 它的主要功能是在本地和远程计算机之间进行文件传输。 除此之外,WinSCP提供脚本和基本文件管理器功能。

WinSCP包括图形用户界面,提供多种语言,与Windows集成,批处理文件脚本和命令行界面集成,以及各种其他有用的功能。

6、 配置SELinux

VSFTPD是一个FTP服务器程序,然后SELinux是CentOS的防火墙组件。由于 vsftpd 默认被 SELinux 拦截,所以会遇到访问FTP出现以下的问题:

226 Transfer done (but failed to open directory).(传输完成,但是打开路径失败)

550 Failed to change directory(更改路径失败)

553 Could not create file.

解决方法一:降低SELinux安全级别

此方法原理是:降低SELinux安全级别,把enforcing降低到permissive,但降低整体系统安全作为代价来解决一个小问题,这总不是最佳方案。

编辑SELinux配置

vim /etc/sysconfig/selinux

1

设置SELINUX=enforcing改为SELINUX=permissive

# 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=permissive

# SELINUXTYPE= can take one of three two values:

#     targeted - Targeted processes are protected,

#     minimum - Modification of targeted policy. Only selected processes are protected.

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

重启vsftpd服务,即可正常访问FTP

解决方法二:在SELinux中设置FTP允许访问

首先查看SELinux中有关FTP的设置状态:

getsebool -a | grep ftp

1

ftpd_anon_write --> off

ftpd_connect_all_unreserved --> off

ftpd_connect_db --> off

# 此行--- ftpd_full_access --> off ---默认为off状态

ftpd_full_access --> off

ftpd_use_cifs --> off

ftpd_use_fusefs --> off

ftpd_use_nfs --> off

ftpd_use_passive_mode --> off

httpd_can_connect_ftp --> off

httpd_enable_ftp_server --> off

tftp_anon_write --> off

tftp_home_dir --> off

设置ftpd_full_access为开启状态

setsebool -P ftpd_full_access=on

1

重启vsftpd服务,即可正常访问FTP

-P是保存选项,每次重启时不必重新执行这个命令了

7、配置防火墙

配置 iptables 防火墙

1、解决vsftpd在iptables开启后,无法使用被动模式的问题

编辑/etc/sysconfig/iptables-config添加以下内容

# 添加以下内容,注意顺序不能调换  

IPTABLES_MODULES="ip_conntrack_ftp"  

IPTABLES_MODULES="ip_nat_ftp"  

2、开启21端口

编辑/etc/sysconfig/iptables添加以下内容

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 30000 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

置 firewalld 防火墙

1、开启21端口

查询所有已开启端口

firewall-cmd --zone=public --list-ports

查询是否开启21端口

firewall-cmd --zone=public --query-port=21/tcp

开启21端口(如未开启)

firewall-cmd --zone=public --add-port=21/tcp --permanent (--permanent永久生效,无参数重启后失效)

# 开启被动模式30000端口(vsftpd.conf中相应配置)

firewall-cmd --zone=public --add-port=30000/tcp --permanent

重新载入防火墙规则

firewall-cmd --reload

再次查询,开启成功;

2、firewalld常用命令

查看防火墙状态

firewall-cmd --state

查看版本

firewall-cmd --version

查看帮助

firewall-cmd --help

其他命令

# 查看所有打开的端口:

firewall-cmd --zone=public --list-ports

# 更新防火墙规则:

firewall-cmd --reload

# 查看区域信息:  

firewall-cmd --get-active-zones

# 查看指定接口所属区域:

firewall-cmd --get-zone-of-interface=eth0

# 拒绝所有包:

firewall-cmd --panic-on

# 取消拒绝状态:

firewall-cmd --panic-off

# 查看是否拒绝:

firewall-cmd --query-panic

systemctl相关命令

systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

# 启动一个服务:

systemctl start firewalld.service

# 关闭一个服务:

systemctl stop firewalld.service

# 重启一个服务:

systemctl restart firewalld.service

# 显示一个服务的状态:

systemctl status firewalld.service

# 在开机时启用一个服务:

systemctl enable firewalld.service

# 在开机时禁用一个服务:

systemctl disable firewalld.service

# 查看服务是否开机启动:

systemctl is-enabled firewalld.service

# 查看已启动的服务列表:

systemctl list-unit-files|grep enabled

# 查看启动失败的服务列表:

systemctl --failed

8、配置端口转发与端口映射

有外围防火墙的在防火墙上做映射

系统防火墙做映射

iptables -t nat -A PREROUTING -d 外网IP -p tcp --dport 端口 -j DNAT --to 内网IP:端口

iptables -t nat -A POSTROUTING -d 内网IP -p tcp --dport 端口 -j SNAT --to 外网IP:端口

iptables save

PREROUTING:是目的地址转换(DNAT),要把别人的公网IP换成你们内部的IP,才让访问到你们内部受防火墙保护的服务器。

POSTROUTING:是源地址转换(SNAT),要把你内部网络上受防火墙保护的ip地址转换成你本地的公网地址才能让它们上网。

---------------------

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值