vsftpd

文件服務:

安裝開啟服務前先關閉selinux,清空iptables策略。避免不必要的麻煩,服務開啟后,配置一切正常有需要再根據情況開啟。

ftp:應用層,C/S,跨主機的文件共享服務;file transfer protocol nfs,cifs:文件系統接口,網絡文件系統;

    nfs:network file system  sun公司研發
    cifs:common internet file system  ,windows上的文件共享協議
        linux使用samba實現cifs協議,是跨平臺使用。

注意:nfs和cifs客戶端可以使用mount命令將其掛載到本地系統之上。跟操作本地磁盤效果是一樣的。

網絡存儲:

NAS:Network Attached Storage,文件服務器,nfs或cifs,文件級別;

SAN:Storage Area Network,塊級別共享服務,分區-->格式化-->創建文件系統;IPSAN, FCSAN;遠程主機要使用就要先分區,格式化(創建文件系統),才能掛載。


vsftpd

ftp協議

file transfer protocol,21/tcp
    C/S:
        Client --> ftp-->Server
            Client:Connect 
            Server:Listen

連接:
    命令連接:命令傳輸,連接一直存在;
    數據連接:數據傳輸,按需創建;

數據連接的建立模式:
    主動模式:ftp服務器開啟21和20兩個端口,21命令端口,20為數據傳輸端口。連接建立時,會協商使用主動還是被動模式。如果時主動模式,則客戶端會將自己的一個隨機端口發送給服務端。
    被動模式:協商為被動模式需要客戶端將自己選定的隨機端口發送給服務端,服務端使用一個隨機端口發送數據給客戶端端口。

    注意:主動或被動傳輸模式,在實際網絡環境,還是有區別的,用戶端一般都是通過nat網絡訪問,服務器端也有防火墻。 


數據傳輸模式:
    文本格式:ASCII
    二進制格式:BINARY

協議安全:
    明文:數據、認證時傳輸賬號和密碼均是明文 ;

    安全增強:
        ftp over ssl/tls:ftps
        ftp over ssh:sftp 

    使用虛擬用戶賬號;盡量不使用系統賬號。
        vsftpd默認開通系統賬號。

應用實現

            c/s:
                Server:
                    Windows:Serv-U, IIS, ...
                    開源解決方案:
                        wuftpd:Washington University ftp daemon
                        vsftpd:Very Secure ftp daemon
                        proftpd, pureftpd, ...
                注意:vsftpd是紅帽默認提供的ftp服務軟件。

                Client:
                    GUI:flashfxp, cute, filezilla, gftp, ...
                    CLI:ftp, lftp, ...

vsftpd

vsftpd:
    程序環境:
        主程序:/usr/sbin/vsftpd
        Unit File:/usr/lib/systemd/system/vsftpd.service
        配置文件:/etc/vsftpd/vsftpd.conf
        /etc/vsftpd/ftpusers 這個文件默認是黑名單,名單中的系統用戶都不能登錄ftp

文檔路徑映射:

默認匿名用戶的路徑映射為ftp用戶的家目錄 系統用戶的家目錄為,系統用戶自己的家目錄 虛擬用戶的家目錄需要根據配置定義,映射到那個系統用戶上,就使用那個為家目錄 如果使用用戶禁錮 chroot功能,則用戶的根目錄就時其家目錄。

fedora, /home/fedora/pub/a.txt --> ftp://HOST:PORT/pub/a.txt
用戶的家目錄映射:訪問vsftpd服務必須以某個系統用戶的身份進行;此用戶的家目錄即為文檔映射的根目錄;
匿名用戶:anonymous,映射為一個系統用戶,此用戶ftp;

    [root@centos7 ~]# ls /var/ftp/
    pub
    [root@centos7 ~]# getent passwd ftp
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

匿名用戶:不能上傳文件,要上傳也可以,但是不給其家目錄授權寫權限,可以給其下子目錄授權寫權限。

注意:文件共享類的權限,有兩類權限,文件系統權限,服務權限。兩者的交集,才可以使用戶有權限。

    setfacl -m u:ftp:rwx /var/ftp/upload/
    服務權限授權,修改vsftpd的主配置文件。

注意:vsftpd默認開啟系統上的用戶登錄,可以在系統上不受約束。

