天天看點

File Transfer Protocol

#####################################

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 &gt; 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&gt; create database vsftpd;</code>

<code>mysql&gt; grant </code><code>select</code> <code>on vsftpd.* to vsftpd@localhost identified by </code><code>'vsftpd'</code><code>;</code>

<code>mysql&gt; grant </code><code>select</code> <code>on vsftpd.* to [email protected] identified by </code><code>'vsftpd'</code><code>;</code>

<code>mysql&gt; flush privileges;</code>

<code>mysql&gt; use vsftpd;</code>

<code>mysql&gt; create table </code><code>users</code> <code>(</code>

<code>    </code><code>-&gt; </code><code>id</code> <code>int AUTO_INCREMENT NOT NULL,</code>

<code>    </code><code>-&gt; name char(20) binary NOT NULL,</code>

<code>    </code><code>-&gt; password char(48) binary NOT NULL,</code>

<code>    </code><code>-&gt; primary key(</code><code>id</code><code>)</code>

<code>    </code><code>-&gt; );</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