Linux常用工具服務——FTP服務

介紹

FTP(File Transfer Protocol)文件傳輸協議,是用於控制文件的雙向傳輸的應用程序

FTP用戶類型

(1) 匿名用戶:anonymous或ftp
(2) 本地用戶:賬號名稱、密碼等信息保存在passwd/shadow文件中
(3) 虛擬用戶:使用獨立的賬號/密碼數據文件

ftp的工作模式

FTP是僅基於TCP的服務,與衆不同的是FTP協議要用到兩個TCP連接,一個是控制鏈路,用來在客戶端與服務器之間傳遞命令的;另一個是數據鏈路,用來上傳或下載數據的。

FTP協議有兩種工作方式:POST方式(主動式)和PASV方式(被動式)

主動模式:服務端從20端口主動向客戶端發起鏈接
控制端口 21 數據傳輸端口 20

被動模式:服務端在指定範圍內某個端口被動等待及客戶端鏈接
控制端口21 數據傳輸端口 隨機

FTP連接類型配置

Windows Cmd下默認爲主動模式,更改Ftp爲被動的方法:
ftp> quote PASV
Linux Ftp命令下默認爲被動模式,更改爲主動的方法:
ftp> passive

主動與被動FTP優缺點

主動FTP對FTP服務器的管理有利,但對客戶端的管理不利。因爲FTP服務器企圖與客戶端的高位隨機端口建立連接,而這個端口很有可能被客戶端的防火牆阻塞掉。
被動FTP對FTP客戶端的管理有利,但對服務器端的管理不利。因爲客戶端要與服務器端建立兩個連接,其中一個連到一個高位隨機端口,而這個端口很有可能被服務器端的防火牆阻塞掉。

FTP服務器配置

vsftp

FTP的文件傳輸是明文方式,爲了安全誕生了vsftp,vsftpd是一個基於GPL發佈的FTP服務器軟件,安全性高,是RedHat linux默認的FTP服務終端軟件

vsftp特點

(1) 一般以普通用戶運行,降低進程權限,提高安全性
(2) 高權限指令需要上層程序許可
(3) 整合了所有ftp命令
(4) 用戶chroot功能,限制限制用戶只能訪問自己的家目錄
(5) 是RedHat linux默認的FTP服務端軟件
(6) 不再依賴xinetd服務
(7) 可同時容許匿名(anonymous)與本地用戶(local)訪問,還支持虛擬用戶

vsftp連接類型

控制連接:TCP 21,用戶發送FTP命令信息
數據連接:TCP20,用戶上傳,下載數據

vsftp配置文件介紹

配置文件作用 配置文件路徑
vsftpd的可執行文件(主程序) /usr/sbin/vsftpd
vsftpd啓動腳本 /etc/rc.d/init.d/vsftpd
vsftpd主配置文件 /etc/vsftpd/vsftpd.conf
vsftpd的PAM認證文件 /etc/pam.d/vsftpd
禁止使用vsftpd的用戶列表文件 /etc/vsftpd/ftpusers
禁止或允許使用vsftpd的用戶列表文件 /etc/vsftpd/user_list
匿名用戶主目錄 /var/ftp

vsftp.conf文件常用的配置參數說明

常用的全局配置

listen_address=192.168.4.1	;設置監聽的IP地址
listen=YES ;是否以獨立運行的方式監聽服務
listen_port=21 ;設置監聽FTP服務的端口號
write_enable=YES ;是否啓用寫入權限
download_enable=YES ;是否允許下載文件
max_clients=0 ;限制併發客戶端連接數
max_per_ip=0 ;限制同一IP地址的併發連接數
pasv_enable=yes ;設置最小的被動端口號
pasv_min_port=9981 ;設置最小的被動端口號
pasv_max_port=9981 ;設置最大的被動端口號
dirmessage_enable=yes ;是否顯示目錄說明文件
xferlog_enable=yes ;是否記錄ftp傳輸過程
xferlog_file=/var/log/vsftpd.log ;日誌的路徑和名字
xferlog_std_format=yes ;是否使用標準的ftp xferlog
chown_username=username ;是否改變上傳文件的屬主,如果是則需要輸入一個系統用戶
名
idle_session_timeout=600 ;設置默認不活躍session時間
date_connection_timeout=120 ;設置數據傳輸超時時間
ftpd_banner=welcome to ftp server ;定製歡迎信息

本地用戶訪問限制

userlist_enable=YES ;是否啓用user_list列表文件
userlist_deny=YES ;是否禁用user_list中的用戶

