FTP使用MariaDB完成虛擬用戶認證
文件傳輸協議(英文:File Transfer Protocol,縮寫:FTP)是用於在網絡上進行文件傳輸的一套標準協議。它屬於網絡傳輸協議的應用層。FTP是一個8位的客戶端-服務器協議,能操作任何類型的文件而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求數據之間的時間,會非常長;並且不時的必須執行一些冗長的登陸進程。
FTP是一個應用層協議,明文傳輸,使用C/S架構,其服務端監聽在21/TCP和20/TCP,21號端口為命令端口即控制端口,20號端口為數據傳輸端口。FTP有兩種工作模式:
主動:由服務器創建連接
命令:
Client:50000 --> Server: 21
數據:
Server:20/tcp --> Client: 50000+1
被動:由客戶端創建連接
命令:
Client:50000 --> Server: 21
服務器告訴客戶端數據端口:121,23=121*256+23
數據:
Client: 50000+1 --> Server:隨機端口
現在使用被動模式居多,因為主動模式下如果客戶端有防火墻將會產生很多麻煩,有些看官可能會說被動模式下服務器不也有防火墻嗎?現在的防火墻都有一種connection track功能,叫連接追蹤,可以追蹤同一服務開啟的不同端口。FTP的服務端有很多開源實現:
FtpServer:
wu-ftpd:華盛頓大學ftpd
proftpd:專業ftp
pureftp:純粹的ftp
vsftp:
ServU
響應碼:和http類似
1xx:信息
2xx:成功類的狀態碼
3xx:提示需進一步提供補充類信息的狀態碼
4xx:客戶端錯誤
5xx:服務端錯誤
大家發現他們起的名字都非常高調是吧,哈哈。我們今天要介紹的就是在CentOS6.6上的vsftp,號稱非常安全的ftp,我們來看一下它怎麽個用法。
FTP的用戶和系統用戶幾乎是沒有什麽關系的,這就是所謂的虛擬用戶,這裏的用戶認證需要用到nsswitch和pam兩個框架:對於這兩個我們以後有時間還會詳細介紹
nsswitch:network server switch,名稱解析框架,這個框架是調用各種glibc庫,完成系統上需要用到的名稱解析功能,如用戶名和用戶ID等
配置文件:/etc/nsswitch.conf
模塊:/lib64/libnss*,/usr/lib64/libnss*
pam:pluggable 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就不安全。。。那麽我們就來看一下結合關系型數據認證虛擬用戶,這樣管理性和安全性都有一定的提升。ftp與mysql結合依賴於pam-mysql,需要安裝pam_mysql在epel源中。安裝好後我們來看一下都有什麽文件:
[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、設置MariaDB,IP:192.168.1.107
這裏解釋一下,vsftp是FTPserver上的系統用戶為了映射虛擬用戶的,tom、jerry為虛擬用戶,password(‘tom’)這個是MariaDB上的一個加密函數,將tom字符串加密存放。
2、配置FTP服務器的pam認證,IP:192.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完成虛擬用戶認證