網絡文件共享服務-vsftp

文件傳輸協議FTP

一、File Transfer Protocol 早期的三個應用級協議之一
    二、基於C/S結構
    三、雙通道協議:
            數據和命令鏈接
            數據鏈接則是從命令決定傳輸數據開始到數據傳輸結束,這個鏈接則關閉了
            客戶端發起請求服務端響應、雙方正式創建鏈接。而結束,這是命令鏈接的正常工做邏輯
            數據鏈接是臨時根據命令需求創建的、根本目的是爲了客戶端上傳數據給服務端
            數據鏈接誰給打開
                    數據鏈接若是是爲服務器端主動去鏈接客戶端的稱爲主動模式
                    由客戶端發請求、服務端響應、稱爲被動模式
                    FTP多數都是工做在被動模式下,由客戶端發請求來鏈接服務器
    四、數據傳輸格式:
            二進制(默認)和文本
    五、兩種模式:服務器角度
            主動(PORT style):服務器主動鏈接
            命令(控制):客戶端:隨機port --- 服務器:tcp21
            數據:客戶端:隨機port ---服務器:tcp20
            被動(PASV style):客戶端主動鏈接
            命令(控制):客戶端:隨機port --- 服務器:tcp21
            數據:客戶端:隨機port --- 服務器:隨機port
    六、服務器被動模式數據端口示例:
            227 Entering Passive Mode (172,16,0,1,224,59)
            服務器數據端口爲:224*256+59

FTP軟件介紹:

FTP服務器:
    Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
    vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務器
        高速,穩定,下載速度是WU-FTP的兩倍
        ftp.redhat.com數據:單機最多可支持15000個併發
客戶端軟件:
    ftp,lftp,lftpget,wget,curl
    ftp -A ftpserver port -A主動模式 –p 被動模式
    lftp –u username ftpserver
    lftp username@ftpserver
    lftpget ftp://ftpserver/pub/file
    gftp:GUI centos5 最新版2.0.19 (11/30/2008)
    filezilla,CuteFtp,FlashFXP,LeapFtp
    IE ftp://username:password@ftpserver

FTP服務

狀態碼:
    1XX:    信息       125:數據鏈接打開
    2XX:    成功類狀態   200:命令OK 230:登陸成功
    3XX:    補充類          331:用戶名OK
    4XX:    客戶端錯誤    425:不能打開數據鏈接
    5XX:    服務器錯誤   530:不能登陸

用戶認證:
    匿名用戶:ftp,anonymous,對應Linux用戶ftp
    系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
    虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件
        nsswitch:network service switch名稱解析框架
        pam:pluggable authentication module 用戶認證
        /lib64/security /etc/pam.d/ /etc/pam.conf

vsftpd服務

一、由vsftpd包提供
二、再也不由xinetd管理
三、用戶認證配置文件:
        /etc/pam.d/vsftpd
四、服務腳本:
        /usr/lib/systemd/system/vsftpd.service
        /etc/rc.d/init.d/vsftpd
五、配置文件:
        /etc/vsftpd/vsftpd.conf
        man 5 vsftpd.conf
        格式:option=value
        注意:= 先後不要有空格
六、匿名用戶(映射爲系統用戶ftp )共享文件位置:
        /var/ftp
七、系統用戶共享文件位置:
        用戶家目錄
八、虛擬用戶共享文件位置:
        爲其映射的系統用戶的家目錄
九、命令端口
        listen_port=21
十、主動模式端口
        connect_from_port_20=YES  主動模式端口爲20
        ftp_data_port=20 (默認) 指定主動模式的端口
十一、被動模式端口範圍
        linux 客戶端默認使用被動模式
        windows 客戶端默認使用主動模式
        pasv_min_port=6000 0爲隨機分配
        pasv_max_port=6010
十二、使用當地時間
        use_localtime=YES 使用當地時間(默認爲NO,使用GMT)
