linux搭建一台外网使用的FTP服务器
Posted 金峰老王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux搭建一台外网使用的FTP服务器相关的知识,希望对你有一定的参考价值。
上上个月,帮客户搭建了一台FTP服务器。
系统环境:redhat 8,可以上外网
服务使用:vsftpd
数据:无任何数据
要求:(1)FTP用户仅可以访问指定的FTP文件目录,ftp终端软件界面中不能切换到其他目录,ftp账号不可以登录系统shell界面
(2)防火墙要开启
步骤一:用CRT,root账号登录服务器,进行配置,账号名称,安装vsftpd服务
grep ftptest /etc/passwd 确认该服务器无该账号
cd /
mkdir FTP 进入根目录, 创建FTP目录
useradd -d /FTP -s /sbin/nologin ftptest 指定/FTP目录创建ftptest 用户账号,不能登录
passwd ftptest 设置密码
chown -R ftptest:ftptest /FTP 设置/FTP 目录归属账号及用户组
在FTP目录下创建大文件
dd if=/dev/zero of=150G_1.rar bs=1M count=150000 ----创建大文件
这台服务器安装时估计没有勾选FTP,没有FTP服务;但确定可以连外网,因此,还是选择联网方式yum安装vsftpd。
yum install vsftpd -y
发现问题:无法解析yum源
再次尝试: ping www.baidu.com
ping: www.baidu.com: Name or service not known
测试外网,ping百度,提示无法解析。
好吧,dns需要配一下,查找dns专有配置文件,不存在。
处理如下:
新建resolv.conf 文件
vi /etc/resolv.conf
nameserver 223.5.5.5 ---加入一条阿里提供的公网可用dns服务器地址
[root@localhost etc]# ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=50 time=29.8 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=50 time=29.8 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=50 time=29.8 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=50 time=29.7 ms
--- baidu.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 9ms
rtt min/avg/max/mdev = 29.735/29.777/29.811/0.213 ms
###这里注意一下:yum源需要对应服务器安装的系统,本系统redhat8 ,找了个centos8的repo,可以用。
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/redhat.repo https://mirrors.aliyun.com/repo/Centos-8.repo
--2020-05-27 11:59:27-- https://mirrors.aliyun.com/repo/Centos-8.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 116.153.35.249, 116.153.35.242, 116.153.35.245, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|116.153.35.249|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2595 (2.5K) [application/octet-stream]
正在保存至: “/etc/yum.repos.d/redhat.repo”
/etc/yum.repos.d/redhat.repo 100%[======================================================================================>] 2.53K --.-KB/s 用时 0s
2020-05-27 11:59:28 (135 MB/s) - 已保存 “/etc/yum.repos.d/redhat.repo” [2595/2595])
###yum安装vsftpd
[root@localhost yum.repos.d]# yum install vsftpd -y
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
CentOS-8 - Base - mirrors.aliyun.com 11 MB/s | 2.2 MB 00:00
CentOS-8 - Extras - mirrors.aliyun.com 72 kB/s | 6.5 kB 00:00
CentOS-8 - AppStream - mirrors.aliyun.com 15 MB/s | 7.0 MB 00:00
依赖关系解决。
==========================================================================================================================================================================
软件包 架构 版本 仓库 大小
==========================================================================================================================================================================
安装:
vsftpd x86_64 3.0.3-28.el8 AppStream 180 k
事务概要
==========================================================================================================================================================================
安装 1 软件包
总下载:180 k
安装大小:359 k
下载软件包:
vsftpd-3.0.3-28.el8.x86_64.rpm 1.0 MB/s | 180 kB 00:00
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计 1.0 MB/s | 180 kB 00:00
警告:/var/cache/dnf/AppStream-a5e033d33ad24141/packages/vsftpd-3.0.3-28.el8.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 8483c65d: NOKEY
CentOS-8 - AppStream - mirrors.aliyun.com 47 kB/s | 1.6 kB 00:00
导入 GPG 公钥 0x8483C65D:
Userid: "CentOS (CentOS Official Signing Key) <security@centos.org>"
指纹: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
导入公钥成功
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : vsftpd-3.0.3-28.el8.x86_64 1/1
运行脚本: vsftpd-3.0.3-28.el8.x86_64 1/1
验证 : vsftpd-3.0.3-28.el8.x86_64 1/1
Installed products updated.
已安装:
vsftpd-3.0.3-28.el8.x86_64
完毕!
[root@localhost yum.repos.d]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
修改vsftpd配置文件
vi /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
最后一行,增加信息: allow_writeable_chroot=YES
保存退出,然后在当前目录创建文件chroot_list,将ftptest账号名增加进去
systemctl stop firewalld 关闭服务器 防火墙(先关闭,ftp测试正常再开启)
sed -i \'s/SELINUX=enforcing/SELINUX=disabled/g\' /etc/selinux/config 禁用开机自启动selinux
getenforce
setenforce 0 关闭selinux
getenforce
systemctl start vsftpd 然后启动vsftpd服务
启动状态ok
但发现终端不能连接成功,根据错误信息,网上找了类似的情况,最后是通过将 /sbin/nologin 信息增加到/etc/shells里面解决
步骤二:开启防火墙,加策略:增加ftp服务和21端口开放
1.备份/etc/firewalld/zones 下面的public.xml文件
2.修改该文件,增加以下内容(红框):
3.重启防火墙
systemctl restart firewalld
查看防火墙默认区域设置
firewall-cmd --list-all
扩展其他:如果是防火墙开启的状态下:可以逐条使用命令增加策略:
先查看:firewall-cmd --list-all
临时生效:
firewall-cmd --add-port=21/tcp
firewall-cmd --add-port=21/udp
firewall-cmd --reload ---这个一定要做的,不然上面2条不生效
firewall-cmd --add-service="ftp"
带上--permanent 会存储到配置文件/etc/firewalld/zones/public.xml
firewall-cmd --add-port=21/tcp --permanent
firewall-cmd --add-port=21/udp --permanent
firewall-cmd --add-service="ftp" --permanent
最后,重启防火墙 systemctl restart firewalld
再次FTP测试,状态OK
动态查看网口数据交互信息:sar -n DEV 1
至此,完成FTP服务的搭建,如果数据上传下载量很大,那么还需要考虑对CPU和网卡绑定优化,这里暂时不做延伸。
以上是关于linux搭建一台外网使用的FTP服务器的主要内容,如果未能解决你的问题,请参考以下文章