vsftpd基于mysql進行虛擬用戶管理

概述:

    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

    blob.png    

    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用戶具有寫權限示例

        默認配置的情況下,匿名用戶可查看可下載,但不可上傳,刪除等寫操作,系統用戶可進行寫相關操作

        blob.png        

        blob.png

        blob.png

        blob.png

        blob.png

        blob.png

第二章    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"開發工具包組已經安裝

        blob.png

    

    4、安裝編譯安裝pam-mysql時,依賴的程序包mariadb-devel和pam-devel

        blob.png

    5、下載pam-mysql源碼包,編譯安裝

        blob.png

        blob.png

        blob.png

        blob.png

   

    6、在數據庫服務器上,創建vsftpd用到的數據庫、創建表、插入具體的用戶信息

        (本例中數據庫服務器就在本機)

        blob.png

        blob.png

    7、修改pam的配置文件,讓其利用mysql進行虛擬用戶認證

        blob.png

        

    8、為虛擬用戶添加本地文件系統用戶,因為虛擬用戶最終是要映射為某個文件系統用戶的

        blob.png

    9、修改vsftpd的配置文件,讓其使用虛擬用戶認證

        blob.png

    10、修改完配置文件,重啟vsftpd服務,驗證使用虛擬賬戶是否能夠正常登陸

        blob.png

    11、配置每個虛擬賬戶具有不同的權限

        blob.png

        修改vsftpd配置文件,讓每個虛擬用戶擁有不同的權限的定義

        blob.png

        111.png

        定義完后,重啟vsftpd服務,然后進行驗證

        blob.png

        blob.png

原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/52492

(0)
M20-1倪文超M20-1倪文超
上一篇 2016-10-18
下一篇 2016-10-18

相關推薦

  • Linux文件類型及顏色標識整理

    Linux系統上的文件類型 -:f; 常規文件 , d:directory, 目錄文件; b;block device,塊設備文件,支持以'block'為單位進行隨機訪問; c:character device,字符設備文件,支持以'character'為單位進行線性訪問;    &nbs…

    Linux干貨 2016-10-16
  • Linux用戶與權限管理

    由于Linux是多用戶、多任務系統,出于一些需要,當我們創建的文件希望對一部分用戶開放,對一部分用戶隱藏的時候應該怎么辦呢?這樣的話,就需要涉及到Linux系統中對用戶以及對文件權限的管理。 一、相關文件 在Linux中,一切配置文件都是以文本文檔的方式來保存的,同樣用戶的信息也保存在系統的一些文件中,其位置為/etc/passwd。此文件只有root用戶具…

    Linux干貨 2016-08-05
  • 文件通配符是啥?

    文件通配符     包含 ‘?’, ‘*’ 或 ‘[‘ 字符的字符串稱為通配符模板(wildcard  pattern).形成路徑名(globbing)指一種操作,把通配符模板展開為匹配該串的路徑名.匹配定義為:   …

    Linux干貨 2017-04-23
  • 10個有用的Linux命令面試問題及答案

    1. 如何暫停一個正在運行的進程,把其放在后臺(不運行)? 答案:為了停止正在運行的進程,讓其在后臺運行,我們可以使用組合鍵 Ctrl+Z。 2. 什么是安裝Linux所需的最小分區數量,以及如何查看系統啟動信息? 答案:單獨一個/root分區足以執行所有的系統任務,但是強烈建議安裝Linux時,需要至少三個分區:/root,/boot,/swap。一個ID…

    2017-09-05
  • AWK小記

    gawk – pattern scanning and processing language 基本用法:gawk [options] ‘program’ FILE … program: PATTERN{ACTION STATEMENTS} 語句之間用分號分隔 print, printf 選項: -F:指明輸入…

    2018-01-16
  • locate與find不得不說的事

    本文內容: locate與find 練習     locate與find是linux中最常用的兩種查找方式,二者各有優缺點,locate查找迅速,卻由于數據庫非實時更新,導致可能查找不全,而find由于是從指定路徑開始遍歷,速度相對較慢,卻更為準確,而且用法也更加靈活,因此find運用更加廣泛,也是本文的重點。 文件查找: locate搜…

    Linux干貨 2016-08-18
欧美性久久久久