1三、匿名用戶
        anonymous_enable=YES                    支持匿名用戶
        no_anon_password=YES(默認NO)          匿名用戶略過口令檢查
        anon_world_readable_only (默認YES)        只能下載所有讀的文件
        anon_upload_enable=YES                  匿名上傳,注意:文件系統權限
        anon_mkdir_write_enable=YES             匿名建目錄
        anon_umask=0333                         指定匿名上傳文件的umask,默認077
        anon_other_write_enable=YES             可刪除和修改上傳的文件
        chown_uploads=YES(默認NO)             指定上傳文件的默認的全部者和權限
        chown_username=wang
        chown_upload_mode=0644
1四、Linux系統用戶
        local_enable=YES            是否容許linux用戶登陸
        write_enable=YES            容許linux用戶上傳文件
        local_umask=022             指定系統用戶上傳文件的默認權限
        guest_enable=YES            全部系統用戶都映射成guest用戶
        guest_username=ftp          配合上面選項才生效,指定guest用戶
        local_root=/ftproot         guest用戶登陸所在目錄
1五、禁錮全部系統用戶在家目錄中
        chroot_local_user=YES(默認NO,不由錮)禁錮系統用戶
1六、禁錮或不由錮特定的系統用戶在家目錄中,與上面設置功能相反
        chroot_list_enable=YES
        chroot_list_file=/etc/vsftpd/chroot_list
        當chroot_local_user=YES時,則chroot_list中用戶不由錮
        當chroot_local_user=NO時,則chroot_list中用戶禁錮
1七、wu-ftp日誌:
        默認啓用
            xferlog_enable=YES (默認)啓用記錄上傳下載日誌
            xferlog_std_format=YES (默認) 使用wu-ftp日誌格式
            xferlog_file=/var/log/xferlog (默認)可自動生成
    vsftpd日誌:
        默認不啓用
            dual_log_enable=YES 使用vsftpd日誌格式,默認不啓用
            vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成
1八、登陸提示信息
        ftpd_banner="welcome to mage ftp server"
        banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效
    目錄訪問提示信息
        dirmessage_enable=YES (默認)
        message_file=.message(默認) 
        信息存放在指定目錄下.message

1九、使用pam(Pluggable Authentication Modules)完成用戶認證
    pam_service_name=vsftpd
        pam配置文件:/etc/pam.d/vsftpd
        /etc/vsftpd/ftpusers 默認文件中用戶拒絕登陸

    正常狀況下,任何一個文件經過網絡服務訪問時,他應該受控於兩個維度
        1、受控於軟件自己定義的訪問控制規則
        2、受控於文件系統
20、是否啓用控制用戶登陸的列表文件
        userlist_enable=YES                     默認有此設置
        userlist_deny=YES(默認值)              黑名單,不提示口令,NO爲白名單
        userlist_file=/etc/vsftpd/users_list    此爲默認值
    vsftpd服務指定用戶身份運行
        nopriv_user=nobody (默認值)

    鏈接數限制
        max_clients=0       最大併發鏈接數
        max_per_ip=0        每一個IP同時發起的最大鏈接數

    傳輸速率:字節/秒
        anon_max_rate=0     匿名用戶的最大傳輸速率
        local_max_rate=0    本地用戶的最大傳輸速率

    鏈接時間:秒爲單位
        connect_timeout=60              主動模式數據鏈接超時時長
        accept_timeout=60               被動模式數據鏈接超時時長
        data_connection_timeout=300     數據鏈接無數據輸超時時長
        idle_session_timeout=60         無命令操做超時時長

    優先以文本方式傳輸
        ascii_upload_enable=YES
        ascii_download_enable=YES

vsftpd匿名用戶配置示例

簡單示例:只要安裝好以後啓動服務就能夠正常使用ftp
1、安裝vsftpd軟件
    [root@node6 ~]#yum -y install vsftpd
2、啓動vsftpd服務
    [root@node6 ~]#systemctl start vsftpd
