前言:
Centos 搭建FTP服務學習記錄
FTP簡介
FTP簡稱“文件傳輸協議”,用於Internet上的控制文件的雙向傳輸。
在FTP中常遇到兩個概念:
下載和上傳
“下載”文件就是從遠程主機拷貝文件至自己的計算機上
“上傳”文件就是將文件從自己的計算機拷貝到遠程主機上。
FTP連接及傳輸模式
控制連接 TCP 21 ,用於發送FTP命令信息
數據連接 TCP 20,用於上傳、下載數據
數據連接的建立類型:
主動模式:服務端從20端口主動向客戶端發起連接 被動模式:服務端在指定範圍內某個端口被動等待客戶端連接
被動模式相較於主動模式好,因爲主動連接的話會涉及到開放服務器端防護牆的20、21端口,而且主動模式服務器無法控制客戶端所開啓的端口,也容易被客戶端的防火牆攔截。
FTP用戶的類型:
匿名賬戶:
anonymous
ftp
本地用戶
搭建過程
服務器端:
這裏實驗使用的是vsftpd,所以要先下載
$ yum install vsftpd
但是下載的過程遇到了點問題,如下:
這個問題是yum命令被鎖
Existing lock /var/run/yum.pid
解決方法:等待一會或者強制結束
rm -f /var/run/yum.pid
下載好之後,先來了解一下vsftpd服務的一些默認目錄,以免後面操作時不知道有關目錄在哪裏
/usr/sbin/vsftpd ---- VSFTPD的主程序
/etc/rc.d/init.d/vsftpd ---- 啓動腳本
/etc/vsftpd/vsftpd.conf ---- 主配置文件
/etc/pam.d/vsftpd ---- PAM認證文件
/etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的用戶列表文件
/etc/vsftpd.user_list ---- 禁止或允許使用VSFTPD的用戶列表文件
/var/ftp ---- 匿名用戶主目錄
/var/ftp/pub ---- 匿名用戶的下載目錄
查看配置文件
vi /etc/vsftpd/vsftpd.conf
#PS:以root權限去看,因爲下載的時候便是用的root用戶
這裏就解釋其中重要的一些配置:
參數 | 作用 |
---|---|
download_enable | 是否允許下載文件 |
anonymous_enable | 是否允許匿名用戶訪問 |
anon_upload_enable | 是否允許匿名用戶上傳文件 |
anon_mkdir_write_enable | 是否允許匿名用戶創建目錄 |
anon_other_write_enable | 是否開放匿名用戶的其他寫入權限 |
local_enable | 是否允許本地用戶登錄 FTP |
其他的如果用到查詢即可
安裝完成後,啓動 FTP 服務:
systemctl restart vsftpd.service
啓動後,可以看到系統已經監聽了 21 端口:
netstat -nltp | grep 21
客戶端:
客戶機需要安裝一下ftp包,這樣才能使用連接命令ftp ip
,下載命令:
yum install ftp
匿名用戶測試
對於vsftpd默認配置是開啓了本地用戶和匿名用戶,可以直接登錄的,所以這裏沒有對配置文件進行修改
服務器端先開啓一下服務
客戶端使用匿名用戶連接,注意需要在同一個網段(兩個網絡都選爲僅主機模式即可或自己手動配置),如果不在一個網段則會出現下面的問題
但是還有一種情況,就是客戶端和服務器端都在一個網段,還是出現這個情況,那就應該是服務器端的防火牆將請求給攔截了,所以就需要關閉服務器端的防火牆
解決方法:
1.查看防火牆:iptables -L
2.清空防火牆:iptables -F
#注:這個設置只是暫時的,一旦關機再開機還需要重新進行輸入,如果想永久更改就需要下載iptables-services,然後進行更改,這裏不詳細敘述
客戶端再次連接,連接成功(匿名用戶ftp沒有密碼,空格即可)
配置文件中匿名用戶登錄 vsftpd 服務後的根目錄是 /var/ftp/
,進入/var/ftp/pub
上傳一個自己創建的文件看一下,發現無法創建
查看一下配置文件,匿名用戶上傳功能開了,但爲什麼還是不行
看了老師的講解,才知道目錄也需要進行設置權限,但如果直接使用chmod命令是不行的,會有一小bug,最好的方法是更改目錄的屬主
$ chown ftp /var/ftp/pub
重啓一下,客戶端再次連接,但發現還是不行,之前忘記在配置文件加上一段代碼,這段代碼寫哪裏都可以,只要是在配置文件中
write_enable=YES
#enable any form of FTP write command
但。。。。還是不行,我要吐了,什麼情況,查了半天發現:是selinux限制了,把selinux關掉就可以了
先查看下selinux裏有哪些關於ftp的
getsebool -a | grep ftp
如果是寫權限和全部權限是off的話就使用命令打開
setsebool -P allow_ftpd_anon_write on
setsebool -P allow_ftpd_full_access on
再在客戶端進行上傳測試,成功。
下載測試,成功
最後這裏提一點常用的Linux ftp
命令
ftp中用lcd切換本地路徑,用cd切換遠程服務器的路徑。如:cd目錄名(進入服務器目錄) lcd目錄名(進入本機目錄)
!命令是執行本地shell命令
具體的看大師傅的博客
Linux ftp 命令
本地用戶測試
上面使用了匿名用戶進行登陸,並上傳下載,這次通過本地用戶來實現一下
我的本地用戶是shy,第一步就設置配置文件(其實不用改就可以)
local_enable=YES
write_enable=YES
local_umask=022
userlist_deny=YES
userlist_enable=YES
爲了安全默認禁止以root身份登入,如果你實在想改的話就可以編輯一下文件
vi /vsftpd/user_list
不過不建議,自己可以設置一個新的用戶進行測試,這裏我就使用本地用戶shy
登陸成功,進行上傳下載測試,注意創建的文件位於shy賬戶家目錄
上傳成功
除本地用戶以爲,還有一個虛擬用戶,虛擬用戶不是系統中存在的,因此比本地用戶安全。這裏就先不學習,待到有需要時再進行學習。