1、FTP簡介
ftp(File Transfer Protocol文件傳輸協(xié)議)是基于TCP/IP 協(xié)議的應用層協(xié)議,用于文件的傳輸,包括ftp服務器(或服務端)和ftp客戶端
ftp客戶端與服務器創(chuàng)建網(wǎng)絡連接,請求登錄服務器,登錄成功后,就可以進行文件傳輸,主要包括下載文件和上傳文件兩種操作
2、關(guān)閉防火墻
為了避免不必要的麻煩,我們先關(guān)閉防火墻和selinux,等搭建成功之后再開啟防火墻和相應的端口
[root@centos7 ~]# systemctl status firewalld.service # 查看防火墻狀態(tài)
[root@centos7 ~]# systemctl stop firewalld.service # 停止防火墻服務
[root@centos7 ~]# systemctl disable firewalld.service # 關(guān)閉防火墻開啟自啟動
# 把文件中的SELINUX=enforcing 改為SELINUX=disabled
[root@centos7 ~]# vim /etc/selinux/config
[root@centos7 ~]# setenforce 0 # 使修改馬上生效
3、安裝FTP軟件包
在CentOS7中,采用yum來安裝ftp軟件包,包括ftp服務器和ftp客戶端
查看是否已經(jīng)安裝了vsftpd
# 如果沒有返回任何結(jié)果,表示沒有安裝;如果返回文件包名,這表示已經(jīng)安裝了該服務;
[root@centos7 ~]# rpm -qa|grep vsftpd
vsftpd-3.0.2-29.el7_9.x86_64 # 代表已安裝
[root@centos7 ~]# vsftpd -version
vsftpd: version 3.0.2 # 代表已安裝
[root@centos7 ~]# rpm -e vsftpd # 卸載vsftpd
# 再次檢查
[root@centos7 ~]# rpm -qa|grep vsftpd
[root@centos7 ~]# vsftpd -version
bash: vsftpd: 未找到命令...
開始安裝vsftpd
安裝ftp服務器
# 如果已經(jīng)安裝,再次執(zhí)行yum就會把軟件包升級到最新版本
[root@centos7 ~]# yum install -y vsftpd
安裝ftp客戶端
[root@centos7 ~]# yum install -y ftp lftp
設置為開機自動啟動服務
[root@centos7 ~]# systemctl enable vsftpd.service
啟動vsftpd服務
# ftp服務器的服務名是vsftpd,相關(guān)的操作如下:
[root@centos7 ~]# systemctl start vsftpd.service # 啟動服務
systemctl stop vsftpd.service # 停止服務
systemctl restart vsftpd.service # 重啟服務
systemctl status vsftpd.service # 查看服務狀態(tài)
systemctl enable vsftpd.service # 設置開機自啟動vsftpd服務
systemctl disable vsftpd.service # 禁用開機自啟動vsftpd服務
4、新建用戶和FTP目錄
ftpuser是你為該ftp服務創(chuàng)建的用戶名,/data/ftp/ftpuser為ftp服務器訪問路徑
新建FTP目錄并授權(quán)
# 創(chuàng)建文件目錄
mkdir -p /data/ftp/ftpuser
# 為該目錄配置權(quán)限
chmod -R 755 /data/ftp/ftpuser
如果我們直接使用useradd -d ftpuser,則新建的用戶是可以登錄系統(tǒng)的,這樣會給FTP服務器帶來安全隱患
因此我們?yōu)榱瞬蛔孎TP用戶登錄系統(tǒng),就必須為FTP用戶統(tǒng)一創(chuàng)建一個不能登錄系統(tǒng)的shell,這一行的命令只運行一次即可,后面新建用戶就不需要執(zhí)行了
echo /usr/bin/nologin>>/etc/shells
新建ftp組及用戶
# 新建用戶組ftp
groupadd ftp
# 指定用戶主目錄:/data/ftp/ftpuser -M
# 指定用戶的shell: -s /usr/bin/nologin
# 新建用戶ftpuser,并且設置不支持ssh系統(tǒng)登錄,只能登錄ftp服務器
# -g 用戶組; -d 指定家目錄; -s 不能登陸系統(tǒng); -M 不創(chuàng)建家目錄
useradd -g ftp -d /data/ftp/ftpuser -M -s /usr/bin/nologin ftpuser
==============================================================
# 如果要恢復ftpuser用戶的ssh登錄(可登入CentOS7系統(tǒng)),執(zhí)行下面的語句即可
usermod -s /bin/bash ftpuser
設置密碼
# echo "新密碼" | passwd --stdin 用戶名
echo "ftppassword" | passwd --stdin ftpuser
新建FTP用戶可寫目錄
# 由于/data/ftp/ftpuser的用戶是root,其它用戶都沒有寫的權(quán)限
# 所以要在該目錄下新建一個目錄用于文件的上傳下載
mkdir -p /data/ftp/ftpuser/upload
chown ftpuser:ftp /data/ftp/ftpuser/upload
chmod 755 /data/ftp/ftpuser/upload
5、配置ftp服務器
備份配置文件
# 防止后期配置文件出錯后無法還原
[root@centos7 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup
[root@centos7 ~]# cd /etc/vsftpd/
[root@centos7 ssh]# ll
......
-rw------- 1 root root 5116 6月 10 2021 vsftpd.conf
-rw------- 1 root root 5116 8月 15 22:05 vsftpd.conf.backup
......
編輯配置文件
vim /etc/vsftpd/vsftpd.conf
打開vsftpd.conf文件,全選刪除(Esc+gg+dG)文件內(nèi)容,然后用下面的配置進行替換
# 是否開啟匿名用戶,匿名都不安全,默認NO
anonymous_enable=NO
# 允許本機賬號登錄FTP
# 這個設定值必須要為YES時,在/etc/passwd內(nèi)的賬號才能以實體用戶的方式登入我們的vsftpd主機
local_enable=YES
# 允許賬號都有寫操作
write_enable=YES
# 本地用戶創(chuàng)建文件或目錄的掩碼
# 意思是指:文件目錄權(quán)限:777-022=755,文件權(quán)限:666-022=644
local_umask=022
# 進入某個目錄的時候,是否在客戶端提示一下
dirmessage_enable=YES
# 當設定為YES時,使用者上傳與下載日志都會被記錄起來
xferlog_enable=YES
# 日志成為std格式
xferlog_std_format=YES
# 上傳與下載日志存放路徑
xferlog_file=/var/log/xferlog
# 開放port模式的20端口的連接
connect_from_port_20=YES
# 關(guān)于系統(tǒng)安全的設定值:
# ascii_download_enable=YES(NO)
# 如果設定為YES,那么client就可以使用ASCII格式下載檔案
# 一般來說,由于啟動了這個設定項目可能會導致DoS的攻擊,因此預設是NO
# ascii_upload_enable=YES(NO)
# 與上一個設定類似的,只是這個設定針對上傳而言,預設是NO
ascii_upload_enable=NO
ascii_download_enable=NO
# 通過搭配能實現(xiàn)以下幾種效果:
# ①當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd/chroot_list文件中列出的用戶,可以切換到其他目錄;未在文件中列出的用戶,不能切換到其他目錄
# ②當chroot_list_enable=YES,chroot_local_user=NO時,在/etc/vsftpd/chroot_list文件中列出的用戶,不能切換到其他目錄;未在文件中列出的用戶,可以切換到其他目錄
# ③當chroot_list_enable=NO,chroot_local_user=YES時,所有的用戶均不能切換到其他目錄
# ④當chroot_list_enable=NO,chroot_local_user=NO時,所有的用戶均可以切換到其他目錄
# 限制用戶只能在自己的目錄活動
chroot_local_user=YES
chroot_list_enable=NO
chroot_list_file=/etc/vsftpd/chroot_list
# 可以更改ftp的端口號,使用默認值21
# listen_port=60021
# 監(jiān)聽ipv4端口,開了這個就說明vsftpd可以獨立運行,不用依賴其他服務
listen=NO
# 監(jiān)聽ipv6端口
listen_ipv6=YES
# 打開主動模式
port_enable=YES
# 啟動被動式聯(lián)機(passivemode)
pasv_enable=YES
# 被動模式端口范圍:注意:linux客戶端默認使用被動模式,windows 客戶端默認使用主動模式。在ftp客戶端中執(zhí)行"passive"來切換數(shù)據(jù)通道的模式。也可以使用"ftp -A ip"直接使用主動模式。主動模式、被動模式是有客戶端來指定的
# 上面兩個是與passive mode使用的port number有關(guān),如果您想要使用64000到65000這1000個port來進行被動式資料的連接,可以這樣設定
# 這兩項定義了可以同時執(zhí)行下載鏈接的數(shù)量
# 被動模式起始端口,0為隨機分配
pasv_min_port=64000
# 被動模式結(jié)束端口,0為隨機分配
pasv_max_port=65000
# 文件末尾添加
# 這個是pam模塊的名稱,我們放置在/etc/pam.d/vsftpd,認證用
pam_service_name=vsftpd
# 使用允許登錄的名單,在/etc/vsftpd/user_list文件中添加新建的用戶ftpuser
userlist_enable=YES
# 限制允許登錄的名單,前提是userlist_enable=YES,其實這里有點怪,禁止訪問名單在/etc/vsftpd/ftpusers
userlist_deny=NO
# 允許限制在自己的目錄活動的用戶擁有寫權(quán)限
# 不添加下面這個會報錯:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
# 當然我們都習慣支持TCP Wrappers的啦
# Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 為由 inetd 生成的服務提供了增強的安全性
tcp_wrappers=YES
# FTP訪問目錄
local_root=/data/ftp/ftpuser
允許新建用戶登錄FTP
vim /etc/vsftpd/user_list
將新建用戶ftpuser添加到/etc/vsftpd/user_list文件末尾

注意:
這個是允許登錄ftp的名單,一行一個用戶,不能把多個寫到一行
修改用戶切換目錄的權(quán)限
用戶切換目錄的規(guī)則設定在/etc/vsftpd/vsftpd.conf文件中,如果有用戶有權(quán)限切換目錄,則在/etc/vsftpd/chroot_list文件中添加即可(一行一個用戶)
例如:
# 在chroot_list中添加新建用戶ftpuser
# 第一步:打開文件
vim /etc/vsftpd/chroot_list
# 第二步:添加ftpuser用戶
ftpuser
# 第三步:保存文件并退出
6、重啟并配置防火墻
systemctl enable firewalld.service # 重啟防火墻開機自啟動
systemctl restart firewalld.service # 重啟防火墻服務
firewall-cmd --version # 查看防火墻版本
firewall-cmd --list-all # 查看已開放的端口
firewall-cmd --permanent --zone=public --add-service=ftp # 防火墻開通ftp服務
firewall-cmd --permanent --zone=public --add-port=21/tcp # 開通ftp服務21命令控制端口
# 主動模式下數(shù)據(jù)傳輸端口等于命令控制端口-1 ======> 21 - 1 = 20
# 開通ftp服務主動模式的20數(shù)據(jù)傳輸端口
firewall-cmd --permanent --zone=public --add-port=20/tcp
# 開通ftp服務被動模式的數(shù)據(jù)端口范圍
firewall-cmd --permanent --zone=public --add-port=64000-65000/tcp
firewall-cmd --reload # 刷新防火墻,重新載入
# 設置關(guān)閉SELinux對ftp的限制
setsebool -P ftpd_full_access on
sed -i s#enforcing#disabled#g /etc/sysconfig/selinux
setenforce 0 && getenforce
getenforce
7、重啟FTP服務
systemctl restart vsftpd.service
至此,F(xiàn)TP其實就已經(jīng)搭建成功,可以登錄了!
8、訪問測試
查看IP地址
ip addr
注意:
1、云服務器的ip地址為公網(wǎng)ip地址
2、虛擬機的ip地址為NAT模式下的固定ip地址,下圖用的就是固定ip

新建測試文件
# 進入之前設置好的路徑
[root@centos7 ~]# cd /data/ftp/ftpuser/upload
# 新建測試文件,然后保存退出
[root@centos7 upload]# vim 測試_20220712.txt
[root@centos7 upload]#
瀏覽器訪問測試

終端訪問測試
ftp命令
[root@centos7 ~]# ftp 192.168.10.110
Connected to 192.168.10.110 (192.168.10.110).
220 (vsFTPd 3.0.2)
Name (192.168.10.110:root): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,10,110,251,154).
150 Here comes the directory listing.
drwxr-xr-x 2 1002 50 4096 Aug 15 14:26 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,10,110,250,171).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 12 Aug 15 14:26 測試_20220712.txt
226 Directory send OK.
ftp> exit
221 Goodbye.
[root@centos7 ~]#
lftp命令
# 格式:lftp 用戶名:密碼@ftp地址:傳送端口(默認21)
[root@centos7 ~]# lftp ftpuser:ftppassword@192.168.10.110:21
lftp ftpuser@192.168.10.110:~> ls
drwxr-xr-x 2 1002 50 4096 Aug 15 14:26 upload
lftp ftpuser@192.168.10.110:/> cd upload/
lftp ftpuser@192.168.10.110:/upload> ls
-rw-r--r-- 1 0 0 12 Aug 15 14:26 測試_20220712.txt
lftp ftpuser@192.168.10.110:/upload> exit
[root@centos7 ~]#
原文鏈接:https://blog.csdn.net/weixin_45688268/article/details/126337169