3、經過客戶端來訪問作個簡單測試
    [root@node7 ~]#lftp 192.168.137.56
    lftp 192.168.137.56:~> ls              
    drwxr-xr-x    2 0        0               6 Aug 03  2017 pub
    lftp 192.168.137.56:/> cd pub
    lftp 192.168.137.56:/pub> ls
    lftp 192.168.137.56:/pub> ls
    -rw-r--r--    1 0        0              23 Oct 22 12:26 issue
    lftp 192.168.137.56:/pub> lcd /tmp
    lcd ok, local cwd=/tmp
    lftp 192.168.137.56:/pub> mget issue 
    23 bytes transferred
    lftp 192.168.137.56:/pub> bye
    [root@node7 ~]#ls /tmp/
    issue
四、把服務端共享的文件權限改爲600
[root@node6 /var/ftp/pub]#chmod 600 issue 
[root@node6 /var/ftp/pub]#ll
total 4
-rw------- 1 root root 23 Oct 22 20:26 issue

五、再次經過客戶端鏈接而後下載此文件
    [root@node7 ~]#lftp 192.168.137.56
    lftp 192.168.137.56:/> cd pub/
    lftp 192.168.137.56:/pub> ls
    -rw-------    1 0        0              23 Oct 22 12:26 issue
    lftp 192.168.137.56:/pub> mget issue 
    mget: Access failed: 550 Failed to open file. (issue)
    lftp 192.168.137.56:/pub> 

配置匿名用戶上傳、下載、等功能:
    修改配置文件,打開容許匿名用戶上傳功能
        [root@node6 /etc/vsftpd]#vim vsftpd.conf 
            #anon_upload_enable=YES
            anon_upload_enable=YES

    經過客戶端驗證
        [root@node7 ~]#lftp 192.168.137.56
        lftp 192.168.137.56:~> lcd /etc/
        lcd ok, local cwd=/etc
        lftp 192.168.137.56:~> put fstab
        put: Access failed: 553 Could not create file. (fstab)
        lftp 192.168.137.56:/> 

    正常狀況下,ftp的用戶anonymous被映射爲ftp用戶,而默認共享的pub目錄屬主屬組默認爲root,而ftp用戶被映射爲其它用戶是沒有寫權限,因此致使沒法上傳,建議不要修改pub的權限,最好新建一個目錄用來上傳

    解決方法:在pub同級目錄下新建一個目錄專門用來上傳,修改目錄的所屬組和屬主權限爲ftp
        [root@node6 /var/ftp]#mkdir upload
        [root@node6 /var/ftp]#ls
        pub  upload
        [root@node6 /var/ftp]#ll
        total 0
        drwxr-xr-x 2 root root 19 Oct 22 20:26 pub
        drwxr-xr-x 2 root root  6 Oct 22 20:52 upload
        [root@node6 /var/ftp]#chown -R ftp.ftp upload/
        [root@node6 /var/ftp]#ll -ld  upload/
        drwxr-xr-x 2 ftp ftp 6 Oct 22 20:52 upload/

    再次驗證客戶端
        [root@node7 ~]#lftp 192.168.137.56/upload
        cd ok, cwd=/upload
        lftp 192.168.137.56:/upload> lcd /etc
        lcd ok, local cwd=/etc
        lftp 192.168.137.56:/upload> put fstab
        595 bytes transferred
        lftp 192.168.137.56:/upload> 
    切換到服務器上查看文件
        [root@node6 /var/ftp]#cd upload/
        [root@node6 /var/ftp]#ls -l upload/
        total 4
        -rw------- 1 ftp ftp 595 Oct 22 20:55 fstab

