天天看點

vsftpd基于pam_mysql的認證和hash編碼的方式配置虛拟使用者

基礎介紹什麼的就自行搜尋了。下面直接從安裝配置開始。

環境:centos6

一、安裝

1

<code>yum </code><code>-</code><code>y install vsftpd</code>

安裝完成後可以直接啟動。service vsftpd start

建立一個使用者作為虛拟使用者的宿主賬戶:

useradd vuser -s /sbin/nologin

passwd vuser

二、配置

使用pam_mysql或者db_load的認證方式:

a)使用db_load來設定虛拟使用者

    1、在/etc/vsftpd/下建立兩個目錄  

<code>    </code><code>mkdir </code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_dir        </code><code>#後續存放虛拟使用者的配置檔案</code>

<code>    </code><code>mkdir </code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_db     </code><code>#存放虛拟使用者的認證檔案</code>

    2、生成資料庫檔案

2

3

4

5

6

<code>    </code><code>cd </code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_db</code><code>/</code>    

<code>    </code><code>vim login_vuser</code>

<code>    </code><code>admin       </code><code>#依次單行使用者名,密碼</code>

<code>    </code><code>123456789</code>

<code>    </code><code>test</code>

<code>    </code><code>987654321</code>

<code>db_load </code><code>-</code><code>T </code><code>-</code><code>t </code><code>hash</code> <code>-</code><code>f </code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_db</code><code>/</code><code>login_vuser </code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_db</code><code>/</code><code>vuser.db   </code><code>#生成虛拟使用者的資料庫檔案</code>

    3、更改pam認證子產品

<code>    </code><code>cd </code><code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code>    

<code>    </code><code>vim vsftpd.vuser</code>

<code>    </code><code>auth    required    </code><code>/</code><code>lib64</code><code>/</code><code>security</code><code>/</code><code>pam_userdb.so   db</code><code>=</code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_db</code><code>/</code><code>vuser       </code><code>#此處注意不要加.db字尾</code>

<code>    </code><code>account    required        </code><code>/</code><code>lib64</code><code>/</code><code>security</code><code>/</code><code>pam_userdb.so   db</code><code>=</code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_db</code><code>/</code><code>vuser</code>

    4、更改vsftpd的配置檔案

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<code>    </code><code>vim </code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vsftpd.conf    </code>

<code>    </code><code>anonymous_enable</code><code>=</code><code>NO     </code><code>#匿名使用者通路控制</code>

<code>    </code><code>local_enable</code><code>=</code><code>YES        </code><code>#本地使用者通路</code>

<code>    </code><code>write_enable</code><code>=</code><code>YES        </code><code>#使用者的寫權限</code>

<code>    </code><code>local_umask</code><code>=</code><code>022</code>

<code>    </code><code>######################################################         </code>

<code>    </code><code>dirmessage_enable</code><code>=</code><code>YES                          </code>

<code>    </code><code>xferlog_enable</code><code>=</code><code>YES</code>

<code>    </code><code>connect_from_port_20</code><code>=</code><code>YES</code>

<code>    </code><code>xferlog_std_format</code><code>=</code><code>YES</code>

<code>    </code><code>listen</code><code>=</code><code>YES</code>

<code>    </code><code>user_config_dir</code><code>=</code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_dir</code>

<code>    </code><code>pam_service_name</code><code>=</code><code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>vsftpd.vuser</code>

<code>    </code><code>userlist_enable</code><code>=</code><code>NO</code>

<code>    </code><code>tcp_wrappers</code><code>=</code><code>YES</code>

<code>    </code><code>chroot_list_enable</code><code>=</code><code>YES      </code><code>#不允許使用者切換家目錄</code>

<code>    </code><code>######################################################            </code>

<code>    </code><code>guest_enable</code><code>=</code><code>YES        </code><code>#開啟匿名使用者</code>

<code>    </code><code>guest_username</code><code>=</code><code>vuser</code>

<code>    </code><code>chown_uploads</code><code>=</code><code>YES       </code><code>#是否允許上傳的檔案改變屬主</code>

<code>    </code><code>chown_username</code><code>=</code><code>root     </code><code>#改變為哪個屬主</code>

<code>    </code><code>######################################################</code>

<code>    </code><code>pasv_min_port</code><code>=</code><code>2222</code>          <code>#iptables放行ftp中的端口段</code>

<code>    </code><code>pasv_max_port</code><code>=</code><code>2230</code>

<code>    </code><code>其他未列出的配置選項都是注釋了的。具體的含義可以自行搜尋</code>

<code>    </code><code>如果需要也可以配置到虛拟使用者的配置檔案中。</code>

    5、為虛拟使用者建立對應的配置檔案

