#####################################
FTP簡介
vsftpd基本使用
明文傳輸帶來的安全隐患
安全通信方式
vsftpd + PAM + mysql實作虛拟使用者
檔案傳輸服務位于應用層,監聽21/tcp端口,資料傳輸模式為自适應,沒有交叉編碼能力Mine,遵循原檔案本身格式,基于TCP協定實作,它有兩個連接配接,指令連接配接和資料連接配接,它的工作模式有兩種,主動模式和被動模式。
主動模式
<a target="_blank" href="http://blog.51cto.com/attachment/201309/222553294.png"></a>
被動模式
<a target="_blank" href="http://blog.51cto.com/attachment/201309/222712395.png"></a>
特性
檔案服務權限等于檔案系統權限和檔案共享權限的交集
支援虛拟使用者
家目錄在/var/ftp目錄下,/目錄被鎖定為其家目錄
支援匿名使用者
支援系統使用者
家目錄目錄在/home/username目錄下,/目錄沒有鎖定,可以切換 lcd
支援基于PAM實作使用者認證
安裝
1
2
3
4
5
6
7
8
9
<code>yum </code><code>install</code> <code>vsftpd</code>
<code>service vsftpd start</code>
<code>chkconfig vsftpd on</code>
<code>/etc/vsftpd</code> <code>配置檔案</code>
<code>/etc/init</code><code>.d</code><code>/vsftpd</code> <code>服務腳本</code>
<code>/usr/sbin/vsftpd</code> <code>守護程序</code>
<code>/etc/pam</code><code>.d/* 配置檔案</code>
<code>/lib/security</code> <code>認證子產品</code>
<code>/var/ftp</code> <code>檔案目錄,不允許除root使用者之外的其他使用者具有寫權限</code>
常用選項
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<code>anonymous_enable=YES 啟用匿名使用者anonymous</code>
<code>local_enable=YES 啟用系統使用者</code>
<code>write_enable=YES 開啟寫入</code>
<code>anon_upload_enable=YES 開啟上傳</code>
<code>anon_mkdir_write_enable=YES 開啟目錄建立</code>
<code>anon_other_write_enable=YES 開啟其他寫權限,例如delete等……</code>
<code>dirmessage_enable=YES 開啟目錄進入歡迎提示</code>
<code> </code><code>vim </code><code>/var/ftp/upload/</code><code>.message 當使用者切換到此目錄時候會顯示</code>
<code>xferlog_enable=YES 開啟傳輸日志</code>
<code>xferlog_file=</code><code>/var/log/vsftpd</code><code>.log 定義傳輸日志存儲位置和名稱</code>
<code>#chown_uploads=YES 是否開啟修改使用者上傳之後修改使用者屬主</code>
<code>#chown_username=whoever 修改為誰?</code>
<code>#idle_session_timeout=600 指令連接配接逾時時間</code>
<code>#data_connection_timeout=120 資料連接配接逾時時間</code>
<code>#ascii_upload_enable=YES 文本模式上傳</code>
<code>#ascii_download_enable=YES 文本模式下載下傳</code>
<code>chroot_list_enable=YES 禁锢使用者至自己家目錄</code>
<code>chroot_list_file=</code><code>/etc/vsftpd/chroot_list</code><code>通過使用者清單禁锢那些使用者</code>
<code>#chroot_local_user=YES 禁锢所有使用者至自己家目錄,需要注釋上面兩項</code>
<code>listen=YES vsftpd是否工作為一個獨立守護程序類型;</code>
<code> </code><code>獨立守護程序适合于 (通路量大,線上時間長的服務)</code>
<code> </code><code>瞬時守護程序 (通路量比較小,線上時間不長的服務)</code>
<code>pam_service_name=vsftpd 基于pam的認證</code>
<code> </code><code>/etc/vsftpd/ftpusers</code> <code>(檔案中使用者不能登入,清空</code><code>/etc/vsftpd/user_list</code><code>後才真正由此檔案控制)</code>
<code>userlist_enable=YES 檔案的使用者不允許登入(</code><code>/etc/vsftpd/user_list</code><code>)</code>
<code>userlist_deny=NO 僅允許檔案中的使用者可以登入(</code><code>/etc/vsftpd/user_list</code><code>)</code>
<code>tcp_wrappers=YES</code>
<code>max_clients 最多允許幾個IP通路</code>
<code>max_per_ip 一個IP最多幾個請求</code>
舉例:讓匿名使用者可以上傳檔案
<code>anon_upload_enable=YES 開啟</code>
<code>mkdir</code> <code>/var/ftp/upload</code>
<code>setfacl -m u:</code><code>ftp</code><code>:rwx </code><code>/var/ftp/upload/</code>
<code>getfacl </code><code>/var/ftp/upload/</code>
使用用戶端連接配接FTP伺服器
<a target="_blank" href="http://blog.51cto.com/attachment/201309/230924425.png"></a>
在伺服器端使用tcpdum指令抓包
tcpdump -i eth0 -nn -X -vv tcp port 21 and ip host 192.168.1.30
<a target="_blank" href="http://blog.51cto.com/attachment/201309/231137952.png"></a>
ftps:ftp+ssl/tls
sftp:OpenSSH,SubSystem,sftp(SSH)
建立私有CA
<code>cd</code> <code>/etc/pki/CA</code>
<code>mkdir</code> <code>certs newcerts crl</code>
<code>echo</code> <code>01 > serial</code>
<code>(</code><code>umask</code> <code>077;openssl genrsa -out private</code><code>/cakey</code><code>.pem 2048)建立私鑰</code>
<code>openssl req -new -x509 -key private</code><code>/cakey</code><code>.pem -out cacert.pem -days 3650生成自簽證書</code>
生成證書頒發請求并簽署
<code>mkdir</code> <code>/etc/vsftpd/ssl</code>
<code>cd</code> <code>/etc/vsftpd/ssl</code>
<code>(</code><code>umask</code> <code>077; openssl genrsa -out vsftpd.key 2048;) 生成私鑰</code>
<code>openssl req -new -key vsftpd.key -out vsftpd.csr 生成證書頒發請求</code>
<code>openssl ca -</code><code>in</code> <code>vsftpd.csr -out vsftpd.crt 簽署證書</code>
修改配置檔案etc/vsftpd/vsftpd.conf支援ssl、tsl功能
<code># ssl or tls</code>
<code>ssl_enable=YES</code>
<code>ssl_sslv3=YES</code>
<code>ssl_tlsv1=YES</code>
<code>allow_anon_ssl=NO</code>
<code>force_local_data_ssl=YES</code>
<code>force_local_logins_ssl=YES</code>
<code>rsa_cert_file=</code><code>/etc/vsftpd/ssl/vsftpd</code><code>.crt</code>
<code>rsa_private_key_file=</code><code>/etc/vsftpd/ssl/vsftpd</code><code>.key</code>
用戶端軟體登陸
本文中使用FlashFXP作為FTP用戶端
<a target="_blank" href="http://blog.51cto.com/attachment/201309/233903654.png"></a>
點選連接配接
<a target="_blank" href="http://blog.51cto.com/attachment/201309/234155400.png"></a>
成功連接配接
<a target="_blank" href="http://blog.51cto.com/attachment/201309/234501971.png"></a>
在伺服器端抓包發現是明文
<a target="_blank" href="http://blog.51cto.com/attachment/201309/234609661.png"></a>
一、安裝所需要程式
事先安裝好開發環境和mysql資料庫;
<code>yum -y </code><code>install</code> <code>mysql-server mysql-devel</code>
<code>yum -y groupinstall </code><code>"Development Tools"</code> <code>"Development Libraries"</code>
安裝pam_mysql-0.7RC1
<code>tar</code> <code>zxvf pam_mysql-0.7RC1.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>pam_mysql-0.7RC1</code>
<code>.</code><code>/configure</code> <code>--with-mysql=</code><code>/usr</code> <code>--with-opensslrpm包的mysql</code>
<code>make</code>
<code>make</code> <code>install</code>
<a target="_blank" href="http://blog.51cto.com/attachment/201309/002648483.png"></a>
安裝vsftpd
<code>yum -y </code><code>install</code> <code>vsftpd</code>
二、建立虛拟使用者賬号
準備資料庫及相關表,首先請確定mysql服務已經正常啟動。而後,按需要建立存儲虛拟使用者的資料庫即可,這裡将其建立為vsftpd資料庫。
<code>mysql> create database vsftpd;</code>
<code>mysql> grant </code><code>select</code> <code>on vsftpd.* to vsftpd@localhost identified by </code><code>'vsftpd'</code><code>;</code>
<code>mysql> grant </code><code>select</code> <code>on vsftpd.* to [email protected] identified by </code><code>'vsftpd'</code><code>;</code>
<code>mysql> flush privileges;</code>
<code>mysql> use vsftpd;</code>
<code>mysql> create table </code><code>users</code> <code>(</code>
<code> </code><code>-> </code><code>id</code> <code>int AUTO_INCREMENT NOT NULL,</code>
<code> </code><code>-> name char(20) binary NOT NULL,</code>
<code> </code><code>-> password char(48) binary NOT NULL,</code>
<code> </code><code>-> primary key(</code><code>id</code><code>)</code>
<code> </code><code>-> );</code>
添加測試的虛拟,使用者pam_mysql的password()函數與MySQL的password()函數可能會有所不同。
<code>insert into </code><code>users</code> <code>(name,password) value (</code><code>'bob'</code><code>,</code><code>'123'</code><code>),(</code><code>'tom'</code><code>,</code><code>'321'</code><code>),(</code><code>'lucy'</code><code>,</code><code>'333'</code><code>);</code>
三、配置vsftpd
建立pam認證所需檔案vi /etc/pam.d/vsftpd.mysql
<code>auth required </code><code>/usr/lib/security/pam_mysql</code><code>.so user=vsftpd </code><code>passwd</code><code>=vsftpd host=localhost db=vsftpd table=</code><code>users</code> <code>usercolumn=name passwdcolumn=password crypt=0</code>
<code>account required </code><code>/usr/lib/security/pam_mysql</code><code>.so user=vsftpd </code><code>passwd</code><code>=vsftpd host=localhost db=vsftpd table=</code><code>users</code> <code>usercolumn=name passwdcolumn=password crypt=0</code>
修改vsftpd的配置檔案,使其适應mysql認證,建立虛拟使用者映射的系統使用者及對應的目錄
<code>useradd</code> <code>-s </code><code>/sbin/nologin</code> <code>-d </code><code>/var/ftproot</code> <code>vuser</code>
<code>chmod</code> <code>go+rx </code><code>/var/ftproot</code>
請確定/etc/vsftpd.conf中已經啟用了以下選項
<code>anonymous_enable=YES</code>
<code>local_enable=YES</code>
<code>write_enable=YES</code>
<code>anon_upload_enable=YES</code>
<code>anon_mkdir_write_enable=NO</code>
<code>chroot_local_user=YES</code>
修改為NO,驗證不通過SSL
<code>force_local_data_ssl=NO</code>
<code>force_local_logins_ssl=NO</code>
而後添加以下選項
<code>guest_enable=YES 啟用來賓使用者</code>
<code>guest_username=vuser 來賓使用者為</code>
并確定pam_service_name選項的值如下所示
<code>pam_service_name=vsftpd.mysql</code>
四、啟動vsftpd服務并測試
啟動服務
<code>chkconfig vsftpd on 自動啟動</code>
檢視端口開啟情況
<code>netstat</code> <code>-tnlp |</code><code>grep</code> <code>:21</code>
檢視資料庫
<a target="_blank" href="http://blog.51cto.com/attachment/201309/003538317.png"></a>
FTP用戶端工具登入驗證pam是否生效
<a target="_blank" href="http://blog.51cto.com/attachment/201309/003653674.png"></a>
五、配置虛拟使用者具有不同的通路權限
為虛拟使用者使用配置檔案目錄
<code>vim </code><code>/etc/vsftpd/vsftpd</code><code>.conf</code>
<code>user_config_dir=</code><code>/etc/vsftpd/vusers_dir</code>
建立所需要目錄,并為虛拟使用者提供配置檔案
<code>mkdir</code> <code>/etc/vsftpd/vusers_dir/</code>
<code>touch</code> <code>/etc/vsftpd/vusers_dir/bob</code> <code>/etc/vsftpd/vusers_dir/tom</code>
配置虛拟使用者的通路權限;所有虛拟使用者的家目錄為/var/ftproot;所有的虛拟使用者映射到vuser中,而vuser屬于匿名使用者,是以虛拟使用者的通路權限是通過匿名使用者指令生效的。
bob可以上傳、建立、删除
<code>vim </code><code>/etc/vsftpd/vusers_dir/bob</code>
<code>anon_upload_enable=YES (配置檔案中已經開啟,這裡不寫也可以)</code>
<code>anon_mkdir_write_enable=YES</code>
<code>anon_other_write_enable=YES</code>
tom不可以上傳
<code>vim </code><code>/etc/vsftpd/vusers_dir/tom</code>
<code>anon_upload_enable=NO</code>
lucy可以上傳
<code>主配置檔案中匿名上傳已啟用anon_upload_enable=YES,是以不需要做任何修改</code>
bob測試
<a target="_blank" href="http://blog.51cto.com/attachment/201309/004055304.png"></a>
tom測試
<a target="_blank" href="http://blog.51cto.com/attachment/201309/004108679.png"></a>
lucy測試
<a target="_blank" href="http://blog.51cto.com/attachment/201309/004123838.png"></a>
本文轉自 ftmoonfans 51CTO部落格,原文連結:http://blog.51cto.com/soulboy/1290981