把上傳的文件屬主改爲別的用戶、並修改文件權限:
    編輯配置文件
        [root@node6 /etc/vsftpd]#vim vsftpd.conf 
        #chown_uploads=YES
        #chown_username=whoever
    改成
        chown_uploads=YES
        chown_username=cobbler
        chown_upload_mode=0644

    建立cobbler用戶
        [root@node6 /etc/vsftpd]#useradd cobbler
    重啓vsftpd服務
        [root@node6 /etc/vsftpd]#systemctl restart vsftpd
    經過客戶端驗證此舉設置是否成功
        [root@node7 ~]#lftp 192.168.137.56/upload
        cd ok, cwd=/upload
        lftp 192.168.137.56:/upload> lcd /etc
        lcd ok, local cwd=/etc
        lftp 192.168.137.56:/upload> put passwd
        1199 bytes transferred
        lftp 192.168.137.56:/upload> ls
    從服務器端查看文件屬性
        [root@node6 /var/ftp]#cd upload/
        [root@node6 /var/ftp/upload]#ll
        total 8
        -rw------- 1 ftp     ftp  595 Oct 22 20:55 fstab
        -rw-r--r-- 1 cobbler ftp 1199 Oct 22 21:04 passwd

    在客戶端鏈接到服務器嘗試可否創建目錄
        lftp 192.168.137.56:/upload> mkdir test
        mkdir: Access failed: 550 Permission denied. (test)
        lftp 192.168.137.56:/upload> rm fstab
        rm: Access failed: 550 Permission denied. (fstab)
        lftp 192.168.137.56:/upload> rm passwd 
        rm: Access failed: 550 Permission denied. (passwd)
        lftp 192.168.137.56:/upload> 
    須要容許匿名用戶建立刪除文件或者目錄須要在服務器的配置文件裏面開啓以下兩項
        [root@node6 /etc/vsftpd]#vim vsftpd.conf 
            anon_mkdir_write_enable=YES
            anon_other_write_enable=YES
    修改完以後重啓服務
        [root@node6 /etc/vsftpd]#systemctl restart vsftpd
    在客戶端上驗證
        [root@node7 ~]#lftp 192.168.137.56/upload
        cd ok, cwd=/upload
        lftp 192.168.137.56:/upload> mkdir test
        mkdir ok, 'test' created
        lftp 192.168.137.56:/upload> ls
        -rw-------    1 14       50            595 Oct 22 12:55 fstab
        -rw-r--r--    1 1000     50           1199 Oct 22 13:04 passwd
        drwx------    2 14       50              6 Oct 22 13:10 test
        lftp 192.168.137.56:/upload> rm fstab 
        rm ok, 'fstab' removed
        lftp 192.168.137.56:/upload> rm passwd 
        rm ok, 'passwd' removed
        lftp 192.168.137.56:/upload> rmdir test
        rmdir ok, 'test' removed
        lftp 192.168.137.56:/upload> ls
        lftp 192.168.137.56:/upload>

vsftpd匿名用戶配置示例

建立一個系統用戶,並修改密碼
    [root@node6 /etc/vsftpd]#useradd ilinux
    [root@node6 /etc/vsftpd]#echo 123456|passwd --stdin ilinux
    Changing password for user ilinux.
    passwd: all authentication tokens updated successfully.

客戶端登陸剛剛在服務器端建立的系統用戶,登陸上來以後顯示的是系統用戶的名稱,而匿名用戶沒有

    [root@node7 ~]#lftp -u ilinux 192.168.137.56
    Password: 
    lftp ilinux@192.168.137.56:~> ls       
    lftp ilinux@192.168.137.56:~> lcd /etc/
    lcd ok, local cwd=/etc
    lftp ilinux@192.168.137.56:~> put issue
    23 bytes transferred
    lftp ilinux@192.168.137.56:~> ls 
    -rw-r--r--    1 1001     1001           23 Oct 22 13:19 issue
    lftp ilinux@192.168.137.56:~> 

在服務器端ilinux的家目錄裏面查看從客戶端上傳上來的文件
每一個用戶登陸ftp以後訪問的都是用戶的家目錄
爲何匿名用戶訪問的是/var/ftp目錄,匿名用戶訪問的也是家目錄,是ftp的家目錄
    [root@node6 /var/ftp/upload]#grep "^ftp" /etc/passwd
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    [root@node6 /var/ftp/upload]#ls /home/ilinux/
    issue

