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模式(被動模式)
被動模式工作流程如下:
-- 用戶端發送PASV指令給伺服器
-- 伺服器預設開啟1024至5000之間的随機端口并通知用戶端在此端口請求資料
-- 伺服器端通過此端口傳送資料
注:防火牆INBOUND過程
1.1.3、運作模式
1)standalone模式
-- 一次性啟動,常駐記憶體
-- 接入檢討快,消耗系統資源
-- 支援PAM驗證功能
2)inetd(xinetd)模式
-- 外部請求則調用ftp程序
-- 反應慢,不占系統資源
-- 單一IP限制
1.1.4、主配置檔案
1
<code>/etc/vsftpd/vsftpd</code><code>.conf</code>
1.1.5、PAM配置檔案
1)配置檔案位置:
<code>/etc/pam</code><code>.d</code><code>/vsftpd</code>
2)PAM配置檔案的修改
vim編輯/etc/pam.d/vsftpd
更改前(在清單中的不允許chroot):
<code>auth required pam_listfile.so item=user sense=deny </code><code>file</code><code>=</code><code>/etc/vsftpd/ftpusers</code> <code>onerr=succeedd</code>
更改後(隻有在清單中的使用者才允許chroot):
<code>auth required pam_listfile.so item=user sense=allow </code><code>file</code><code>=</code><code>/etc/vsftpd/ftpusers</code> <code>onerr=faile</code>
1.2、主機通路控制
/etc/hosts.deny
1.3、啟動失敗調試方法
啟動失敗解決:
<code>bash</code> <code>-x </code><code>/etc/init</code><code>.d</code><code>/vsftpd</code> <code>start</code>
1.4、幫助
<code>man</code> <code>vsftpd.conf</code>
1.5、配置檔案參數
1.5.1、全局配置參數
注:參數與注解正式環境下分開兩行寫,否則報錯
1)權限參數
<code>write_enable=YES </code><code>#允許改變指令(STOR, DELE,RNFR, RNTO, MKD, RMD, APPE and SITE,預設NO)</code>
2)登入資訊參數
2
3
4
<code>dirmessage_enable=YES #換目錄時,顯示目錄下“.message”檔案的内容</code>
<code>ftpd_banner=Welcome to www.cmdschool.org FTP servers #登入歡迎資訊</code>
<code>banner_file=/etc/vsftpd/banner_file #登入成功資訊</code>
<code>banner_fail=/etc/vsftpd/banner_fail #登入失敗資訊</code>
注意:
ftp_banner會覆寫vsftpd預設連接配接後的資訊顯示;
banner_file設定會覆寫ftp_banner的提示;
3)日志檔案參數
<code>xferlog_enable=YES #開啟日志</code>
<code>xferlog_std_format=YES #wu-ftpd風格記錄日志</code>
<code>xferlog_file=/</code><code>var</code><code>/log/xferlog #記錄上傳下載下傳的日志</code>
4)性能參數
5
6
7
8
9
<code>idle_session_timeout=600 </code><code>#閑置會話中斷逾時</code>
<code>data_connection_timemout=120 </code><code>#閑置資料連接配接逾時</code>
<code>accept_timeout=60 </code><code>#PASV模式響應資料逾時</code>
<code>ls_recurse_enable=YES </code><code>#是否允許遞歸查詢ls -R(預設YES)</code>
<code>dirlist_enable=YES </code><code>#允許使用dir/ls(預設YES)</code>
<code>download_enable=YES </code><code>#允許使用者下載下傳檔案</code>
<code>max_clients=30 </code><code>#用戶端最大數量</code>
<code>max_per_ip=3 </code><code>#一個IP的最大連接配接數</code>
<code>use_localtime=YES </code><code>#啟用當地時間(預設GMT)</code>
5)安全參數
<code>tcp_wrappers=</code><code>yes</code> <code>#開啟tcp_wrapper通路控制</code>
<code>max_login_fails=3 </code><code>#預設試探密碼的次數</code>
<code>pam_service_name=vsftpd </code><code>#PAM驗證配置檔案名稱</code>
<code>nopriv_user=</code><code>ftp</code> <code>| nobody </code><code>#vsftp服務運作時的賬号</code>
<code>deny_file={*.exe,*.dll} </code><code>#拒絕上傳下載下傳的檔案類型</code>
<code>async_abor_enable=YES </code><code>#是否允許運作特殊的ftp指令async ABOR.</code>
6)安全SSL協定
<code>ssl_enable=YES </code><code>#開啟SSL加密協定</code>
<code>ssl_sslv2=YES </code><code>#指定加密方式</code>
<code>ssl_sslv3=YES</code>
<code>ssl_tlsv1=YES</code>
<code>require_ssl_reuse=NO </code><code>#禁用資料與控制流使用相同的ssl通道</code>
<code>ssl_ciphers=HIGH </code><code>#加密套件</code>
<code>rsa_cert_file=</code><code>/etc/vsftpd/</code><code>.sslkey</code><code>/vsftpd</code><code>.pem </code><code>#指定加密證書檔案</code>
7)傳輸協定
<code>#ASCII模式傳送檔案</code>
<code>ascii_upload_enable=YES</code>
<code>ascii_download_enable=YES</code>
8)程序相關
<code>background=YES #vsftp将以監聽(listen)模式啟動</code>
<code>connect_timeout=60 #PORT模式響應資料逾時</code>
<code>listen=yes #vsftp則運作在standalone模式</code>
<code>listen_port=21 #vsftpd監聽端口</code>
<code>connect_from_port_20=YES #啟用預設的20端口監聽</code>
<code>listen_ipv6=YES #開啟ipv6支援</code>
<code>pasv_min_port=50000 #PASV模式最小端口</code>
<code>pasv_max_port=60000 #PASV模式最大端口</code>
1.5.2、本地使用者配置參數
1)前提參數
<code>local_enable=YES #開啟普通使用者ftp通路(預設NO,不限制chroot)</code>
2)權限參數
<code>local_umask=0022 #上傳檔案預設權限設定為6644,不設定預設為0077,目錄為700</code>
<code>chroot_local_user=NO #禁止使用者chroot</code>
<code>chroot_list_enable=YES #開啟chroot控制清單</code>
<code>chroot_list_file=/etc/vsftpd/vsftpd.chroot_list #chroot控制清單(預設在列拒絕)</code>
<code>userlist_enable=yes #開啟使用者登入控制清單</code>
<code>userlist_deny= #拒絕或允許使用者登入</code>
<code>userlist_file=/etc/vsftpd.user_list #使用者登入控制清單</code>
<code>local_root= #指定ftp家目錄</code>
3)性能參數
<code>local_max_rate=128 #本地賬号最大速率128B/s(0不限制)</code>
4)安全SSL協定
<code>force_local_logins_ssl=YES </code><code>#強制本地和虛拟使用者登入使用SSL協定</code>
<code>force_local_data_ssl=YES </code><code>#強制本地和虛拟使用者資料使用SSL協定</code>
1.5.3、匿名使用者配置參數
1)前提參數
<code>anonymous_enable=YES #開啟匿名使用者登入(預設YES)</code>
<code>ftp_username=ftp #匿名使用者的系統使用者名(預設ftp)</code>
<code>anon_world_readable_only=YES #開啟匿名使用者檔案隻讀</code>
<code>anon_upload_enable=YES #允許匿名使用者上傳檔案</code>
<code>anon_mkdir_write_enable=YES #允許匿名使用者建立檔案夾</code>
<code>anon_other_write_enable=YES #允許匿名使用者其他寫操作(删除,重命名)</code>
<code>anon_umask=022 #預設0077</code>
<code>chown_uploads= YES #修改匿名使用者所上傳檔案的所有權</code>
<code>chown_username = username #指定擁有匿名使用者上傳檔案所有權的使用者</code>
<code>anon_upload_enable=NO #匿名使用者上傳檔案</code>
<code>anon_mkdir_write_enable=NO #匿名使用者上傳目錄權限</code>
<code>anon_max_rate=64 #匿名賬号最大下載下傳速度64B/s</code>
<code>allow_anon_ssl=YES </code><code>#允許匿名使用者使用SSL協定</code>
<code>force_anon_logins_ssl=YES </code><code>#強制匿名使用者登入使用SSL協定</code>
<code>force_anon_data_ssl=YES </code><code>#強制匿名使用者資料使用SSL協定</code>
1.5.4、虛拟使用者配置參數
<code>guest_enable=YES </code><code>#開啟虛拟使用者</code>
<code>guest_username= </code><code>#指定虛拟使用者映射的本地使用者</code>
<code>user_config_dir=</code><code>/etc/vsftpd/config</code> <code>#虛拟使用者配置檔案目錄</code>
<code>local_root= </code><code>#虛拟使用者家目錄</code>
3)安全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:
<code>yum -y </code><code>install</code> <code>vsftpd httpd</code>
In client:
<code> </code><code>yum -y </code><code>install</code> <code>ftp</code>
2.3、配置
2.3.1、step1
啟動服務和配置開機預設啟動
<code>/etc/init</code><code>.d</code><code>/vsftpd</code> <code>start</code>
<code> </code><code>chkconfig vsftpd on</code>
2.3.2、step2
1)修改配置檔案
vim編輯/etc/vsftpd/vsftpd.conf
清空之前的配置,加入如下配置
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
<code>#--------日志參數-------</code>
<code>#開啟日志</code>
<code>xferlog_enable=YES</code>
<code>#wu-ftpd風格記錄日志</code>
<code>xferlog_std_format=YES</code>
<code>#記錄上傳下載下傳的日志</code>
<code>xferlog_file=</code><code>/var/log/xferlog</code>
<code>#開啟登入日志</code>
<code>dual_log_enable=YES</code>
<code>#登入日志儲存路徑</code>
<code>vsftpd_log_file=</code><code>/var/log/vsftpd</code><code>.log</code>
<code>#-------權限參數--------</code>
<code>#禁止匿名使用者登入</code>
<code>anonymous_enable=NO</code>
<code>#禁止匿名使用者上傳檔案</code>
<code>anon_upload_enable=NO</code>
<code>#禁止匿名使用者建立檔案夾</code>
<code>anon_mkdir_write_enable=NO</code>
<code>#禁止匿名使用者其他寫操作(删除,重命名)</code>
<code>anon_other_write_enable=NO</code>
<code>#開啟普通使用者ftp通路</code>
<code>local_enable=YES</code>
<code>#上傳檔案預設權限</code>
<code>local_umask=022</code>
<code>#開啟使用者登入控制清單</code>
<code>userlist_enable=YES</code>
<code>#禁止使用者chroot</code>
<code>chroot_local_user=NO</code>
<code>#開啟chroot控制清單</code>
<code>chroot_list_enable=YES</code>
<code>#chroot控制清單</code>
<code>chroot_list_file=</code><code>/etc/vsftpd/vsftpd</code><code>.chroot_list</code>
<code>#允許改變系統</code>
<code>write_enable=YES</code>
<code>#---------安全參數----------</code>
<code>#允許運作特殊的ftp指令async ABOR.</code>
<code>async_abor_enable=YES</code>
<code>#開啟tcp_wrapper通路控制</code>
<code>tcp_wrappers=YES</code>
<code>#PAM驗證配置檔案名稱</code>
<code>pam_service_name=vsftpd</code>
<code>#---------登入消息----------</code>
<code>dirmessage_enable=YES</code>
<code>ftpd_banner=Welcome to www.cmdschool.org FTP servers</code>
<code>#---------進行配置---------</code>
<code>#listen模式啟動</code>
<code>background=YES</code>
<code>#運作在standalone模式</code>
<code>listen=YES</code>
<code>#PASV模式最小端口</code>
<code>pasv_min_port=50000</code>
<code>#PASV模式最大端口</code>
<code>pasv_max_port=60000</code>
<code>#---------傳輸相關---------</code>
2)重新開機服務
<code>/etc/init</code><code>.d</code><code>/vsftpd</code> <code>restart</code>
2.3.3、step3
配置防火牆
vim編輯/etc/sysconfig/iptables
<code>-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT</code>
<code>-A INPUT -p tcp -m state --state NEW -m tcp --dport 50000:60000 -j ACCEPT</code>
2.3.4、step4
建立ftp目錄
<code>mkdir</code> <code>/var/www/www</code><code>.cmdschool.org/ </code>
<code>echo</code> <code>www.cmdschool.org > index.html</code>
2.3.5、step5
建立ftp使用者并修改密碼
<code>useradd</code> <code>ftp_user1 -d </code><code>/var/www/www</code><code>.cmdschool.org/ -s </code><code>/sbin/nologin</code>
<code>echo</code> <code>ftppwd | </code><code>passwd</code> <code>--stdin ftp_user1</code>
<code>usermod</code> <code>-G apache ftp_user1</code>
2.3.6、step6
權限調整
<code>chown</code> <code>:apache -R </code><code>/var/www/www</code><code>.cmdschool.org/</code>
<code>chmod</code> <code>g+s </code><code>/var/www/www</code><code>.cmdschool.org/</code>
<code>chmod</code> <code>770 -R </code><code>/var/www/www</code><code>.cmdschool.org/</code>
2.3.7、step7
配置自動生成chroot_list
1)建立腳本檔案夾
<code>mkdir</code> <code>~</code><code>/script</code>
2)vim編輯~/script/ftp_chroot.sh
鍵入如下内容:
<code>cat</code> <code>/etc/passwd</code> <code>| </code><code>cut</code> <code>-d : -f1 > </code><code>/etc/vsftpd/vsftpd</code><code>.chroot_list</code>
3)添加計劃任務
<code>crontab</code> <code>-e</code>
加入如下内容:
<code>*</code><code>/5</code> <code>* * * * sh ~</code><code>/script/ftp_chroot</code><code>.sh</code>
2.3.8、step8
關閉selinux
<code>setenforce 0</code>
<code>sed</code> <code>-i </code><code>'s/SELINUX=enforcing/SELINUX=disabled/g'</code> <code>/etc/selinux/config</code>
2.3.9、step9
<code>usermod</code> <code>-L ftp_user1</code>
<code>usermod</code> <code>-U ftp_user1</code>
3、本地使用者驗證的SSL加密實踐
2.1、yum源
<code>yum -y </code><code>install</code> <code>tcpdump</code>
<code>yum -y </code><code>install</code> <code>lftp</code>
2.2、SSL加密的必要性
<code>tcpdump port 21 -nA</code>
<code>lftp</code>
<code>open</code> <code>10.168.0.166</code>
<code>user ftp_user1 </code><code>#輸入使用者名</code>
<code>ftppwd </code><code>#輸入密碼</code>
<code>ls</code>
顯示如下:
<code>#前有節删</code>
<code>..%. ...USER ftp_user1</code>
<code>#中間有節删</code>
<code>..%. ...PASS 123</code>
<code>#後有節删</code>
2.3.1、建立證書目錄
<code>mkdir</code> <code>/etc/vsftpd/</code><code>.sslkey</code>
<code>cd</code> <code>/etc/vsftpd/</code><code>.sslkey</code>
2.3.2、建立證書
<code>openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem</code>
互動模式如下(根據實際情況填寫):
<code>Generating a 1024 bit RSA private key</code>
<code>....++++++</code>
<code>...........++++++</code>
<code>writing new private key to </code><code>'vsftpd.pem'</code>
<code>-----</code>
<code>You are about to be asked to enter information that will be incorporated</code>
<code>into your certificate request.</code>
<code>What you are about to enter is what is called a Distinguished Name or a DN.</code>
<code>There are quite a few fields but you can leave some blank</code>
<code>For some fields there will be a default value,</code>
<code>If you enter </code><code>'.'</code><code>, the field will be left blank.</code>
<code>Country Name (2 letter code) [XX]:CN</code>
<code>State or Province Name (full name) []:GD</code>
<code>Locality Name (eg, city) [Default City]:DG</code>
<code>Organization Name (eg, company) [Default Company Ltd]:cmdschool.org</code>
<code>Organizational Unit Name (eg, section) []:MIS</code>
<code>Common Name (eg, your name or your server's </code><code>hostname</code><code>) []:ftpSer</code>
<code>Email Address []:[email protected]</code>
2.3.3、設定證書目錄權限
<code>chmod</code> <code>-R 400 </code><code>/etc/vsftpd/</code><code>.sslkey/</code>
2.3.4、加載證書配置參數
末尾加入如下配置:
<code>#--------SSL-------</code>
<code>#開啟SSL加密協定</code>
<code>ssl_enable=YES</code>
<code>#指定加密方式</code>
<code>ssl_sslv2=YES</code>
<code>#強制本地和虛拟使用者登入使用SSL協定</code>
<code>force_local_logins_ssl=YES</code>
<code>#強制本地和虛拟使用者資料使用SSL協定</code>
<code>force_local_data_ssl=YES</code>
<code>#禁用資料與控制流使用相同的ssl通道</code>
<code>require_ssl_reuse=NO</code>
<code>#加密套件</code>
<code>ssl_ciphers=HIGH</code>
<code>#指定加密證書檔案</code>
<code>rsa_cert_file=</code><code>/etc/vsftpd/</code><code>.sslkey</code><code>/vsftpd</code><code>.pem</code>
2.3.5、驗證
注:監聽的資訊無法找到明文的使用者名和密碼。
本文轉自 tanzhenchao 51CTO部落格,原文連結:http://blog.51cto.com/cmdschool/1712760,如需轉載請自行聯系原作者