天天看點

FTP基于PAM和MySQL/MariaDB實作虛拟使用者通路控制

前言

vsftpd是一款在Linux發行版中最受推崇的FTP伺服器程式,特點是小巧輕快,安全易用,目前在開源作業系統中常用的FTP套件主要有proftpd、pureftp、ServU和wu-ftpd等。本文将講解vsftpd的基本功能和如何基于PAM和MySQL/MariaDB實作虛拟使用者通路控制。

基礎配置介紹

工作原理

<a href="http://s3.51cto.com/wyfs02/M02/6B/AB/wKioL1U0crDDiyOgAAFcT6Kq79I735.jpg" target="_blank"></a>

狀态響應碼

1xx:資訊碼

2xx:成功狀态碼

3xx:進一步提示補全資訊的狀态碼

4xx:用戶端錯誤

5xx:伺服器端錯誤

使用者認證

虛拟使用者:僅用于通路某特定服務中的資源

1

2

3

4

5

6

<code>nsswitch: network server switch, 名稱解析架構</code>

<code>        </code><code>配置檔案:</code><code>/etc/nsswitch</code><code>.conf</code>

<code>        </code><code>子產品:</code><code>/lib64/libnss</code><code>*, </code><code>/usr/lib64/libnss</code><code>*</code>

<code>pam: pluggable authentication module, 使用者認證架構</code>

<code>        </code><code>子產品:</code><code>/lib64/security/</code>