系統用戶和匿名用戶受控方式是不同的,就算禁止匿名用戶上傳下載,系統用戶不受影響、正常能上傳和下載

把系統用戶映射爲來賓賬號guest

先建立來賓用戶和來賓的目錄,而後須要把建立的目錄去掉寫權限要否則經過客戶端驗證會報錯誤提示
    [root@node6 /var/ftp/upload]#useradd -d /data/ftproot vsguest
    [root@node6 /var/ftp/upload]#chmod -w /data/ftproot/
    [root@node6 /var/ftp/upload]#ls -ld /data/ftproot/
    dr-x------ 2 vsguest vsguest 62 Oct 22 21:56 /data/ftproot/
    [root@node6 /var/ftp/upload]#chmod +rx !$
    chmod +rx /data/ftproot/
    [root@node6 /var/ftp/upload]#ls -ld /data/ftproot/   
    dr-xr-xr-x 2 vsguest vsguest 62 Oct 22 21:56 /data/ftproot/
    [root@node6 /var/ftp/upload]#
編輯配置文件增長兩項選項
    [root@node6 /etc/vsftpd]#vim vsftpd.conf 
    #guest user
    guest_enable=YES
    guest_username=vsguest
重啓服務
    [root@node6 /etc/vsftpd]#systemctl restart vsftpd

複製測試文件到來賓目錄下,能區分開來是在此目錄下
    [root@node6 /etc/vsftpd]#cp /etc/vsftpd/vsftpd.conf /data/ftproot/

在客戶端上測試:這裏上面說過要把來賓的目錄寫權限去掉要否則會提示500的錯誤提示
    [root@node7 ~]#lftp -u ilinux 192.168.137.56
    Password: 
    lftp ilinux@192.168.137.56:~> pwd      
    ftp://ilinux@192.168.137.56
    lftp ilinux@192.168.137.56:~> ls
    ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    lftp ilinux@192.168.137.56:~> ls
    ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    lftp ilinux@192.168.137.56:~> ls
    lftp ilinux@192.168.137.56:/> ls 
    -rw-------    1 0        0            5129 Oct 22 14:00 vsftpd.conf
    lftp ilinux@192.168.137.56:/> 

在服務器上把剛纔映射爲來賓賬號的那兩項註釋掉而後再經過客戶端測試看是否是回到了它本身的家目錄裏面

    [root@node6 /etc/vsftpd]#vim vsftpd.conf 
        #guest_enable=YES
        #guest_username=vsguest
重啓服務
    [root@node6 /etc/vsftpd]#systemctl restart vsftpd
而後在home下的ilinux目錄下查看裏面的文件,再經過客戶端查看裏面的是否和這裏的看到的是同樣的文件
    [root@node6 /var/ftp/upload]#ls /home/ilinux/
    issue
測試客戶端上:
    [root@node7 ~]#lftp -u ilinux 192.168.137.56
    Password: 
    lftp ilinux@192.168.137.56:~> ls       
    -rw-r--r--    1 1001     1001           23 Oct 22 13:19 issue
    lftp ilinux@192.168.137.56:~> 
    lftp ilinux@192.168.137.56:~> cd /etc/      

    一旦容許系統用戶登陸之後有個悲劇性的問題,它能夠隨意遊蕩在整個系統之上,不光是本身的家目錄,若是服務器上有敏感信息,這樣一來用戶登陸上去以後直接能夠下載形成信息泄露,建議最好用戶登陸上來以後只能呆在本身的家目錄裏面,別的目錄不讓它隨意切換

禁錮系統用戶在家目錄中示例:

要禁錮哪一個用戶確保這個用戶的家目錄沒有寫權限,要否則會報錯,不讓使用
不過禁錮用戶不經常使用
修改配置文件裏面的參數
    [root@node6 /etc/vsftpd]#vim vsftpd.conf 

    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list

新建一個用戶
    [root@node6 /etc/vsftpd]#useradd ik8s
    [root@node6 /etc/vsftpd]#echo 123456|passwd --stdin ik8s
    Changing password for user ik8s.
    passwd: all authentication tokens updated successfully.