selinux開啟也有影響。

    lftp yang@192.168.18.133:~> put /etc/fstab
    put: Access failed: 553 Could not create file. (fstab)####開啟selinux不能上傳文件。
    lftp yang@192.168.18.133:~> put /etc/fstab ###服務器端關閉setenforce 0
    1130 bytes transferred                      ####可以上傳文件

實驗:

安裝vsftpd
在客戶端系統上安裝lftp和ftp
lftp -u username,password 1.1.1.1 使用用戶名和密碼登錄1.1.1.1的ftp服務器
使用ftp命令登錄
交互式提示用戶輸入用戶名和密碼

配置:vsftpd.conf

directive VALUE,...
    directive:指令之前不能存在任何字符,包括空白;

匿名用戶配置:
    anonymous_enable=YES ###是否開啟匿名用戶登錄

    anon_upload_enable=YES ###是否允許匿名用戶上傳文件,但是該目錄需要先給ftp用戶授權寫權限,ftp服務僅僅是授權用戶上傳權限,沒有刪除權限,刪除權限需要單獨授權。

    anon_mkdir_write_enable=YES ###是否允許匿名用戶創建目錄
    anon_other_write_enable=YES ###是否開啟用戶的其他寫權限。是否允許用戶刪除文件。

本地用戶配置:

    local_enable=YES 是否開啟系統用戶
    write_enable=YES 是否允許系統用戶向自己的家目錄寫入文件。
    默認開啟了系統用戶登錄,用戶可以在家目錄和系統各目錄之間切換。

認證服務:
    pam_service_name=vsftpd                     

    /etc/pam.d/vsftpd 

    pam: pluggable authencate module

切換目錄時的提示信息:
    dirmessage_enable=YES  ##進入某個目錄后的提示信息
    目錄下放置.messages文件

修改上傳文件的屬主:
    chown_uploads=YES
    chown_username=USERNAME

禁錮用戶于自己的家目錄:

會引入別的風險,因此,要求用戶對自己的家目錄不能有寫權限;

系統用戶控制:

    (1) 禁錮所有用戶
        chroot_local_user=YES

    (2) 禁錮部分用戶
        (a) 白名單:名單中的用戶不被禁錮;
            chroot_local_user=YES
            chroot_list_enable=YES ##起用名單列表
            chroot_list_file=/etc/vsftpd/chroot_list ##名單列表位置

        (b) 黑名單:名單中的用戶被禁錮
            chroot_local_user=NO
            chroot_list_enable=YES
            chroot_list_file=/etc/vsftpd/chroot_list

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().

# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)

#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list

不允許用戶對根目錄有寫權限(這里的根指的時用戶的家目錄),會帶來安全風險,所以需要將禁止用戶對家目錄的文件系統的寫權限。
但是還要用戶能夠上傳文件等操作,就要在家目錄下創建一個用戶有寫權限的目錄。

注意:如果開啟此選項,而用戶還對自己的家目錄有寫權限,ftp服務將拒絕用戶登錄。除非將用戶對家目錄的寫權限去掉。
一般使用系統用戶登錄ftp的用戶,這類用戶一般不讓其使用ssh等,登錄系統,僅作ftp認證使用。所以去掉用戶家目錄的寫權限,對用戶沒什么影響。

    [root@centos6 ~]# lftp -u yang,123qwe 192.168.18.133
    lftp yang@192.168.18.133:~> ls
    ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()

默認開啟了系統用戶登錄,用戶可以在家目錄和系統各目錄之間切換。 默認匿名用戶被禁錮在/var/ftp目錄下,此為其根目錄。

用戶控制列表(黑白名單)-定義那些用戶能訪問,那些用戶不能訪問ftp

默認使用黑名單控制

/etc/vsftpd/ftpusers   ###這各是PAM中定義的不能訪問ftp服務的用戶列表  
/etc/vsftpd/user_list  ###這個是ftp服務自己定義的列表,可實現黑白名單的作用。

user_list控制用戶訪問vsftpd:默認使用黑名單控制。

            (1) 白名單
                userlist_enable=YES
                userlist_deny=NO   ###不拒絕,則名單為白名單
                要作為白名單使用,就要把/etc/vsftpd/user_list這個文件中的用戶刪掉
                填入要加入白名單的用戶

            (2) 黑名單,默認
                userlist_enable=YES
                userlist_deny=YES   ###拒絕,則名單為黑名單