本地用戶權限控制

local_enable=YES ;是否啓用本地系統用戶
local_umask=022 ;本地用戶所上傳文件的權限掩碼
local_root=/var/ftp ;設置本地用戶的FTP根目錄
chroot_local_user=YES ;是否將用戶禁錮在主目錄
local_max_rate=0 ;限制最大傳輸速率(字節/秒)
chroot_list_enable=YES ;配合下面的文件使用
chroot_list_file=/etc/vsftpd/chroot_list ;配合使用,列表中的用戶將被禁錮在目錄中

本地用戶的權限除了使用以上的參數控制以外,還可以使用系統的權限進行控制。ftp的權限和系統的權限都允許時纔會放行,只要有一方權限不足使用FTP就會出現權限不足

匿名權限控制

anonymous_enable=YES ;啓用匿名訪問
anon_umask=022 ;匿名用戶所上傳文件的權限掩碼
anon_root=/var/ftp ;匿名用戶的FTP根目錄
anon_word_readable_only=YES ;允許匿名下載
anon_upload_enable=YES ;允許上傳文件
anon_mkdir_write_enable=YES	;允許創建目錄
anon_other_write_enable=YES ;允許匿名登入者更多於上傳或者建立目錄之外的權限,譬如刪除或者重命名,默認值爲NO
anon_max_rate=0 ;限制最大傳輸速率(字節/秒)

(1) 如果anon_upload_enable=NO,則匿名用戶不能上傳文件,但可以刪除或者重命名已經存在的文件
(2) 如果anon_mkdir_write_enable=NO,則匿名用戶不能上傳或者新建文件夾,但可以刪除或者重命名已經存在的文件夾
(3) 匿名用戶賬號名稱默認爲ftp或anonymous,不需要登錄密碼,默認只能下載無法上傳

配置匿名用戶

這裏爲了展示匿名用戶的所有功能才這樣配置,實際中不能這樣配置
(1) 安裝vsftp軟件,並按照下面配置修改配置文件

yum -y install vsftpd
mkdir -p /home/vsftpd/files
chmod -R 755 /home/vsftpd
chmod -R 777 /home/vsftpd/files
cp -p /etc/vsftpd/vsftpd.conf{,.bak}	;備份配置文件
grep -E -v "^#|^$" /etc/vsftpd/vsftpd.conf

anonymous_enable=YES	;啓用匿名訪問
anon_upload_enable=YES	;允許匿名用戶可上傳文件
anon_world_readable_only=NO	;允許匿名用戶可創建目錄
anon_mkdir_write_enable=YES	;開放其他寫入權比如改名,需要手動添加
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
anon_root=/home/vsftpd/
anon_other_write_enable=YES

service vsftpd restart	;重啓vsftpd服務

注意:FTP的配置要處seLinux防火牆

anon_world_readable_only=NO 只要ftp用戶對文件有讀權限即可下載
anon_world_readable_only=YES 文件的其他人必須有讀的權限才允許下載(安全)

默認情況下,匿名用戶所有上傳下載都使用ftp用戶的權限,若要上傳文件,則需要ftp用戶有寫的權限,若要下載,則需要ftp用戶有讀的權限

(2) 在windows任務管理器測試:在地址欄輸入ftp://IP,右鍵選擇登錄——>匿名登錄,測試文件的上傳,下載,修改文件夾名等操作

在這裏插入圖片描述

配置本地用戶

系統本地的默認設置

vsftpd默認允許所有的系統用戶都可以訪問FTP,並且要進行身份驗證。但是用系統用戶身份登錄FTP服務器後,默認將位於自己的家目錄中,而不是FTP的主目錄

local_enable=YES	;配置文件中關於系統用戶的默認設置

創建系統用戶,並設置密碼,在家目錄中添加測試文件

useradd anliu01
useradd anliu02
passwd anliu01
passwd anliu02
echo "ftp test" >> /home/anliu01/ftptest.txt

然後在windows的客戶端利用資源管理器測試訪問,在空白界面單擊鼠標右鍵之後選擇“登錄”,輸入用戶名和密碼,就可以進入到用戶的家目錄下,並且具寫入權限
在這裏插入圖片描述在這裏插入圖片描述

禁錮系統用戶於指定目錄中

Windows客戶端也可以通過ftp命令訪問服務器,由於在命令行模式下模式採用FTP的主動模式,因而此時需要將客戶端的防火牆關閉才能成功訪問