把用戶家目錄的寫權限去掉
    [root@node6 /etc/vsftpd]#chmod -w /home/ik8s/
建立要禁錮的用戶列表
    [root@node6 /etc/vsftpd]#vim /etc/vsftpd/chroot_list
    ik8s
重啓服務
    [root@node6 /etc/vsftpd]#systemctl restart vsftpd

客戶端測試:
    [root@node7 ~]#lftp -u ilinux,123456 192.168.137.56
    lftp ilinux@192.168.137.56:~> cd /etc/                         
    lftp ilinux@192.168.137.56:/etc> exit
    [root@node7 ~]#lftp -u ik8s,123456 192.168.137.56
    lftp ik8s@192.168.137.56:~> cd /etc
    cd: Access failed: 550 Failed to change directory. (/etc)
    lftp ik8s@192.168.137.56:/> ls
    lftp ik8s@192.168.137.56:/>
白名單示例:
編輯配置文件:
    [root@node6 /etc/vsftpd]#vim vsftpd.conf 
        userlist_enable=YES
        userlist_deny=NO

修改user_list文件添加容許訪問的用戶
    [root@node6 /etc/vsftpd]#vim 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.
    ilinux
    ftp
重啓服務
    [root@node6 /etc/vsftpd]#systemctl restart vsftpd

客戶端測試:
用一個沒有添加到白名單裏面的用戶登陸
    [root@node7 ~]#lftp -u ik8s,123456 192.168.137.56
    lftp ik8s@192.168.137.56:~> ls         
    ls: Login failed: 530 Permission denied.
在白名單列表裏面的用戶登陸測試
    [root@node7 ~]#lftp -u ilinux,123456 192.168.137.56
    lftp ilinux@192.168.137.56:~> ls
    -rw-r--r--    1 1001     1001           23 Oct 22 13:19 issue
    lftp ilinux@192.168.137.56:~>

vsftpd虛擬用戶

虛擬用戶:
    全部虛擬用戶會統一映射爲一個指定的系統賬號:訪問共享位置,即爲此係統賬號的家目錄
    各虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定

虛擬用戶賬號的存儲方式:
    文件:
        編輯文本文件,此文件須要被編碼爲hash格式
        奇數行爲用戶名,偶數行爲密碼
        db_load -T -t hash -f vusers.txt vusers.db
    關係型數據庫中的表中:
        實時查詢數據庫完成用戶認證
    mysql庫:
        pam要依賴於pam-mysql
        /lib64/security/pam_mysql.so
        /usr/share/doc/pam_mysql-0.7/README

基於文件驗證的vsftp虛擬用戶示例

建立虛擬用戶列表:
    [root@node6 /etc/vsftpd]#vim vsguests.txt
    tom
    123456
    jerry
    123456
    trump
    123456
把用戶列表的文件轉換成vsftp的db格式
    [root@node6 /etc/vsftpd]#db_load -T -t hash -f vsguests.txt vsguests.db

建立目錄和映射虛擬用戶的用戶
    [root@node6 /var/ftp/upload]#useradd -d /data/ftproot vsguest
    [root@node6 /etc/vsftpd]#mkdir /data/ftproot/{upload,pub}

修改upload的所屬組
    [root@node6 /data/ftproot]#chown vsguest.vsguest upload/

建立Pam的認證配置文件
    [root@node6 /etc/pam.d]#vim vsftpd.virt
    auth required pam_userdb.so db=/etc/vsftpd/vsguests
    account required pam_userdb.so db=/etc/vsftpd/vsguests

修改vsftpd.conf配置文件
    [root@node6 /etc/vsftpd]#vim vsftpd.conf 
    guest_enable=YES
    guest_username=vsguest
    local_enable=YES
    write_enable=YES
    pam_service_name=vsftpd.virt  # 自定義的pam認證配置文件

    #把以前設置容許匿名用戶上傳、建立等權限給註釋掉
    #anon_mkdir_write_enable=YES  
    #anon_other_write_enable=YES
    #anon_upload_enable=YES