<code>    </code><code>cd </code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_dir</code><code>/</code>   <code>#建立兩個虛拟使用者的配置檔案test,admin</code>

<code>    </code><code>vim test</code>

<code>    </code><code>anon_upload_enable</code><code>=</code><code>YES</code>

<code>    </code><code>anon_umask</code><code>=</code><code>022</code>              <code>#此處設定的是匿名使用者上傳檔案的umask</code>

<code>    </code><code>chown_upload_mode</code><code>=</code><code>0644</code>      <code>#此處設定的是長傳檔案後更改的權限</code>

<code>    </code><code>download_enable</code><code>=</code><code>YES</code>

<code>    </code><code>anon_other_write_enable</code><code>=</code><code>NO</code>

<code>    </code><code>anon_mkdir_write_enable</code><code>=</code><code>NO</code>

<code>    </code><code>local_root</code><code>=</code><code>/</code><code>some</code><code>/</code><code>to</code><code>/</code><code>path</code><code>/</code>

<code>    </code><code>vim admin</code>

<code>    </code><code>anon_umask</code><code>=</code><code>022</code>

<code>    </code><code>chown_upload_mode</code><code>=</code><code>0644</code>

<code>    </code><code>anon_other_write_enable</code><code>=</code><code>YES</code>

<code>    </code><code>anon_mkdir_write_enable</code><code>=</code><code>YES</code>

<code>    </code><code>anon_world_readable_only</code><code>=</code><code>NO</code>

    6、重新開機vsftpd測試登陸

<code>    </code><code>service vsftpd restart    </code>

<code>            </code> 

<code>    </code><code>lftp </code><code>-</code><code>u username,password host    </code><code>#測試</code>

<code>    </code> 

<code>    </code><code># 這裡如果無法登陸,在配置檔案的目錄位置建立一個chroot_list檔案在測試。</code>

b)使用pam_mysql來認證使用者

    1、建立目錄存儲虛拟使用者配置檔案

    mkdir /etc/vsftpd/vuser_dir

    2、安裝mysql-server mysql-devel openssl-devel pam_mysql軟體 

<code>    </code><code>yum </code><code>-</code><code>y install mysql</code><code>-</code><code>server mysql</code><code>-</code><code>devel openssl</code><code>-</code><code>devel pam_mysql </code><code>#epel源裡有pam_mysql子產品</code>

    3、登陸mysql建立vsftpd庫檔案等

<code>    </code><code>mysql </code><code>-</code><code>uroot </code><code>-</code><code>p password    </code>

<code>    </code><code>create database vsftpd</code>

<code>    </code><code>grant </code><code>all</code> <code>on vsftpd.</code><code>*</code> <code>to </code><code>'vsftpd'</code><code>@</code><code>'localhost'</code> <code>identified by </code><code>'vsftpd'</code><code>;</code>

<code>    </code><code>grant </code><code>all</code> <code>on vsftpd.</code><code>*</code> <code>to </code><code>'vsftpd'</code><code>@</code><code>'127.0.0.1'</code> <code>identified by </code><code>'vsftpd'</code><code>;</code>

<code>                </code> 

<code>    </code><code>use vsftpd;</code>

<code>    </code><code>CREATE TABLE `users` (`</code><code>id</code><code>` </code><code>int</code><code>(</code><code>10</code><code>) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(</code><code>50</code><code>) NOT NULL,`password` char(</code><code>48</code><code>) NOT NULL,PRIMARY KEY (`</code><code>id</code><code>`));</code>

<code>    </code><code>INSERT INTO users (name,password) VALUES (</code><code>'username'</code><code>,</code><code>'password'</code><code>),(</code><code>'username'</code><code>,</code><code>'password'</code><code>);</code>

<code>    </code><code>flush privileges;</code>

<code>    </code><code>mysql </code><code>-</code><code>uUSERNAME </code><code>-</code><code>pPASSWORD          </code><code>#測試上述建立的使用者是否有效</code>

    4、建立mysql的pam認證檔案

<code>    </code><code>vim vsftpd.mysql    </code>

<code>    </code><code>auth required </code><code>/</code><code>lib64</code><code>/</code><code>security</code><code>/</code><code>pam_mysql.so user</code><code>=</code><code>vsftpd passwd</code><code>=</code><code>vsftpd host</code><code>=</code><code>localhost db</code><code>=</code><code>vsftpd table</code><code>=</code><code>users usercolumn</code><code>=</code><code>name passwdcolumn</code><code>=</code><code>password cypt</code><code>=</code><code>0</code>

<code>    </code><code>account required </code><code>/</code><code>lib64</code><code>/</code><code>security</code><code>/</code><code>pam_mysql.so user</code><code>=</code><code>vsftpd passwd</code><code>=</code><code>vsftpd host</code><code>=</code><code>localhost db</code><code>=</code><code>vsftpd table</code><code>=</code><code>users usercolumn</code><code>=</code><code>name passwdcolumn</code><code>=</code><code>password cypt</code><code>=</code><code>0</code>

    5、修改vsftpd配置檔案

<code>    </code><code>anonymous_enable</code><code>=</code><code>YES        </code><code>#開啟匿名使用者通路</code>

<code>    </code><code>pam_service_name</code><code>=</code><code>/</code><code>etc</code><code>/</code><code>pam.d</code><code>/</code><code>vsftpd.mysql      </code><code>#這裡與上面的hash認證是有差別的</code>

<code>    </code><code>chown_username</code><code>=</code><code>root     </code><code>#改變為哪個屬主   </code>

    6、為虛拟使用者建立對應的檔案

<code>    </code><code>cd </code><code>/</code><code>etc</code><code>/</code><code>vsftpd</code><code>/</code><code>vuser_dir</code><code>/</code>   <code>#建立兩個虛拟使用者的配置檔案</code>

    7、重新開機vsftpd測試登陸

<code>    </code><code>lftp </code><code>-</code><code>u username,password host        </code><code>#測試</code>

三、所有的針對于使用者權限的配置都可以在包含的虛拟使用者配置檔案的路徑下進行單獨的配置選項。

如果其中配置好登陸不上,可以檢視安全認證日志。

四、作為補充說明

線上上的Linux搭建的vsftpd,死活連不上。測試是防火牆的問題。

防火牆是使用預設的安全政策;其中有一條是:

<code>-</code><code>A RH</code><code>-</code><code>Firewall</code><code>-</code><code>1</code><code>-</code><code>INPUT</code> <code>-</code><code>j REJECT </code><code>-</code><code>-</code><code>reject</code><code>-</code><code>with icmp</code><code>-</code><code>host</code><code>-</code><code>prohibited </code><code># 拒絕上述不符的資料包</code>

檢視用戶端預設使用的是被動連接配接;于是就放行被動模式指定一段端口配置設定給ftp做随機端口:

就需要在vsftpd.conf中多添加一段端口用于連接配接的端口:

<code>pasv_min_port</code><code>=</code><code>2222</code>          <code>#iptables放行ftp中的端口段</code>

<code>pasv_max_port</code><code>=</code><code>2230</code>

然後在iptables中放行即可。

五、FTP更精細的權限控制

使用cmds_allowed來控制更精細一點的權限。其實也沒有多大用處。

29

30

31

32

33

34

35

<code># ABOR - abort a file transfer                       取消檔案傳輸</code>

<code># CWD - change working directory                     更改目錄</code>

<code># DELE - delete a remote file                        删除檔案</code>

<code># LIST - list remote files                           列出目錄</code>

<code># MDTM - return the modification time of a file      傳回檔案的更新時間</code>

<code># MKD - make a remote directory                      建立檔案夾</code>

<code># NLST - name list of remote directory</code>

<code># PASS - send password</code>

<code># PASV - enter passive mode</code>

<code># PORT - open a data port                            打開一個傳輸端口</code>

<code># PWD - print working directory                      顯示目前工作目錄</code>

<code># QUIT - terminate the connection                    退出</code>

<code># RETR - retrieve a remote file                      下載下傳檔案</code>

<code># RMD - remove a remote directory</code>

<code># RNFR - rename from</code>

<code># RNTO - rename to</code>

<code># SITE - site-specific commands</code>

<code># SIZE - return the size of a file                    傳回檔案大小</code>

<code># STOR - store a file on the remote host              上傳檔案</code>

<code># TYPE - set transfer type</code>

<code># USER - send username</code>

<code># less common commands:</code>

<code># ACCT* - send account information</code>

<code># APPE - append to a remote file</code>

<code># CDUP - CWD to the parent of the current directory</code>

<code># HELP - return help on using the server</code>

<code># MODE - set transfer mode</code>

<code># NOOP - do nothing</code>

<code># REIN* - reinitialize the connection</code>

<code># STAT - return server status</code>

<code># STOU - store a file uniquely</code>

<code># STRU - set file transfer structure</code>

<code># SYST - return system type</code>

以上是cmds的全部指令。

本文轉自Mr_陳 51CTO部落格,原文連結:http://blog.51cto.com/chenpipi/1566803,如需轉載請自行聯系原作者

繼續閱讀