[root@centos7 ~]# cat /etc/vsftpd/user_list 
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.

具體配置文件配置參數。參看man vsftpd.conf

例如控制用戶上傳下載的速率 服務最大并發連接數 max_clients 2000 允許同時連接客戶端數 允許每個ip(客戶端)的最大連接數 …

vsftp認證機制:

使用系統自帶的pam模塊認證。

配置文件中定義了pam認證。
    /etc/vsftpd/vsftpd.conf
        pam_service_name=vsftpd 這里使用的是相對路徑,/etc/pam.d的相對路徑。

/etc/pam.d/vsftpd
    [root@centos7 ~]# cat /etc/pam.d/vsftpd 
    #%PAM-1.0
    session    optional     pam_keyinit.so    force revoke
    ###默認拒絕指定目錄下的列表文件中的用戶登錄
    auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    auth       required     pam_shells.so
    auth       include      password-auth
    account    include      password-auth
    session    required     pam_loginuid.so
    session    include      password-auth

虛擬用戶賬號:

    vsftpd登錄方式:三種
        匿名用戶,系統賬號(可以登錄系統的用戶),虛擬賬號(與系統無關的自建的賬號和密碼)

    vsftpd依賴pam完成認證,pam存儲支持的認證方式,vsftpd都可調用;
    賬號密碼存儲于何處?
        文件、MySQL、ldap、redis、...


    pam_mysql模塊
        CentOS 6:epel
        CentOS 7:編譯安裝 

    編譯:
        (1) 編譯環境;
        (2) 依賴關系:mariadb-devel, pam-devel 
            服務于兩個不同的服務,需要這個兩個服務的開發包支持。才能編譯安裝。

        下載pam源碼解壓       
        # ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security/
        # make install

vsftpd使用mysql認證配置步驟

一、MySQL設置:

    mysql> CREATE DATABASE vsftpd;
    mysql> GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'mageedu';
    MariaDB [(none)]> flush privileges
    mysql>  CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL);
    mysql> use vsftpd
    mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu'));

    MariaDB [vsftpd]> DESC user
    -> ;
    ERROR 1146 (42S02): Table 'vsftpd.user' doesn't exist
    MariaDB [vsftpd]> DESC users;
    +----------+----------------------+------+-----+---------+----------------+
    | Field    | Type                 | Null | Key | Default | Extra          |
    +----------+----------------------+------+-----+---------+----------------+
    | uid      | smallint(5) unsigned | NO   | UNI | NULL    | auto_increment |
    | name     | varchar(100)         | NO   | PRI | NULL    |                |
    | password | char(48)             | NO   |     | NULL    |                |
    +----------+----------------------+------+-----+---------+----------------+
    3 rows in set (0.00 sec)

    MariaDB [vsftpd]> select * from users;
        -> ;
    +-----+-------+-------------------------------------------+
    | uid | name  | password                                  |
    +-----+-------+-------------------------------------------+
    |   2 | jerry | *9A94EE7D14C10908118B62D2DA88E6932E11E438 |
    |   3 | lucy  | *9A94EE7D14C10908118B62D2DA88E6932E11E438 |
    |   1 | tom   | *9A94EE7D14C10908118B62D2DA88E6932E11E438 |
    +-----+-------+-------------------------------------------+
    3 rows in set (0.00 sec)

二、啟用虛擬賬號,映射為vuser

        準備要映射成為的系統賬號:
            # mkdir -pv /ftproot/{pub,upload}  ###為虛擬賬號創建家目錄。登錄ftp后的家目錄。
            # useradd -d /ftproot vuser ###但是家目錄要給為剛創建的目錄。隨便創建一個用戶
            這樣創建的用戶對自己的家目錄沒有寫權限。

            # setfacl -m u:vuser:rwx /ftproot/upload ###給upload目錄寫權限。

        配置vsftpd啟用虛擬用戶,并使用指定的pam service:修改/etc/vsftpd/vsftpd.conf配置文件
            pam_service_name=vsftpd.mysql
            guest_enable=YES  ###啟用虛擬賬號
            guest_username=vuser ###將虛擬賬號映射為vuser,剛創建的系統用戶。

            man vsftpd.conf
               guest_enable
                      If enabled, all  non-anonymous  logins  are  classed  as  "guest"
                      logins.  A  guest  login is remapped to the user specified in the
                      guest_username setting.
                      Default: NO ##默認不開啟使用虛擬用戶,開啟則將虛擬用戶映射為系統用戶,映射
                        為的系統用戶由guest_username的值決定。

               guest_username
                      See the boolean setting guest_enable for a  description  of  what
        ▽             constitutes  a  guest  login.  This  setting is the real username
                      which guest users are mapped to.
                      Default: ftp ##默認將虛擬用戶映射為ftp這個系統用戶