給每一個虛擬用戶建立獨立的配置文件
在主配置文件裏定義每一個虛擬用戶的存放路徑
    [root@node6 /etc/vsftpd]#vim vsftpd.conf 
        user_config_dir=/etc/vsftpd/vsguests
建立出相對應的目錄
    [root@node6 /etc/vsftpd]#mkdir /etc/vsftpd/vsguests
重啓服務
    [root@node6 /etc/vsftpd]#systemctl  restart vsftpd

在沒有給每一個虛擬用戶帳號給定權限前測試用戶可否能夠上傳
    [root@node7 ~]#lftp -u tom,123456 192.168.137.56
    lftp tom@192.168.137.56:~> ls
    drwxr-xr-x    2 0        0               6 Oct 23 02:12 pub
    drwxr-xr-x    2 1002     1002            6 Oct 23 02:12 upload
    -rw-------    1 0        0            5129 Oct 22 14:00 vsftpd.conf
    lftp tom@192.168.137.56:/> cd upload/
    lftp tom@192.168.137.56:/upload> lcd /etc/
    lcd ok, local cwd=/etc
    lftp tom@192.168.137.56:/upload> put issue
    put: Access failed: 550 Permission denied. (issue)
    lftp tom@192.168.137.56:/upload> 

配置每一個虛擬用戶的權限
    給tom用戶定義權限
    [root@node6 /etc/vsftpd/vsguests]#vim tom
    anon_upload_enable=YES
    給Jerry用戶定義權限
    [root@node6 /etc/vsftpd/vsguests]#vim jerry
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES

重啓服務:
    [root@node6 /etc/vsftpd/vsguests]#systemctl  restart vsftpd