此時,用戶雖然默認訪問的是自己的家目錄,但是卻可以使用cd命令切換到服務器端的任何具備訪問權限的目錄,如切換到/etc/目錄
在這裏插入圖片描述這樣會存在很大的安全隱患,所以一般都需要將系統用戶禁錮在其家目錄下,禁止隨意切換(系統的所有用戶都將受到限制):chroot_local_user=YES

要對本地用戶查看效果,需先設置local_root=/home/vsftpd
結果如下:
在這裏插入圖片描述
讓特殊用戶擁有目錄的切換權限:chroot_local_userchroot_list_enable參數同時使用

chroot_local_user=YES	;;是否將用戶禁錮在主目錄
chroot_list_enable=YES	;啓用chroot_list_file配置項指定的用戶列表文件(默認NO)
chroot_list_file=/etc/vsftpd/chroot_list	; 指定用戶列表文件
local_root=/var/ftp ;設置本地用戶的FTP根目錄
配置 作用
chroot_local_user=NO
chroot_list_enable=NO
所有用戶均可以切換到上級目錄
chroot_local_user=YES
chroot_list_enable=NO
所有用戶均不能切換到上級目錄
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_list文件中列出的用戶,可以切換到上級目錄
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_list文件中列出的用戶,不能切換到上級目錄

(1) 當用戶不允許切換到上級目錄時,登錄後FTP站點的根目錄“/”是該FTP賬戶的主目錄,即文件的系統的/var/ftp目錄
(2) 若設置了write_enable=YES,則用戶還可對根目錄下的文件進行改寫操作
(3) 要對本地用戶查看效果,需先設置local_root=/home/vsftpd

設置用戶列表

在默認的配置下,所有的系統用戶都可以訪問FTP
限定只有指定的用戶可以訪問FTP

配置 作用
/etc/vsftpd/ftpusers 禁止登陸vsftpd服務器的用戶賬號列表(優先級最高)
/etc/vsftpd/user_list 與userlist_enable和userlist_deny設置有關
userlist_enable=YES 啓用user_list,允許user_list中的用戶登錄
userlist_enable=YES
userlist_deny=YES
禁止user_list中的用戶登錄
userlist_enable=YES
userlist_deny=NO
允許列表中的用戶登錄

綜合來看,/etc/vsftpd/ftpusers提供一份禁止用戶列表,/etc/vsftpd/user_list提供一份靈活可控的用戶列表,/etc/vsftpd/ftpusers優先級高於/etc/vsftpd/user_list

實例 系統僅允許anliu01用戶登錄vsftpd

#tail -n 3 /etc/vsftpd/vsftpd.conf
local_root=/home/vsftpd/
userlist_enable=YES
userlist_deny=NO
#cat user_list
anliu01

配置虛擬用戶

虛擬用戶,是指存放於獨立數據庫文件中的FTP用戶賬號,可以將他們映射到某個不能登錄的系統用戶賬號上,以進一步增強FTP服務器的安全

(1) 創建虛擬用戶數據庫文件

安裝db_load工具(該工具可以建立Berkeley DB格式的數據庫文件)

yum install epel-release -y
yum install db4-utils -y

創建一個文本格式的用戶名/密碼列表文件,用於存放虛擬用戶賬號

cat /etc/vsftpd/logins.txt
anliu001
123456
anliu002
123456

以文件列表爲數據源通過db_load工具創建出Berkeley DB格式的數據庫文件

[root@nfs01 vsftpd]# db_load -T -t hash -f logins.txt logins.db

db_load命令是一種固定語法
-T:允許非Berkeley DB的應用程序使用從文本格式轉換的DB數據庫文件
-t hash:指定讀取數據文件的基本方法
-f:指定數據的源文件

(2) 創建虛擬用戶的映射賬號
vsftpd服務對虛擬用戶採用映射的控制方式,把所有的虛擬用戶賬號都對應到了同一個系統用戶上,並將這個用戶的家目錄作爲所有虛擬用戶登錄的後公用的FTP主目錄

例如:創建一個用戶virtual,指定家目錄爲/var/ftp/virtual,不允許用戶登錄

useradd -d /var/ftp/virtual -s /sbin/nologin virtual
chmod -R 755 /var/ftp/virtual/	;改變目錄的權限 ,允許上傳

(3) 創建PAM認證文件
虛擬用戶的認證通過PAM機制實現

PAM是linux系統中的獨立API,它提供了各種驗證模塊以供其他程序調運。當這些程序需要進行用戶身份驗證操作時,就可以直接調運相應的模塊,而無需由自己來提供驗證功能

[root@nfs01 ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth        required /lib64/security/pam_userdb.so      db=/etc/vsftpd/logins
account     required /lib64/security/pam_userdb.so      db=/etc/vsftpd/logins

(4) 修改vsftpd配置,添加虛擬用戶支持

[root@nfs01 vsftpd]# grep -E -v "^#|^$" vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES #啓動虛擬用戶映射功能
guest_username=virtual #定製所映射的系統用戶名稱
pam_service_name=vsftpd #指定PAM認證文件
user_config_dir=/etc/vsftpd/vuser #表示虛擬用戶配置文件的存放目錄
allow_writeable_chroot=YES #去除用戶主目錄的寫權限

(5) 創建虛擬用戶配置文件
爲了對虛擬用戶的精準控制,實現不同用戶有不同權限,我們需要爲每個用戶創建獨立的配置文件

mkdir /etc/vsftpd/vuser
#cat /etc/vsftpd/vuser/anliu001
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#cat /etc/vsftpd/vuser/anliu002
anon_upload_enable=NO	;經測試用戶默認可以下載,若此項設置爲YES,用戶可上傳

在linux中測試

anliu01可以正常的文件上傳與下載(上傳後的文件屬主與屬組是virtual,文件權限是600,不能下載)
在這裏插入圖片描述anliu02只能下載,不能上傳
在這裏插入圖片描述

練習

1.在Centos 7上構建vsftp服務器。要求採用FTP虛擬用戶方式,添加2個用戶,分別是user01,user02。要求如下:
(1)用戶user01能夠對服務器/var/ftp/soft目錄中的資料管理(上傳,創建目錄,刪除文件等)
(2)用戶user02能夠下載服務器/var/ftp/soft目錄中的資料。

準備工作
yum -y install vsftpd
cp -p /etc/vsftpd/vsftpd.conf{,.bak}	;備份配置文件
yum install epel-release -y
yum install db4-utils -y
systemctl stop firewalld
setenforce 0
步驟一:創建一個文本格式的用戶名/密碼列表文件,用於存放虛擬用戶賬號
[root@nfs01 vsftpd]# vim logins.txt
user01
123456
user02
123456
步驟二:創建數據庫文件logins.db
[root@nfs01 vsftpd]# db_load -T -t hash -f logins.txt logins.db
步驟三:創建虛擬用戶的映射賬號
useradd -d /var/ftp/soft -s /sbin/nologin soft
chmod -R 755 /var/ftp/soft/	;改變目錄的權限 ,允許上傳
步驟四:創建PAM認證文件
[root@nfs01 ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth        required /lib64/security/pam_userdb.so      db=/etc/vsftpd/logins
account     required /lib64/security/pam_userdb.so      db=/etc/vsftpd/logins
步驟五:修改vsftpd配置,添加虛擬用戶支持
#vim /etc/vsftpd/vsftpd.conf
guest_enable=YES #啓動虛擬用戶映射功能
guest_username=virtual #定製所映射的系統用戶名稱
pam_service_name=vsftpd #指定PAM認證文件
user_config_dir=/etc/vsftpd/vuser #表示虛擬用戶配置文件的存放目錄
allow_writeable_chroot=YES #去除用戶主目錄的寫權限
anon_umask=022	#不設置,文件默認權限爲600,user02無法下載user01上傳的文件【文件默認不能擁有執行權限】
步驟六:創建虛擬用戶配置文件
mkdir /etc/vsftpd/vuser
#cat /etc/vsftpd/vuser/user01
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#cat /etc/vsftpd/vuser/user02
anon_upload_enable=YES
write_enable=NO

進行測試在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
2.(1)創建文件resource,對teacher有所有權限,對於student來說有可讀權限;
(2)每個學生有一個賬號(虛擬用戶實現),對應有一個目錄,這個目錄針對學生的賬號以及teacher有所有權限,對其他沒有任何權限。

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
local_root=/home/vsftpd
anon_other_write_enable=YES
[root@ftp ~]# useradd teacher	#設置密碼
[root@ftp ~]# useradd student	#設置密碼
[root@ftp ~]# mkdir /home/vsftpd
[root@ftp ~]# echo "test" >/home/vsftpd/resource
[root@ftp ~]# chmod -R 745 /home/vsftpd
[root@ftp ~]# chown -R teacher:teacher /home/vsftpd
[root@ftp ~]# chmod 744 /home/vsftpd/resource

在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章