vsftpd服務的歸納總結
1、理論知識
1.1、配置檔案
1.1.1、vsftp的簡介
vsftp的名字是“very secure FTP daemon”的簡稱,他工作在chroot模式下(程式限定一個訪問目錄),故而比較安全。
1.1.2、工作模式
1)PORT模式(主動模式)
主動模式工作流程如下:
— 客戶端與伺服器TCP 21埠建立連線通道
— 接收資料時在此通道上傳送PORT命令(宣告一個大於1024的客戶端埠)
— 伺服器端通過TCP 20向客戶端傳送資料(建立新的連線)
注:防火牆OUTBOUND過程
2)PASV模式(被動模式)
被動模式工作流程如下:
— 客戶端與伺服器TCP 21埠建立連線通道
— 客戶端傳送PASV命令給伺服器
— 伺服器預設開啟1024至5000之間的隨機埠並通知客戶端在此埠請求資料
— 伺服器端通過此埠傳送資料
注:防火牆INBOUND過程
1.1.3、執行模式
1)standalone模式
— 一次性啟動,常駐記憶體
— 接入反省快,消耗系統資源
— 支援PAM驗證功能
2)inetd(xinetd)模式
— 外部請求則呼叫ftp程式
— 反應慢,不佔系統資源
— 單一IP限制
1.1.4、主配置檔案
1
|
/etc/vsftpd/vsftpd .conf
|
1.1.5、PAM配置檔案
1)配置檔案位置:
1
|
/etc/pam .d /vsftpd
|
2)PAM配置檔案的修改
vim編輯/etc/pam.d/vsftpd
更改前(在列表中的不允許chroot):
1
|
auth required pam_listfile.so item=user sense=deny file = /etc/vsftpd/ftpusers onerr=succeedd
|
更改後(只有在列表中的使用者才允許chroot):
1
|
auth required pam_listfile.so item=user sense=allow file = /etc/vsftpd/ftpusers onerr=faile
|
1.2、主機訪問控制
/etc/hosts.deny
1.3、啟動失敗除錯方法
啟動失敗解決:
1
|
bash -x /etc/init .d /vsftpd start
|
1.4、幫助
1
|
man vsftpd.conf
|
1.5、配置檔案引數
1.5.1、全域性配置引數
注:引數與註解正式環境下分開兩行寫,否則報錯
1)許可權引數
1
|
write_enable=YES #允許改變命令(STOR, DELE,RNFR, RNTO, MKD, RMD, APPE and SITE,預設NO)
|
2)登入資訊引數
1
2
3
4
|
dirmessage_enable=YES #換目錄時,顯示目錄下“.message”檔案的內容 ftpd_banner=Welcome to www.cmdschool.org FTP servers #登入歡迎資訊 banner_file=/etc/vsftpd/banner_file #登入成功資訊 banner_fail=/etc/vsftpd/banner_fail #登入失敗資訊 |
注意:
ftp_banner會覆蓋vsftpd預設連線後的資訊顯示;
banner_file設定會覆蓋ftp_banner的提示;
3)日誌檔案引數
1
2
3
|
xferlog_enable=YES #開啟日誌 xferlog_std_format=YES #wu-ftpd風格記錄日誌 xferlog_file=/ var /log/xferlog #記錄上傳下載的日誌
|
4)效能引數
1
2
3
4
5
6
7
8
9
|
idle_session_timeout=600 #閒置會話中斷超時
data_connection_timemout=120 #閒置資料連線超時
accept_timeout=60 #PASV模式響應資料超時
ls_recurse_enable=YES #是否允許遞迴查詢ls -R(預設YES)
dirlist_enable=YES #允許使用dir/ls(預設YES)
download_enable=YES #允許使用者下載檔案
max_clients=30 #客戶端最大數量
max_per_ip=3 #一個IP的最大連線數
use_localtime=YES #啟用當地時間(預設GMT)
|
5)安全引數
1
2
3
4
5
6
|
tcp_wrappers= yes #開啟tcp_wrapper訪問控制
max_login_fails=3 #預設試探密碼的次數
pam_service_name=vsftpd #PAM驗證配置檔名稱
nopriv_user= ftp | nobody #vsftp服務執行時的賬號
deny_file={*.exe,*.dll} #拒絕上傳下載的檔案型別
async_abor_enable=YES #是否允許執行特殊的ftp命令async ABOR.
|
6)安全SSL協議
1
2
3
4
5
6
7
|
ssl_enable=YES #開啟SSL加密協議
ssl_sslv2=YES #指定加密方式
ssl_sslv3=YES ssl_tlsv1=YES require_ssl_reuse=NO #禁用資料與控制流使用相同的ssl通道
ssl_ciphers=HIGH #加密套件
rsa_cert_file= /etc/vsftpd/ .sslkey /vsftpd .pem #指定加密證書檔案
|
7)傳輸協議
1
2
3
|
#ASCII模式傳送檔案 ascii_upload_enable=YES ascii_download_enable=YES |
8)程式相關
1
2
3
4
5
6
7
8
|
background=YES #vsftp將以監聽(listen)模式啟動 connect_timeout=60 #PORT模式響應資料超時 listen=yes #vsftp則執行在standalone模式 listen_port=21 #vsftpd監聽埠 connect_from_port_20=YES #啟用預設的20埠監聽 listen_ipv6=YES #開啟ipv6支援 pasv_min_port=50000 #PASV模式最小埠 pasv_max_port=60000 #PASV模式最大埠 |
1.5.2、本地使用者配置引數
1)前提引數
1
|
local_enable=YES #開啟普通使用者ftp訪問(預設NO,不限制chroot) |
2)許可權引數
1
2
3
4
5
6
7
8
|
local_umask=0022 #上傳檔案預設許可權設定為6644,不設定預設為0077,目錄為700 chroot_local_user=NO #禁止使用者chroot chroot_list_enable=YES #開啟chroot控制列表 chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #chroot控制列表(預設在列拒絕) userlist_enable=yes #開啟使用者登入控制列表 userlist_deny= #拒絕或允許使用者登入 userlist_file=/etc/vsftpd.user_list #使用者登入控制列表 local_root= #指定ftp家目錄 |
3)效能引數
1
|
local_max_rate=128 #本地賬號最大速率128B/s(0不限制) |
4)安全SSL協議
1
2
|
force_local_logins_ssl=YES #強制本地和虛擬使用者登入使用SSL協議
force_local_data_ssl=YES #強制本地和虛擬使用者資料使用SSL協議
|
1.5.3、匿名使用者配置引數
1)前提引數
1
2
|
anonymous_enable=YES #開啟匿名使用者登入(預設YES) ftp_username=ftp #匿名使用者的系統使用者名稱(預設ftp) |
2)許可權引數
1
2
3
4
5
6
7
|
anon_world_readable_only=YES #開啟匿名使用者檔案只讀 anon_upload_enable=YES #允許匿名使用者上傳檔案 anon_mkdir_write_enable=YES #允許匿名使用者建立資料夾 anon_other_write_enable=YES #允許匿名使用者其他寫操作(刪除,重新命名) anon_umask=022 #預設0077 chown_uploads= YES #修改匿名使用者所上傳檔案的所有權 chown_username = username #指定擁有匿名使用者上傳檔案所有權的使用者 |
3)效能引數
1
2
3
|
anon_upload_enable=NO #匿名使用者上傳檔案 anon_mkdir_write_enable=NO #匿名使用者上傳目錄許可權 anon_max_rate=64 #匿名賬號最大下載速度64B/s |
4)安全SSL協議
1
2
3
|
allow_anon_ssl=YES #允許匿名使用者使用SSL協議
force_anon_logins_ssl=YES #強制匿名使用者登入使用SSL協議
force_anon_data_ssl=YES #強制匿名使用者資料使用SSL協議
|
1.5.4、虛擬使用者配置引數
1)前提引數
1
2
|
guest_enable=YES #開啟虛擬使用者
guest_username= #指定虛擬使用者對映的本地使用者
|
2)許可權引數
1
2
|
user_config_dir= /etc/vsftpd/config #虛擬使用者配置檔案目錄
local_root= #虛擬使用者家目錄
|
3)安全SSL協議
1
2
|
force_local_logins_ssl=YES #強制本地和虛擬使用者登入使用SSL協議
force_local_data_ssl=YES #強制本地和虛擬使用者資料使用SSL協議
|
2、本地使用者驗證的FTP實踐
2.1、基礎資訊
ftpSer:
ipaddress=10.168.0.166
hostname=vsFTPSer
client:
ipaddress=10.168.0.8
hostname=client
應用場景:
ftp用於上傳網站原始碼,故需要考慮到apache的許可權。
2.2、yum源安裝
In ftpSer:
1
|
yum -y install vsftpd httpd
|
In client:
1
|
yum -y install ftp
|
2.3、配置
In ftpSer:
2.3.1、step1
啟動服務和配置開機預設啟動
1
2
|
/etc/init .d /vsftpd start
chkconfig vsftpd on
|
2.3.2、step2
1)修改配置檔案
vim編輯/etc/vsftpd/vsftpd.conf
清空之前的配置,加入如下配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
#--------日誌引數------- #開啟日誌 xferlog_enable=YES #wu-ftpd風格記錄日誌 xferlog_std_format=YES #記錄上傳下載的日誌 xferlog_file= /var/log/xferlog
#開啟登入日誌 dual_log_enable=YES #登入日誌儲存路徑 vsftpd_log_file= /var/log/vsftpd .log
#-------許可權引數-------- #禁止匿名使用者登入 anonymous_enable=NO #禁止匿名使用者上傳檔案 anon_upload_enable=NO #禁止匿名使用者建立資料夾 anon_mkdir_write_enable=NO #禁止匿名使用者其他寫操作(刪除,重新命名) anon_other_write_enable=NO #開啟普通使用者ftp訪問 local_enable=YES #上傳檔案預設許可權 local_umask=022 #開啟使用者登入控制列表 userlist_enable=YES #禁止使用者chroot chroot_local_user=NO #開啟chroot控制列表 chroot_list_enable=YES #chroot控制列表 chroot_list_file= /etc/vsftpd/vsftpd .chroot_list
#允許改變系統 write_enable=YES #---------安全引數---------- #允許執行特殊的ftp命令async ABOR. async_abor_enable=YES #開啟tcp_wrapper訪問控制 tcp_wrappers=YES #PAM驗證配置檔名稱 pam_service_name=vsftpd #---------登入訊息---------- dirmessage_enable=YES ftpd_banner=Welcome to www.cmdschool.org FTP servers #---------進行配置--------- #listen模式啟動 background=YES #執行在standalone模式 listen=YES #PAM驗證配置檔名稱 pam_service_name=vsftpd #PASV模式最小埠 pasv_min_port=50000 #PASV模式最大埠 pasv_max_port=60000 #---------傳輸相關--------- ascii_upload_enable=YES ascii_download_enable=YES |
2)重啟服務
1
|
/etc/init .d /vsftpd restart
|
2.3.3、step3
配置防火牆
vim編輯/etc/sysconfig/iptables
1
2
|
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 50000:60000 -j ACCEPT |
2.3.4、step4
建立ftp目錄
1
2
|
mkdir /var/www/www .cmdschool.org/
echo www.cmdschool.org > index.html
|
2.3.5、step5
建立ftp使用者並修改密碼
1
2
3
|
useradd ftp_user1 -d /var/www/www .cmdschool.org/ -s /sbin/nologin
echo ftppwd | passwd --stdin ftp_user1
usermod -G apache ftp_user1
|
2.3.6、step6
許可權調整
1
2
3
|
chown :apache -R /var/www/www .cmdschool.org/
chmod g+s /var/www/www .cmdschool.org/
chmod 770 -R /var/www/www .cmdschool.org/
|
2.3.7、step7
配置自動生成chroot_list
1)建立指令碼資料夾
1
|
mkdir ~ /script
|
2)vim編輯~/script/ftp_chroot.sh
鍵入如下內容:
1
|
cat /etc/passwd | cut -d : -f1 > /etc/vsftpd/vsftpd .chroot_list
|
3)新增計劃任務
1
|
crontab -e
|
加入如下內容:
1
|
* /5 * * * * sh ~ /script/ftp_chroot .sh
|
2.3.8、step8
關閉selinux
1
2
|
setenforce 0 sed -i `s/SELINUX=enforcing/SELINUX=disabled/g` /etc/selinux/config
|
2.3.9、step9
1
2
|
usermod -L ftp_user1
usermod -U ftp_user1
|
3、本地使用者驗證的SSL加密實踐
2.1、yum源
In ftpSer:
1
|
yum -y install tcpdump
|
In ftpSer:
1
|
yum -y install lftp
|
2.2、SSL加密的必要性
In ftpSer:
1
|
tcpdump port 21 -nA |
In client:
1
2
3
4
5
|
lftp open 10.168.0.166
user ftp_user1 #輸入使用者名稱
ftppwd #輸入密碼
ls |
In ftpSer:
顯示如下:
1
2
3
4
5
|
#前有節刪 ..%. ...USER ftp_user1 #中間有節刪 ..%. ...PASS 123 #後有節刪 |
2.3、配置
In ftpSer:
2.3.1、建立證書目錄
1
2
|
mkdir /etc/vsftpd/ .sslkey
cd /etc/vsftpd/ .sslkey
|
2.3.2、建立證書
1
|
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem |
互動模式如下(根據實際情況填寫):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Generating a 1024 bit RSA private key ....++++++ ...........++++++ writing new private key to `vsftpd.pem`
----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter `.` , the field will be left blank.
----- Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:GD Locality Name (eg, city) [Default City]:DG Organization Name (eg, company) [Default Company Ltd]:cmdschool.org Organizational Unit Name (eg, section) []:MIS Common Name (eg, your name or your server`s hostname ) []:ftpSer
Email Address []:will@cmdschool.org |
2.3.3、設定證書目錄許可權
In ftpSer:
1
|
chmod -R 400 /etc/vsftpd/ .sslkey/
|
2.3.4、載入證書配置引數
In ftpSer:
vim編輯/etc/vsftpd/vsftpd.conf
末尾加入如下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#--------SSL------- #開啟SSL加密協議 ssl_enable=YES #指定加密方式 ssl_sslv2=YES ssl_sslv3=YES ssl_tlsv1=YES #強制本地和虛擬使用者登入使用SSL協議 force_local_logins_ssl=YES #強制本地和虛擬使用者資料使用SSL協議 force_local_data_ssl=YES #禁用資料與控制流使用相同的ssl通道 require_ssl_reuse=NO #加密套件 ssl_ciphers=HIGH #指定加密證書檔案 rsa_cert_file= /etc/vsftpd/ .sslkey /vsftpd .pem
|
2.3.5、驗證
In ftpSer:
1
|
tcpdump port 21 -nA |
In client:
1
2
3
4
5
|
lftp open 10.168.0.166
user ftp_user1 #輸入使用者名稱
ftppwd #輸入密碼
ls |
In ftpSer:
注:監聽的資訊無法找到明文的使用者名稱和密碼。
相關文章
- jQuery學習總結歸納jQuery
- Oracle的鎖機制歸納總結Oracle
- MHA工具的優缺點歸納總結
- Vue 路由知識點歸納總結Vue路由
- HTTP標頭學習總結歸納HTTP
- Python時間格式歸納總結Python
- MYSQL常用的效能指標總結和歸納MySql指標
- 轉貼:Oracle的鎖機制歸納總結Oracle
- Laravel-admin 問題歸納總結Laravel
- 物件導向知識點總結歸納物件
- pt-osc工具的優缺點歸納總結
- 【PyQt5】QTableWidget 的總結與歸納(轉載)QT
- [PyQt5] QTableWidget 的總結與歸納(轉載)QT
- Peer Dependency 一些使用場景的歸納總結
- docker搭建vsftpd服務DockerFTP
- FTP服務(vsftpd)配置FTP
- Spring歸納小結Spring
- Linux基礎優化與安全歸納總結Linux優化
- PTA7~9題目集總結與歸納
- 概率論與數理統計的學習(歸納+總結)
- MySQL主從延遲解決方法的歸納和總結MySql
- SQL Azure與SQL Server的異同點總結和歸納SQLServer
- Solr與Elasticsearch的優缺點比較總結和歸納SolrElasticsearch
- linux vsftpd 服務配置LinuxFTP
- yum安裝vsftpd服務FTP
- 動作遊戲戰鬥系統總結歸納&思考(中)遊戲
- Samba服務的配置總結Samba
- 對應的前端知識總結歸納(常被問到的知識)前端
- Java獲取多執行緒執行結果方式的歸納與總結Java執行緒
- 資料結構第一章知識點歸納總結資料結構
- React Fiber原始碼分析 第四篇(歸納總結)React原始碼
- 動作遊戲戰鬥系統框架總結歸納&思考(上)遊戲框架
- NFS服務配置總結NFS
- nacos服務治理總結
- 最全的資料結構解析與歸納資料結構
- vsftpd安裝使用總結FTP
- Java程式設計技巧:if-else優化實踐總結歸納Java程式設計優化
- JavaScript識別符號命名規則總結和保留字歸納JavaScript符號