- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業務經營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯網協會理事單位
- 安全聯盟認證網站身份V標記
- 域名注冊服務機構許可:滇D3-20230001
- 代理域名注冊服務機構:新網數碼
CentOS7上搭建FTP服務+VSFTPD
FTP 服務
?? FTP是早期的應用級協議之一,是一種基于C/S結構的雙通道協議。
?? 可以作為FTP服務器的軟件有很多,比如Wu-ftpd,Proftpd,Pureftpd,ServU,IIS,都可以。其中vsftpd是CentOS默認的FTP服務器。也是我們今天的主角,接下來將會進行重點介紹。??既然是一種C/S結構的應用,有服務端就會有客戶端。在Linux平臺上可以作為FTP客戶端的軟件也有很多,諸如ftp,lftp,lftpget,wget,curl等。在Windows上也有很多的圖形界面客戶端,例如 filezilla,CuteFtp,FlashFXP,LeapFtp 等。
FTP 用戶認證
FTP 的用戶一共有三種類型
匿名用戶:ftp,anonymous,對應Linux用戶ftp
系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
虛擬用戶:特定服務的專用用戶,獨立的用戶名/密碼文件
VSFTPD服務
vsftpd 服務,由vsftpd包提供,直接使用yum安裝就可以。
用戶認證配置文件:/etc/pam.d/vsftpd
服務腳本: /usr/lib/systemd/system/vsftpd.service,/etc/rc.d/init.d/vsftp
配置文件:/etc/vsftpd/vsftpd.conf
匿名用戶(映射為系統用戶ftp )共享文件位置:/var/ftp
系統用戶共享文件位置:用戶家目錄
虛擬用戶共享文件位置:為其映射的系統用戶的家目錄
VSFTPD服務配置
vsftpd 服務配置 大多數都在配置文件/etc/vsftpd/vsftpd.conf中,所以我們的大部分配置只要修改這個文件就可以。
查看幫助文檔
可以使用man命令查看配置文件的幫助文檔,查看有哪些選項是我們需要的,以及各種值分別代表什么含義。
man 5 vsftpd.conf 命令端口
ftp默認端口是21端口,如果配置文件中沒有明確指定的話,就是21端口。當然也可以明確指定,或者指定為別的端口。在配置文件中添加下面這一行就可以。
listen_port=21 主動模式端口
ftp 的鏈接方式有兩種,分別是主動模式和被動模式。這兩種模式都是從服務器的角度來查看和定義的。
# 這這里的選項一直定義為YES就可以。# 如果不寫這一行,默認的也是YESconnect_from_port_20=YES # 如果要重新定義主動模式的端口為其他的值的話,那就再加上下面行,并指定端口值ftp_data_port=2020 被動模式端口范圍
linux客戶端默認使用被動模式,windows 客戶端默認使用主動模式。在配置文件中加入下面兩行,代表可以定義被動模式的端口范圍。
pasv_min_port=6000 pasv_max_port=6010# 如果這個屬性指定為0的話,那么就隨機分配pasv_min_port=0 使用當地時間
設置是否使用當地時間。默認就是YES.
use_localtime=YES 匿名用戶
是否支持匿名用戶
# YES 支持匿名用戶anonymous_enable=YES
匿名用戶略過口令檢查,默認為no。如果為YES的時候,匿名用戶登陸時,不會提示用戶名和密碼,直接登陸。如果為NO的話,匿名用戶登陸時還是會提示輸入密碼,只不過,系統不會再去驗證密碼的正確性。系統默認的匿名賬戶有兩個,分別是ftp和anonymous。
no_anon_password=YES
匿名上傳。首先,文件系統上用戶的家目錄,要具備寫權限。其次,ftp服務器要開啟允許匿名上傳的配置。也就是說,ftp用戶的家家目錄需要進行配置權限。
anon_upload_enable=YES
匿名用戶能夠創建目錄。這一點與匿名上傳一樣,不僅需要注意服務的配置,同時需要注意用戶的家目錄權限。
anon_mkdir_write_enable=YES
默認只能下載全部讀的文件。這句話的意思是說,如果啟動了這句話,則匿名用戶只能下載所有用戶都具備讀權限的文件。如果有一個文件,有一個用戶不劇本讀權限,匿名用戶就不能夠下載。
anon_world_readable_only=YES
匿名用戶能否刪除和修改上傳的文件。默認是no,也就是不可以。
anon_other_write_enable=YES
指定匿名上傳文件的umask值。umask的值可以直接影響到上傳文件的權限。
anon_umask=077
指定上傳文件的默認的所有者和權限。 完成了這些指定之后,匿名用戶上傳的元數據就是我們指定的那些內容。
chown_uploads=YES(默認NO)chown_username=wangchown_upload_mode=0644 系統用戶
默認情況下,操作系統的賬戶是可以直接使用用戶名和密碼來登陸的。并且登陸成功之后,默認進入到了自己的家目錄。
所有系統用戶都映射成guest用戶,但是映射的guest賬戶,需要人為地去指定下。同時這個guest賬戶與匿名賬戶類似,不允許家目錄具有寫權限,否則容易導致安全隱患。
guest_enable=YES#配合上面選項才生效,指定guest用戶guest_username=ftp
是否允許Linux用戶登陸,默認是允許的,當然也可以禁止。
local_enable=YES
是否允許Linux用戶上傳文件,如果用戶默認允許登陸的話,linux用戶登陸成功之后,默認位于自己的家目錄,這時是允許上傳文件的。 如果將下面的這句話,改成no,則服務拒絕linux用戶上傳文件,即便位于自己的家目錄也不可以。
write_enable=YES
指定系統用戶上傳文件的默認權限
local_umask=022
非匿名用戶登錄所在目錄,當使用Linux用戶登陸成功之后,就不會默認在自己的家目錄了。相反,會位于下面指定的目錄里。
local_root=/ftproot 禁錮所有系統用戶在家目錄中
禁錮所有的用戶在家目錄中的意思是說,用戶登陸成功之后,不能夠隨意切換目錄,只能夠在自己的家目錄中進行操作。 服務默認是NO,也就是不禁錮,這樣的話,有比較大的安全隱患。
chroot_local_user=YES 禁錮或者不禁錮特定的用戶
可以針對某一些用戶進行單獨的設置,例如對某一些用戶進行禁錮,而對另外一些用戶進行禁錮。
在/etc/vsftpd/chroot_list文件中,指定需要做出特殊處理的用戶。當chroot_list_enable選項為YES的時候,列表中的用戶不被禁錮。而不在列表中的用戶則被禁錮。反之,則相反。
chroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list wu-ftp日志:默認啟用
wu-ftp日志,默認安裝,默認啟用。
xferlog_enable=YES (默認)啟用記錄上傳下載日志xferlog_std_format=YES (默認)使用wu-ftp日志格式xferlog_file=/var/log/xferlog (默認)可自動生成 vsftpd日志:默認不啟用
vsftpd日志,默認不啟用,如果想要啟用的話,應該手動進行配置修改。
#使用vsftpd日志格式,默認不啟用dual_log_enable=YES #(默認)可自動生成vsftpd_log_file=/var/log/vsftpd.log 登錄提示信息
登陸提示信息圖形界面是看不到的,只適用于ftp作為客戶端的時候??梢允褂孟旅娴姆绞絹磉M行配置。但是優先級卻不一樣。
ftpd_banner=“welcome to mage ftp server"這一句話優先生效banner_file=/etc/vsftpd/ftpbanner.txt 目錄訪問提示信息
當用戶進入到某一個目錄之后,可以給用戶一個提示消息。用來提示這個目錄的作用。在相應的目錄下建立一個隱藏文件 .message,在該文件中進行信息提示描述。
dirmessage_enable=YES (默認)message_file=.message(默認) 使用pam(Pluggable Authentication Modules)完成用戶認證
pam模塊是Linux中的一種安全驗證機制。所以vsftpd也可以根據pam模塊進行用戶的認證。pam的配置文件/etc/pam.d/vsftpd,在這個文件中指定了默認文件/etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄.而vaftpd配置文件中,定義了pam模塊。
pam_service_name=vsftpd 是否啟用控制用戶登錄的列表文件
在黑名單中的用戶,連密碼提示都沒有。
# 默認有此設置# YES的時候啟用了userlistuserlist_enable=YES# YES(默認值)黑名單,不提示口令,NO為白名單userlist_deny=YESuserlist_file=/etc/vsftpd/users_list 此為默認值 連接限制
鏈接限制,可以指定鏈接用戶的最大數量,也就是最大的并發鏈接數。
# 最大并發連接數# 如果為0的話,默認不限制max_clients=0 # 每個IP同時發起的最大連接數# 如果為0的話,則默認不限制數量max_per_ip=0 vsftpd服務指定用戶身份運行
vsftpd服務啟動時要開啟相應的進程,那么相應的進程就有一定的用戶身份。如果指定了,那么服務啟動之后,就會以指定的用戶來啟動服務進程。
nopriv_user=nobody 限定傳輸速率:字節/秒
如果在上傳和下載的過程中,沒有對速率進行限制,很容易對服務器造成損壞。所以最好進行一下限定。注意單位是 字節
# 匿名用戶的最大傳輸速率# 如果為0的話,則默認不限制anon_max_rate=0 # 本地用戶的最大傳輸速率# 如果為0的話,則默認不限制local_max_rate=0 限定鏈接時間:秒
指定用戶連接到ftp服務器上的時間。時間單位是秒,這樣做的好處是,如果用戶連接到服務器之后,卻不做任何操作的話,很容易浪費資源。這樣是一種浪費。
# 主動模式數據連接超時時長connect_timeout=60# 被動模式數據連接超時時長accept_timeout=60 # 數據連接無數據輸超時時長data_connection_timeout=300 # 無命令操作超時時長idle_session_timeout=60 優先以文本方式傳輸
文件在傳輸的過程中,可以指定是以文本方式傳輸,還是以二進制的方式傳輸。默認是以二進制的形式進行傳輸。這里有一點需要注意,如果指定了以文本方式傳輸的話,Linux平臺和Windows平臺對文本的處理方式是不一樣的,打個比方說,Linux平臺上回車符是一個字節,但是在Windows的平臺上是兩個字節,也就是CRLF,這樣也就導致,如果在Windows平臺上使用客戶端從Linux上FTP服務器下載文件,Windows會自動對文本進行轉化的,反之也是一樣。
如果我們傳輸一個二進制文件的話,二進制文件應該就會被破壞掉。
ascii_upload_enable=YESascii_download_enable=YES 配置FTP服務以非獨立服務方運行:listen=NO,默認為獨立方式
FTP服務既可以作為獨立服務運行,也可以作為非獨立服務進行運行。所謂非獨立服務,指的就是使用xinetd服務代替FTP服務來監聽21端口,當有用戶訪問FTP服務的時候,xinetd服務就會自動啟動FTP服務,并提供給用戶訪問。
listen=YES,表示以獨立的服務運行,listen=no表示以非獨立的服務進行運行。
cat /etc/xinetd.d/vsftpdservice ftp{flags = REUSEsocket_type = streamwait = nouser = rootserver = /usr/sbin/vsftpdlog_on_failure += USERIDdisable = no} 實現基于SSL的FTPS
FTP服務,默認用戶登陸時的口令是明文的。這樣很容易被獲取到,那么vsftpd服務是否支持SSL來進行加密呢?
查看是否支持SSL
# 使用下面的命令能夠查看到是否支持SSL# 查看到libssl.soldd `which vsftpd`
創建自簽名證書
# 進入到證書路徑cd /etc/pki/tls/certs/# 使用下面的命令生成證書私鑰和證書make vsftpd.pemopenssl x509 -in vsftpd.pem -noout –text
配置vsftpd服務支持SSL:/etc/vsftpd/vsftpd.conf
# 啟用SSLssl_enable=YES # 匿名不支持SSLallow_anon_ssl=NO # 本地用戶登錄加密force_local_logins_ssl=YES # 本地用戶數據傳輸加密force_local_data_ssl=YES# 指定證書路徑rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem vsftpd虛擬用戶
虛擬用戶:
??所有虛擬用戶會統一映射為一個指定的系統帳號:訪問共享位置,即為此系統帳號的家目錄。
??各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定。
虛擬用戶帳號的存儲方式:
?? 文件:編輯文本文件,此文件需要被編碼為hash格式
?????? 奇數行為用戶名,偶數行為密碼
?????? db_load -T -t hash -f vusers.txt vusers.db
?? 關系型數據庫中的表中:
?????? 實時查詢數據庫完成用戶認證
?? mysql庫:pam要依賴于pam-mysql
?????? /lib64/security/pam_mysql.so
?????? /usr/share/doc/pam_mysql-0.7/README
實現基于文件驗證的vsftpd虛擬用戶
一、創建用戶數據庫文件
# 創建用戶文件vim /etc/vsftpd/vusers.txtftp1 用戶名ftp1pass 密碼tom 用戶名tompass 密碼# 進入到相應的目錄下cd /etc/vsftpd/# 創建數據庫文件db_load -T -t hash -f vusers.txt vusers.db# 修改數據庫權限chmod 600 vusers.db
二、創建系統用戶和訪問FTP目錄
虛擬用戶訪問FTP服務器的時候,要進入到自己的家目錄下,但是系統中沒有虛擬賬戶所對應的賬號家目錄,所以我們要創建一個系統用戶,與虛擬賬戶關聯起來,這樣,當虛擬用戶登陸之后,就會進入到我們創建的系統用戶的家目錄,然后進行數據訪問。
對于CentOS7,家目錄有寫權限,用戶在登陸的時候會出錯的。所以要做一些特殊處理
# 創建系統用戶并指定家目錄useradd -d /var/ftproot -s /sbin/nologin vuser# 修改家目錄權限chmod +rx /var/ftproot/ #CentOS 7 中要做出一些特殊的配置 # 去掉家目錄寫權限chmod -w /var/ftproot/mkdir /var/ftproot/uploadsetfacl -m u:vuser:rwx /var/ftproot/upload
三、創建pam配置文件
修改vsftpd的pam模塊的配置文件 /etc/pam.d/vsftpd.db ,讓vsftpd支持pam模塊進行身份驗證。
auth required pam_userdb.so db=/etc/vsftpd/vusersaccount required pam_userdb.so db=/etc/vsftpd/vusers
四、指定pam配置文件
修改vsftpd的配置文件 /etc/vsftpd/vsftpd.conf ,給vsftpd指定pam模塊。
guest_enable=YESguest_username=vuserpam_service_name=vsftpd.db
五、SELinux設置
如果對SELinux有什么特殊要求的話,可以單獨對SELinux進行設置,如果沒有特殊要求的話,直接禁用SELinux就可以。
六、虛擬用戶建立獨立的配置文件
在vsftpd的配置文件中指定,用戶配置文件的存儲路徑,然后在/etc/目錄下,創建相應的目錄,并且在目錄中定義與用戶名一致的配置文件并寫入相應權限就可以了。
在vsftpd的配置文件 /etc/vsftpd/vsftpd.conf 中指定如下路徑.
user_config_dir=/etc/vsftpd/vusers.d/
在etc目錄下,創建如下的文件目錄,這一個目錄與前面在vsftpd配置文件中定義的一致。
mdkir /etc/vsftpd/vusers.d/
進入到/etc/vsftpd/vusers.d/ 目錄下,創建與用戶名同名的配置文件,例如用戶為tom,那么就創建一個與tom一致的配置文件。 將下面的內容,寫入配置文件,就可以進行權限控制。
# 虛擬用戶上傳權限anon_upload_enable=YES# 虛擬用戶創建文件夾anon_mkdir_write_enable=YES# 虛擬的其他用戶對指定用戶目錄的寫權限anon_other_write_enable=YES
或者還可以改變用戶的默認登陸目錄。也就是FTP用戶登陸成功之后的默認路徑。
#登錄目錄改變至指定的目錄local_root=/ftproot
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP