1. 程式人生 > >FTP使用MariaDB完成虛擬用戶認證

FTP使用MariaDB完成虛擬用戶認證

映射 英文 timeout net 創建 上傳 rap 安全性 設置


文件傳輸協議(英文:File Transfer Protocol,縮寫:FTP)是用於在網絡上進行文件傳輸的一套標準協議。它屬於網絡傳輸協議的應用層。FTP是一個8位的客戶端-服務器協議,能操作任何類型的文件而不需要進一步處理,就像MIMEUnicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求數據之間的時間,會非常長;並且不時的必須執行一些冗長的登陸進程。

FTP是一個應用層協議,明文傳輸,使用C/S架構,其服務端監聽在21/TCP20/TCP21號端口為命令端口即控制端口,20號端口為數據傳輸端口。FTP有兩種工作模式:

主動:由服務器創建連接

命令:

Client50000 --> Server: 21

數據:

Server20/tcp --> Client: 50000+1

被動:由客戶端創建連接

命令:

Client50000 --> Server: 21

服務器告訴客戶端數據端口:121,23=121*256+23

數據:

Client: 50000+1 --> Server:隨機端口

現在使用被動模式居多,因為主動模式下如果客戶端有防火墻將會產生很多麻煩,有些看官可能會說被動模式下服務器不也有防火墻嗎?現在的防火墻都有一種connection track功能,叫連接追蹤,可以追蹤同一服務開啟的不同端口。FTP的服務端有很多開源實現:

FtpServer

wu-ftpd:華盛頓大學ftpd

proftpd:專業ftp

pureftp:純粹的ftp

vsftp

very secure

ServU

響應碼:和http類似

1xx:信息

2xx:成功類的狀態碼

3xx:提示需進一步提供補充類信息的狀態碼

4xx:客戶端錯誤

5xx:服務端錯誤

大家發現他們起的名字都非常高調是吧,哈哈。我們今天要介紹的就是在CentOS6.6上的vsftp,號稱非常安全的ftp,我們來看一下它怎麽個用法。

FTP的用戶和系統用戶幾乎是沒有什麽關系的,這就是所謂的虛擬用戶,這裏的用戶認證需要用到nsswitchpam兩個框架:對於這兩個我們以後有時間還會詳細介紹

nsswitchnetwork server switch,名稱解析框架,這個框架是調用各種glibc庫,完成系統上需要用到的名稱解析功能,如用戶名和用戶ID

配置文件:/etc/nsswitch.conf

模塊:/lib64/libnss*,/usr/lib64/libnss*

pampluggable authentication module,用戶認證框架

/lib64/security/

配置文件:/etc/pam.conf,/etc/pam.d/*

安裝ftp很簡單直接yum install –y vsftpd就可以了,以下是其安裝好後的幾個主要文件:

[root@www ~]# rpm -ql vsftpd

/etc/logrotate.d/vsftpd #日誌滾動腳本

/etc/pam.d/vsftpd #用戶認證文件

/etc/rc.d/init.d/vsftpd #服務腳本

/etc/vsftpd #配置文件

/etc/vsftpd/ftpusers #用戶控制文件

/etc/vsftpd/user_list #可用用戶列表

/etc/vsftpd/vsftpd.conf #主配置文件

/etc/vsftpd/vsftpd_conf_migrate.sh

/usr/sbin/vsftpd #主程序

/var/ftp/ #共享資源目錄

#vim /etc/vsftpd/vsftpd.conf #其內容必須頂格寫,不能有任何空白字符

12 anonymous_enable=YES #是否允許匿名用戶

27 #anon_upload_enable=YES #是否運行匿名用戶上傳

這一行開啟匿名用戶也無法上傳,因為對目錄沒有寫權限,所以可以進行以下操作

mkdir /var/ftp/upload

setfacl -m u:ftp:rwx /var/ftp/upload

31 #anon_mkdir_write_enable=YES #是否允許匿名用戶創建目錄

anon_other_write_enable=YES #是否運行匿名用戶刪除文件

15 local_enable=YES #是否運行系統用戶,登錄後默認在其家目錄下

18 write_enable=YES #系統用戶的所有寫權限

13 anon_umask=022 #這個是匿名用戶上傳文件的權限,優先級高於local_umask

22 local_umask=022 #系統用戶上傳文件後的權限

96 #chroot_local_user=YES #鎖定系統用戶到其家目錄

97 #chroot_list_enable=YES #只鎖定部分系統用戶

98 # (default follows)

99 #chroot_list_file=/etc/vsftpd/chroot_list #鎖定的用戶的名稱

35 dirmessage_enable=YES #在某文件目錄下,建立一個.message文件,訪問此目錄時會顯示此文件中的內容

39 xferlog_enable=YES #是否開啟ftp傳輸日誌

56 xferlog_std_format=YES #是否使用標準日誌格式

52 #xferlog_file=/var/log/xferlog #日誌文件位置

47 #chown_uploads=YES #上傳的文件是否改變其屬主

48 #chown_username=whoever #屬主變為誰

59 #idle_session_timeout=600 #空閑會話超時時長

62 #data_connection_timeout=120 #數據連接超時時長

81 #ascii_upload_enable=YES #強制文本格式上傳

82 #ascii_download_enable=YES #強制文本格式下載

85 #ftpd_banner=Welcome to blah FTP service. #歡迎信息

117 pam_service_name=vsftpd #使用pam的那個模塊,對vsftpd用戶進行認證,/etc/pam.d/vsftpd

118 userlist_enable=YES #/etc/vsftpd/ftpusers此文件中的用戶不可登錄

userlist_deny=YES|NO #/etc/vsftpd/user_list文件中定義的用戶用戶是否被拒絕登錄

119 tcp_wrappers=YES #tcp封裝

max_clients: #最大並發連接數

max_per_ip#每個IP可同時發起的並發請求數

anno_max_rate#所有匿名用戶的最大傳輸速率,單位byte/s

local_max_rate#本地用戶最大傳輸速率

根據以上的這些配置文件的設置已經可以當一個簡單的FTP服務器來用了,我就不再演示了,我們上文提到虛擬用戶,各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定。其實我們訪問ftp server時使用的匿名用戶都會映射為系統上的ftp用戶,我們存儲虛擬用戶有兩種方式:

文件:編輯文件

奇數行為用戶名

偶數行為密碼

此文件需要被編碼為hash格式

關系型數據中的表中:

即查詢數據庫完成用戶認證

文件的方式顯然不安全,雖然ftp就不安全。。。那麽我們就來看一下結合關系型數據認證虛擬用戶,這樣管理性和安全性都有一定的提升。ftpmysql結合依賴於pam-mysql,需要安裝pam_mysqlepel源中。安裝好後我們來看一下都有什麽文件:

[root@localhost ~]# rpm -ql pam_mysql

/lib64/security/pam_mysql.so #就這一個模塊而已

/usr/share/doc/pam_mysql-0.7

/usr/share/doc/pam_mysql-0.7/COPYING

/usr/share/doc/pam_mysql-0.7/CREDITS

/usr/share/doc/pam_mysql-0.7/ChangeLog

/usr/share/doc/pam_mysql-0.7/NEWS

/usr/share/doc/pam_mysql-0.7/READM #查看這個文檔,裏面有詳細的解釋

接下來我們就看看具體的操作步驟:

1、設置MariaDBIP192.168.1.107

技術分享圖片

這裏解釋一下,vsftpFTPserver上的系統用戶為了映射虛擬用戶的,tomjerry為虛擬用戶,password(‘tom’)這個是MariaDB上的一個加密函數,將tom字符串加密存放。

2、配置FTP服務器的pam認證,IP192.168.1.108

技術分享圖片

3、添加ftp server的系統用戶

技術分享圖片

#這裏糾正一點應該是chmod go+rx /var/ftproot,因為需要匿名用戶的可讀和可執行權限,就是能夠cd能夠ls

4、配置ftp server配置文件

[root@bogon vsftpd]# vim vsftpd.conf

22 anon_umask=022

23 local_umask=022

117 pam_service_name=vsftpd.mysql #驗證配置文件

118 userlist_enable=YES

119 tcp_wrappers=YES

120

121 guest_enable=YES

122 guest_username=ftpuser #映射虛擬用戶的系統賬號

5、配置不同用戶的不同權限

[root@bogon vsftpd]# vim vsftpd.conf

124 user_config_dir=/etc/vsftpd/vusers #定義虛擬用戶目錄

[root@bogon vsftpd]# mkdir vusers

[root@bogon vsftpd]# cd vusers/

[root@bogon vusers]# vim tom #單個用戶的配置文件,與用戶名相同即可

1 anon_upload_enable=YES

2 anon_mkdir_write_enable=YES

3 anon_other_write_enable=YES

[root@bogon vusers]# vim jerry

1 anon_upload_enable=NO

2 anon_mkdir_write_enable=NO

3 anon_other_write_enable=NO

6、驗證結果

Tom登錄:

技術分享圖片

技術分享圖片

Jerry登錄:

技術分享圖片

我們看到Tom可以讀寫,而Jerry只能讀,完全符合我們的設定。OK,我們對FTP的介紹就到這裏了,還有更高級的應用大家就自行查看文檔解決吧,如有錯誤敬請指出。


FTP使用MariaDB完成虛擬用戶認證