<code>        </code><code>配置檔案:</code><code>/etc/pam</code><code>.conf, </code><code>/etc/pam</code><code>.d/*</code>

系統使用者通過ftp通路的資源的位置:使用者自己的家目錄

虛拟使用者通過ftp通路的資源的位置:給虛拟使用者指定的映射成為的系統使用者的家目錄

配置檔案

vsftpd在CentOS6.6的配置檔案

<code>使用者認證配置檔案:</code><code>/etc/pam</code><code>.d</code><code>/vsftpd</code>

<code>服務腳本:</code><code>/etc/rc</code><code>.d</code><code>/init</code><code>.d</code><code>/vsftpd</code>

<code>配置檔案目錄:</code><code>/etc/vsftpd</code>

<code>主配置檔案:</code><code>/etc/vsftpd/vsftpd</code><code>.conf</code>

<code>匿名使用者(映射為</code><code>ftp</code><code>使用者)共享資源位置:</code><code>/var/ftp</code>

配置檔案詳解

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

<code>匿名使用者的設定</code>

<code>    </code><code>anonymous_enable=YES:允許匿名登入</code>

<code>    </code><code>anonymous_upload_enable=YES:允許上傳檔案</code>

<code>    </code><code>anonymous_other_write_enable=YES:允許删除檔案</code>

<code>    </code><code>anonymous_mkdir_write_enable=YES:允許建立目錄</code>

<code>    </code><code>注:啟用此功能,</code><code>ftp</code><code>使用者對</code><code>/var/ftp</code><code>目錄仍無權限,可在</code><code>/var/ftp/</code><code>目錄下建立目錄,</code>

<code>    </code><code>如</code><code>/var/ftp/upload/</code><code>,并給</code><code>ftp</code><code>使用者設定權限 setfacl -m u:</code><code>ftp</code><code>:rw </code><code>/var/ftp/upload</code>

<code>系統使用者的配置</code>

<code>    </code><code>local_enable=YES:允許登入</code>

<code>    </code><code>write_enable=YES:允許上傳檔案</code>

<code>禁锢所有的</code><code>ftp</code><code>本地使用者于其家目錄中</code>

<code>    </code><code>chroot_local_user={YES|NO}</code>

<code>禁锢指定使用者于家目錄中</code>

<code>    </code><code>chroot_list_enable=YES</code>

<code>    </code><code>chroot_list_file=</code><code>/etc/vsftpd/chroot_list</code> 

<code>日志配置</code>

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

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

<code>    </code><code>xferlog_file=</code><code>/var/log/xferlog</code>

<code>改變上傳檔案的屬主</code>

<code>    </code><code>chown_uploads=YES</code>

<code>    </code><code>chown_username=whoever</code>

<code>上傳檔案的</code><code>umask</code>

<code>    </code><code>anon_umask:匿名使用者上傳檔案的</code><code>umask</code>

<code>    </code><code>local_umask:本地使用者上傳檔案的</code><code>umask</code>

<code>vsftpd使用pam完成使用者認證,其用到的pam配置檔案</code>

<code>    </code><code>pam_service_name=vsftpd</code>

<code>    </code><code>控制使用者登入:</code><code>/etc/vsftpd/ftpusers</code><code>中的使用者都不允許使用</code><code>ftp</code><code>服務,基于pam</code>

<code>是否啟用控制使用者登入的清單檔案</code>

<code>    </code><code>userlist_enable=YES</code>

<code>    </code><code>userlist_deny=YES|NO</code>

<code>    </code><code>預設檔案為</code><code>/etc/vsftpd/user_list</code>

<code>連接配接限制</code>

<code>    </code><code>max_clients: 最大并發連接配接數</code>

<code>    </code><code>max_per_ip: 每個IP可同時發起的并發請求數</code>

<code>傳輸速率</code>

<code>    </code><code>anon_max_rate:匿名使用者的最大傳輸速率,機關是bytes</code><code>/s</code>

<code>    </code><code>local_max_rate:本地使用者的最大傳輸速率,機關是bytes</code><code>/s</code>

<code>自定義資訊配置</code>

<code>        </code><code>ftpd_banner=Welcome to FTP Server </code><code>#自定義</code>

<code>        </code><code>dirmessage_enable=YES   </code><code>#需建立.message檔案</code>

虛拟使用者通路控制

虛拟使用者

所有的虛拟使用者會被統一映射為一個指定的系統賬号,通路的共享位置即為此系統賬号的家目錄

各虛拟使用者可被賦予不同的通路權限,通過匿名使用者的權限控制參數進行指定

虛拟使用者的存放方式:

hash編碼的檔案(奇數行為使用者名,偶數行為密碼)

關系型資料庫(通過第三方子產品pam-mysql實作認證)

<a href="http://s3.51cto.com/wyfs02/M01/6B/AE/wKioL1U0lX7SMeqEAADUzbJtf8I522.jpg" target="_blank"></a>

配置過程

環境準備

FTP伺服器:172.16.10.10(CentOS6.6)

資料庫伺服器:172.16.10.211(CentOS6.6),MariaDB

安裝所需程式

首先FTP伺服器需要安裝vsftpd和pam_mysql,資料庫伺服器需要安裝MySQL或者MariaDB,我這裡已經安裝完畢了,就直接開始配置了

建立虛拟使用者

<code>[root@MariaDB ~]</code><code># mysql</code>

<code>MariaDB [(none)]&gt; CREATE DATABASE vsftpd;</code>

<code>MariaDB [(none)]&gt; use vsftpd;</code>

<code>MariaDB [vsftpd]&gt; GRANT SELECT ON vsftpd.* TO vsftp@</code><code>'172.16.10.10'</code> <code>IDENTIFIED BY </code><code>'vpass'</code><code>;</code>

<code>MariaDB [vsftpd]&gt; FLUSH PRIVILEGES;</code>

<code>MariaDB [vsftpd]&gt; CREATE TABLE </code><code>users</code> <code>(</code>

<code>    </code><code>-&gt; </code><code>id</code> <code>INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,</code>

<code>    </code><code>-&gt; name VARCHAR(50) BINARY NOT NULL, </code>

<code>    </code><code>-&gt; password CHAR(48) BINARY NOT NULL );</code>

<code>#添加虛拟使用者   </code>

<code>MariaDB [vsftpd]&gt; INSERT INTO </code><code>users</code> <code>(name,password) VALUES (</code><code>'tom'</code><code>,password(</code><code>'scholar'</code><code>));</code>

<code>#password('PASSWORD')加密密碼</code>

<code>MariaDB [vsftpd]&gt; INSERT INTO </code><code>users</code> <code>(name,password) VALUES (</code><code>'alice'</code><code>,password(</code><code>'scholar'</code><code>));</code>

vsftpd配置

<code>[root@lab ~]</code><code># vim /etc/pam.d/vsftpd.mysql  #建立pam認證檔案</code>

<code>auth required pam_mysql.so user=vsftp </code><code>passwd</code><code>=vpass host=172.16.10.211 db=vsftpd </code>

<code>table=</code><code>users</code> <code>usercolumn=name passwdcolumn=password crypt=2 </code><code>#密碼經過加密,crypt值為2</code>

<code>account required pam_mysql.so user=vsftp </code><code>passwd</code><code>=vpass host=172.16.10.211 db=vsftpd </code>

<code>table=</code><code>users</code> <code>usercolumn=name passwdcolumn=password crypt=2</code>

<code>[root@lab ~]</code><code># useradd -s /sbin/nologin -d /var/ftproot vuser</code>

<code>#建立虛拟使用者映射的系統使用者及對應的目錄</code>

<code>[root@lab ~]</code><code># chmod go+rx /var/ftproot  #給予權限</code>

<code>[root@lab ~]</code><code># vim /etc/vsftpd/vsftpd.conf </code>

<code>#請確定已經啟用了以下選項</code>

<code>anonymous_enable=YES</code>

<code>local_enable=YES</code>

<code>write_enable=YES</code>

<code>anon_upload_enable=NO</code>

<code>anon_mkdir_write_enable=NO</code>

<code>chroot_local_user=YES</code>

<code>#添加以下選項</code>

<code>guest_enable=YES</code>

<code>guest_username=vuser </code><code>#設定的映射系統使用者</code>

<code>#并確定pam_service_name選項的值如下所示</code>

<code>pam_service_name=vsftpd.mysql </code><code>#建立的pam認證檔案</code>

配置虛拟使用者具有不同的通路權限

vsftpd可以在配置檔案目錄中為每個使用者提供單獨的配置檔案以定義其ftp服務通路權限,每個虛拟使用者的配置檔案名同虛拟使用者的使用者名。配置檔案目錄可以是任意未使用目錄,隻需要在vsftpd.conf指定其路徑及名稱即可。

配置vsftpd為虛拟使用者使用配置檔案目錄

<code>[root@lab ~]</code><code># vim /etc/vsftpd/vsftpd.conf</code>

<code>#添加如下選項</code>

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

建立所需要目錄,并為虛拟使用者提供配置檔案

<code>[root@lab ~]</code><code># mkdir /etc/vsftpd/vusers_config</code>

<code>[root@lab ~]</code><code># cd /etc/vsftpd/vusers_config/</code>

<code>[root@lab vusers_config]</code><code># touch tom alice</code>

配置虛拟使用者的通路權限

虛拟使用者對vsftpd服務的通路權限是通過匿名使用者的相關指令進行的。比如,如果需要讓tom使用者具有上傳檔案的權限,可以修改/etc/vsftpd/vusers_config/tom檔案,在裡面添加如下選項即可。

<code>[root@lab vusers_config]</code><code># vim tom</code>

<code>anon_upload_enable=YES</code>

<code>anon_mkdir_write_enable=YES</code>

<code>anon_other_write_enable=YES</code>

<code>[root@lab vusers_config]</code><code># vim alice </code>

<code>anon_other_write_enable=NO</code>

啟動服務,設定開機自啟,檢視21端口是否被監聽

<a href="http://s3.51cto.com/wyfs02/M01/6B/B0/wKioL1U0o7aySHnUAABzZrUoe9w172.jpg" target="_blank"></a>

測試虛拟使用者

<a href="http://s3.51cto.com/wyfs02/M01/6B/B5/wKiom1U0ujLjFDnqAAHiQJfvXi8688.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/6B/B1/wKioL1U0u6fBt_wYAAE1pXpZmxg827.jpg" target="_blank"></a>

The end 

好了,FTP基于PAM和MySQL/MariaDB的虛拟使用者通路控制,就說到這裡啦,配置ftp過程中請確定不要敲多空格,否則是會報錯或者登入失敗的,我就深受其害,這确實是個坑,部署過程中遇到問題可留言,多謝關注呦。以上僅為個人學習整理,如有錯漏,大神勿噴~~~

本文轉自 北城書生  51CTOhttp://blog.51cto.com/scholar/1636190部落格,原文連結:http://blog.51cto.com/scholar/1636190