三、重新定義一個pam文件,不再使用系統賬號認證,而是使用mysql認證

        準備基于mysql認證的pam配置文件:/etc/pam.d/vsftpd.mysql

            auth required pam_mysql.so host=127.0.0.1 user=vsftpd passwd=mageedu db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
            account required pam_mysql.so host=127.0.0.1 user=vsftpd passwd=mageedu db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 

        注意:auth required 對登錄的用戶要做認證,使用mysql認證,使用剛才建好的mysql賬號登錄 ,訪問的數據庫vsftpd 表為users 用戶名使用的字段為name 密碼使用的字段為password 加密方式使用加密方式為2 (源碼文件中自帶README文件中介紹了pam支持的加密方式)
            account required做賬號審計的,賬號是否在有效期內等。
            兩個條件必須同時滿足

           0 (or "plain") = No encryption.  Passwords stored in plaintext.
                            HIGHLY DISCOURAGED.
           1 (or "Y")     = Use crypt(3) function.
           2 (or "mysql") = Use MySQL PASSWORD() function. It is possible
                            that the encryption function used by PAM-MySQL
                            is different from that of the MySQL server, as
                            PAM-MySQL uses the function defined in MySQL's
                            C-client API instead of using PASSWORD() SQL function
                            in the query.                  
           3 (or "md5")   = Use plain hex MD5.          
           4 (or "sha1")  = Use plain hex SHA1.

四、配置每虛擬用戶擁有不同的權限:vsftpd.conf

        user_config_dir=/etc/vsftpd/vusers_conf
        chroot_local_user=YES 修改配置文件,禁錮用戶   

        # mkdir /etc/vsftpd/vusers_conf
        # touch USERNAME

        該配置文件功能強大,控制用戶行為等。很多參數與/etc/vsftpd/vsftpd.conf的參數相同,
        但是不是所有的參數都有效,有些設置是優先于用戶配置的。

        man vsftpd.conf
           user_config_dir
                  This powerful option allows the override  of  any  config  option
                  specified  in the manual page, on a per-user basis. Usage is sim‐
                  ple, and  is  best  illustrated  with  an  example.  If  you  set
                  user_config_dir  to  be  /etc/vsftpd/user_conf and then log on as
                  the user "chris", then vsftpd will apply the settings in the file
                  /etc/vsftpd/user_conf/chris  for the duration of the session. The
                  format of this file is as detailed in this  manual  page!  PLEASE
                  NOTE that not all settings are effective on a per-user basis. For
                  example, many settings only prior to  the  user's  session  being
                  started.  Examples of settings which will not affect any behviour
                  on  a  per-user  basis   include   listen_address,   banner_file,
                  max_per_ip, max_clients, xferlog_file, etc.

                  Default: (none)

        為每個用戶創建一個權限配置文件

    配置用戶權限--配置指令:

        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        anon_other_write_enable=YES

練習:完成vsftpd的配置,要求;

(1) 基于mysql認證; (2) 設定tom用戶,密碼為mageedu,有上傳文件權限; (3) 上傳路徑為/upload/

