上上個月,幫客戶搭建了一台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和網卡綁定優化,這里暫時不做延伸。