概述:
FTP是我們日常工作中經常用到的一個服務,但是FTP對用戶的管理卻比較薄弱,默認狀態下,FTP利用pam機制進行賬號管理,默認情況下使用的是系統賬號,如何提升FTP對用戶管理的有效性,針對不同的用戶設定不同的上傳權限,這就要基于虛擬賬號來管理了,本篇就介紹下在vsftpd利用pam機制,結合mysql實現FTP虛擬賬號的管理
具體包含:
1、vsftpd的日常配置使用
2、利用mysql實現虛擬賬號管理
環境:
CentOS7.2 系統,IP為10.1.32.72
第一章 vsftpd的日常配置使用
1、vsftpd服務器端的安裝
yum install vsftpd
2、vsftpd的配置文件介紹
[root@localhost ~]# grep -E "^(#[^[:space:]]+|[[:alpha:]]+)" /etc/vsftpd/vsftpd.conf anonymous_enable=YES ##### 是否啟用匿名賬戶 ##### local_enable=YES ##### 是否啟用本地系統賬戶 ##### write_enable=YES ##### 本地系統用戶是否具有寫權限 ##### local_umask=022 ##### 本地系統賬戶上傳文件時,文件默認的umask ##### #anon_upload_enable=YES ##### 匿名賬戶是否允許上傳 ##### #anon_mkdir_write_enable=YES ##### 匿名賬戶是否可以創建目錄 ##### #anon_other_write_enable=NO ##### 匿名賬戶是否具有其他寫操作的權限,如刪除操作 ##### dirmessage_enable=YES ##### 目錄的歡迎信息,要在目錄下創建.message的文件 ##### xferlog_enable=YES ##### 是否啟用傳輸日志 ##### connect_from_port_20=YES ##### 是否允許從20端口進行連接 ##### #chown_uploads=YES ##### 當上傳文件時,是否更改文件的屬主 ##### #chown_username=whoever ##### 更改文件屬主為哪個用戶 ##### #xferlog_file=/var/log/xferlog ##### 傳輸日志存儲位置 ##### xferlog_std_format=YES ##### 傳輸日志格式是否為std標準格式 ##### #idle_session_timeout=600 ##### 空閑命令連接的超時時長 ##### #data_connection_timeout=120 ##### 數據連接的超時時長 ##### #ftpd_banner=Welcome to blah FTP service. ##### 登錄ftp的歡迎信息 ##### #chroot_local_user=YES ##### 是否禁錮系統用戶在其家目錄 ##### #chroot_list_enable=YES ##### 是否對在/etc/vsftpd/chroot_list中的用戶執行禁錮其在家目錄 ##### #chroot_list_file=/etc/vsftpd/chroot_list ##### chroot_list文件路徑 ##### pam_service_name=vsftpd ##### 基于pam認證使用到的pam認證的文件名稱 ##### userlist_enable=YES ##### 是否啟用user_list文件中的用戶列表功能 ##### [root@localhost ~]#
禁錮用戶于其家目錄的說明:
如果不禁錮用戶于其家目錄,那么在用戶登錄到FTP服務器時,可以切換到任意其具有權限的文件系統路徑,可以操作文件系統路徑上其具有權限的任意文件,但單純的禁錮用戶于其家目錄也會存在風險,因此,如果要禁錮用戶到其家目錄,一般情況下會要求用戶對自己的家目錄不能有寫權限,這樣一來,該系統用戶就只能作為FTP的賬號登錄了,而如果該用戶也希望能登錄系統,則就不能讓其對其家目錄只有寫權限,故形成了對立的方面
配置選項中禁錮用戶于其家目錄的幾種方式:
<1>禁錮所有用戶
chroot_local_user=YES
該選項就是讓文件系統的用戶,以自身用戶名密碼登錄時,禁錮其職能在其家目錄中,而不能切換到別的目錄中
注意,設定了chroot后,要將對應用戶的家目錄的寫權限去掉
<2>禁錮部分用戶
白名單:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
表示啟用chroot_list列表,定義在文件中的用戶將不被禁錮在其家目錄
黑名單:
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
表示啟用chroot_list列表,定義在文件中的用戶將被禁錮在其家目錄
3、FTP的用戶權限應用模型
FTP的用戶的權限,取決于FTP配置文件中其用該具有的權限,和該用戶對FTP的文件共享目錄的權限的交集
即是:
FTP服務有上傳權限,但是其文件系統沒有寫權限,無法正常上傳文件
FTP服務沒上傳權限,文件系統有寫權限,也無法通過FTP登錄的方式上傳文件
4、配置nwc用戶具有寫權限示例
默認配置的情況下,匿名用戶可查看可下載,但不可上傳,刪除等寫操作,系統用戶可進行寫相關操作
第二章 vsftpd基于mysql實現虛擬賬號的管理
1、說明:
通過上述對vsftpd的介紹,我們發現,vsftpd基于系統用戶和匿名用戶的權限管理是比較粗糙的
由于vsftpd是基于pam認證,pam針對vsftpd的配置文件(/etc/pam.d/vsftpd中,編譯安裝此文件默認不存在)定義了在/etc/vsftpd/ftpusers文件中定義的文件系統用戶都不允許登錄FTP服務器,此機制有centos系統提供的
用戶是否能登錄FTP的機制,還有FTP自身提供的配置:
在/etc/vsftpd/有個文件,是user_list,此文件中定義了受控的用戶賬號
該文件有兩種用法:
一種是黑名單(處理文件中定義的用戶,其他用戶都能登錄),要配合指令:
userlist_deny=YES
一種是白名單(只有文件中的用戶能登錄),要配合指令
userlist_deny=NO
基于虛擬用戶,可對每個虛擬用戶設定不同的權限,因此權限管理的顆粒度比較小
所有的虛擬用戶都會被映射為一個文件系統用戶,因此訪問時的文件目錄是此系統用戶的家目錄
虛擬用戶存儲位置:文件、MySQL、ldap、redis、…
hash編碼的文件中:
奇數行為用戶名,偶數行為密碼
關系型數據庫:
vsftpd認證機制是基于pam機制的,故vsftpd是否支持利用關系型數據庫進行賬戶認證,取決于pam,而默認情況下,pam是不支持msql數據庫的,要想支持,需要借助第三方pam-mysql模塊
2、pam-mysql模塊說明
在centos6系統上,epel倉庫中有pam-mysql程序,如果在centos6上,直接yum安裝即可
在centos7系統上,并沒有pam-mysql的程序,只能編譯安裝pam_mysql
在本實驗環境中,采用的是CentOS7的系統,故需要編譯安裝pam_mysql
3、準備編譯環境,確保"Development Tools"和"Server Platform Development"開發工具包組已經安裝
4、安裝編譯安裝pam-mysql時,依賴的程序包mariadb-devel和pam-devel
5、下載pam-mysql源碼包,編譯安裝
6、在數據庫服務器上,創建vsftpd用到的數據庫、創建表、插入具體的用戶信息
(本例中數據庫服務器就在本機)
7、修改pam的配置文件,讓其利用mysql進行虛擬用戶認證
8、為虛擬用戶添加本地文件系統用戶,因為虛擬用戶最終是要映射為某個文件系統用戶的
9、修改vsftpd的配置文件,讓其使用虛擬用戶認證
10、修改完配置文件,重啟vsftpd服務,驗證使用虛擬賬戶是否能夠正常登陸
11、配置每個虛擬賬戶具有不同的權限
修改vsftpd配置文件,讓每個虛擬用戶擁有不同的權限的定義
定義完后,重啟vsftpd服務,然后進行驗證
原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/52492