總結: vsftpd 任何用戶登錄都要由家目錄。 匿名用戶的家目錄默認為/var/ftp 系統用戶的家目錄為自己系統上家目錄 啟用虛擬用戶,虛擬用戶的家目錄由配置文中配置的系統用戶決定。 虛擬用戶公用一個家目錄。 支持為每個虛擬用戶設立一個配置文件,配置用戶賬號行為等功能。

    用戶訪問方式(認證方式)
        默認是支持匿名用戶,和系統用戶登錄
        需要使用其他認證方式需要單獨配置。要pam支持的方式,或有其支持pam模塊軟件。

    允許將用戶鎖定在家目錄
        匿名用戶鎖定在/var/ftp/目錄下
        系統用戶沒做限制,可以任意切換目錄。

        用戶禁錮,由黑白名單之分。可以控制那些用戶禁錮那些用戶不禁錮

    用戶訪問授權(userlist)兩種控制方式
        pam定義和ftp服務定義的授權方式

        /etc/vsftpd/ftpusers   ###這各是PAM中定義的不能訪問ftp服務的用戶列表  
        /etc/vsftpd/user_list  ###這個是ftp服務自己定義的列表,可實現黑白名單的作用。

配置服務前先關閉selinux和iptalbes以免引起不必要的錯誤。如需開啟等服務調試完畢再開啟。開啟后進行測試,設置selinux或iptables

配置vsftpd服務過程中,配置文件錯誤可能導致服務不能啟動,注意配置文件修改 /etc/vsftpd/vsftpd.conf

配置服務不能啟動,注意查看 [root@centos7 ~]# systemctl status vsftpd.service 服務不能啟動會有簡要的提示。

配置mysql認證,用戶不能登錄問題 查看系統安全日志/var/log/security日志,有關于認證錯誤的日志。 查看是那個方面出了問題。是vsftpd本身的問題還是pam_mysql模塊除了問題。 還是pam提示連接不上數據庫。 連接不上數據庫,可使用為vsftpd建的mysql賬號本地登錄(服務端主機上)測試。是否為賬號問題。

 

原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/56560

(0)
yywyyw
上一篇 2016-11-01
下一篇 2016-11-01

相關推薦

  • 安裝命令及源碼安裝

    rpm命令  –q:查詢 -qa:查詢系統內所有已安裝的包 -qf:查詢文件來自于那個安裝包 -ql:安裝包內的文件 -qp:與其他命令配合可以查詢未安裝包的信息,但要跟完整的安裝包名 -qi:查看報的詳細信息 -qc:查詢程序的配置文件 -qd:查詢程序的文檔 -qR:查詢安裝包依賴的程序 –scripts:查看安裝包內的腳本 -q …

    Linux干貨 2016-08-26
  • 虛擬化技術介紹、Xen的簡單實現

    虛擬化是什么? 虛擬化是一種資源管理技術, 是將計算機的各實體資源, 如服務、網絡、內存及存儲等, 予以抽象、轉換后呈現出來, 打破實體之間的不可切割的障礙, 使用戶可以比原本的配置更好的方式來應用這些資源。這些資源的新虛擬部分是不受現有資源的架設方式, 地域或物理配置所限制。一般情況下, 虛擬化資源包括計算能力和數據存儲 —<轉自維基百科&…

    2016-05-31
  • Linux系統修復

    在boot里面我們可以根據自己的需求去設置一些啟動選項,我們今天來了解一下Linux啟動流程,以及boot下的選項。       加載BIOS的硬件信息,獲取第一個啟動設備。 讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息 加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備。 核型執行init程序…

    Linux干貨 2016-09-13
  • 新鮮出爐的一篇好PPT,MySQL Optimizer團隊力作

    新鮮出爐的一篇好PPT,MySQL Optimizer團隊Senior Principal Software Engineer ?ystein同學親自操刀完成的《How to Analyze and Tune MySQL Queries for Better Performance》內容值得期待,有實現分析,有實戰用例。有需要的朋友可以點擊下載! 下載地址:…

    Linux干貨 2015-02-27
  • bash通配符和正則表達式元字符部分歸納

    Linux中有各種各樣的字符,而且在不同環境和不同命令之下含義也不同 作為新手,決定先歸納學到的符號,方便后面學習厘清它們之間的關系。 glob 簡化了的正則表達式 bash默認通配符: ? :只匹配一個任意字符; * :匹配零個或多個任意字符;   [^] :方括號及其中^中的取反 [abc]:匹配任何一個列在方括號中的字符(這個例子要么匹配一個…

    Linux干貨 2016-04-11
  • 在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件

    在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。 ~]# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S) ~]# tree /tmp 查看輸出結果 復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。 …

    Linux干貨 2016-11-06
欧美性久久久久