客戶端測試
    一、先測試Jerry用戶
    [root@node7 ~]#lftp -u jerry,123456 192.168.137.56
    lftp jerry@192.168.137.56:/> lcd /etc/
    lcd ok, local cwd=/etc
    lftp jerry@192.168.137.56:/> cd upload/
    lftp jerry@192.168.137.56:/upload> put issue
    23 bytes transferred                                     
    lftp jerry@192.168.137.56:/upload> ls
    -rw-r--r--    1 1000     1002           23 Oct 23 02:33 issue
    lftp jerry@192.168.137.56:/upload> rm issue 
    rm ok, `issue' removed
    lftp jerry@192.168.137.56:/upload> ls
    lftp jerry@192.168.137.56:/upload> 
    二、測試Tom用戶
    [root@node7 ~]#lftp -u tom,123456 192.168.137.56     
    lftp tom@192.168.137.56:~> lcd /etc
    lcd ok, local cwd=/etc
    lftp tom@192.168.137.56:~> cd upload/
    lftp tom@192.168.137.56:/upload> ls
    lftp tom@192.168.137.56:/upload> put issue
    23 bytes transferred
    lftp tom@192.168.137.56:/upload> rm issue 
    rm: Access failed: 550 Permission denied. (issue)
    lftp tom@192.168.137.56:/upload> mkdir test
    mkdir: Access failed: 550 Permission denied. (test)
    lftp tom@192.168.137.56:/upload>

基於MYSQL驗證的vsftpd虛擬用戶

安裝數據庫軟件
    [root@node6 ~]#yum -y install mariadb-server
在mariadb配置文件裏面添加一條禁止反解域名的選項
    [root@node6 ~]#vim /etc/my.cnf
    [mysqld]
    skip_name_resolve=on

啓動數據庫服務
    [root@node6 ~]#systemctl start mariadb

編譯pam、mysql的模塊
    先安裝編譯環境
    [root@node6 ~]#yum -y groupinstall "Development tools"
    [root@node6 ~]#yum -y install mariadb-devel pam-devel

    [root@node6 ~]#tar xf pam_mysql-0.7RC1.tar.gz 
    [root@node6 ~]#cd pam_mysql-0.7RC1
    [root@node6 ~/pam_mysql-0.7RC1]#./configure \
    --with-pam-mods-dir=/lib64/security \
    --with-mysql=/usr --with-pam=/usr
    [root@node6 ~/pam_mysql-0.7RC1]#make -j 2 && make install

查看是否有mysql模塊
    [root@node6 ~/pam_mysql-0.7RC1]#ls /lib64/security/
    pam_access.so     pam_filter        pam_mail.so        pam_rootok.so          pam_timestamp.so
    pam_cap.so        pam_filter.so     pam_mkhomedir.so   pam_securetty.so       pam_tty_audit.so
    pam_chroot.so     pam_fprintd.so    pam_motd.so        pam_selinux_permit.so  pam_umask.so
    pam_console.so    pam_ftp.so        pam_mysql.la       pam_selinux.so         pam_unix_acct.so
    pam_cracklib.so   pam_group.so      pam_mysql.so 
建立基於mysql認證的pam配置文件
    [root@node6 ~vim /etc/pam.d/vsftpd.mysql
    auth required pam_mysql.so user=vsftp passwd=magedu host=localhost db=vsftpd table=users u
    sercolumn=name passwdcolumn=password crypt=2
    account required pam_mysql.so user=vsftp passwd=magedu host=localhost db=vsftpd table=user
    s usercolumn=name passwdcolumn=password crypt=2

在數據庫裏面建立庫和表而且受權
    MariaDB [(none)]> create database vsftpd;
    Query OK, 1 row affected (0.01 sec)
    MariaDB [(none)]> use vsftpd
    Database changed
    MariaDB [vsftpd]> create table users(name varchar(100) not null primary key, password char(48) not null);

    MariaDB [vsftpd]> grant all on vsftpd.* to 'vsftp'@'localhost' identified by 'magedu';
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [vsftpd]> grant all on vsftpd.* to 'vsftp'@'127.0.0.1' identified by 'magedu';    
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [vsftpd]> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

插入3個虛擬用戶信息
    MariaDB [vsftpd]> insert into users values('tom',password('123456')),('jerry',password(123456)),('turmp',password('123456'));
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0

修改vsftpd的主配置文件
把這項改了以前實驗是從文件中查找用戶,此次改爲從數據庫中找
    [root@node6 ~]#vim /etc/vsftpd/vsftpd.conf 
    pam_service_name=vsftpd.mysql
重啓服務
    [root@node6 ~]#systemctl restart vsftpd

客戶端測試:
    tom用戶
    [root@node7 ~]#lftp -u tom,123456 192.168.137.56
    lftp tom@192.168.137.56:/> cd upload/
    lftp tom@192.168.137.56:/upload> lcd /etc/
    lcd ok, local cwd=/etc
    lftp tom@192.168.137.56:/upload> put passwd
    1257 bytes transferred                             
    lftp tom@192.168.137.56:/upload> ls
    -rw-r--r--    1 1000     1002           23 Oct 23 02:34 issue
    -rw-r--r--    1 1000     1002         1257 Oct 23 03:15 passwd
    lftp tom@192.168.137.56:/upload> rm issue 
    rm: Access failed: 550 Permission denied. (issue)
    lftp tom@192.168.137.56:/upload> 

    jerry用戶
    [root@node7 ~]#lftp -u jerry,123456 192.168.137.56   
    lftp jerry@192.168.137.56:~> cd upload/                        
    lftp jerry@192.168.137.56:/upload> ls
    -rw-r--r--    1 1000     1002           23 Oct 23 02:34 issue
    -rw-r--r--    1 1000     1002         1257 Oct 23 03:15 passwd
    lftp jerry@192.168.137.56:/upload> rm issue 
    rm ok, 'issue' removed
    lftp jerry@192.168.137.56:/upload> rm passwd 
    rm ok, 'passwd' removed
    lftp jerry@192.168.137.56:/upload> ls
    lftp jerry@192.168.137.56:/upload>
相關文章
相關標籤/搜索