FTP服務相關實現

FTP服務的相關實現

vsftpd介紹

1》vsftpd全名爲very secure FTP daemon,爲很是安全的FTP服務,是針對操做系統的權限來設計的,這個權限是發起者發起該服務進程的權限,一般vsftpd服務的啓動權限很是低。
    2》vsftpd可使用chroot函數來將特定的目錄變成vsftpd活動的根目錄。
    3》vsftpd服務器是由vsftpd程序包提供,再也不由xinetd管理。

vsftpd服務包和配置文件

1》rpm -ql vsftpd
        /etc/logrotate.d/vsftpd
        /etc/pam.d/vsftpd
        /etc/vsftpd
        /etc/vsftpd/ftpusers
        /etc/vsftpd/user_list
        /etc/vsftpd/vsftpd.conf
        /etc/vsftpd/vsftpd_conf_migrate.sh
        /usr/lib/systemd/system-generators/vsftpd-generator
        /usr/lib/systemd/system/vsftpd.service
        /usr/lib/systemd/system/vsftpd.target
        /usr/lib/systemd/system/vsftpd@.service
        /usr/sbin/vsftpd
        /usr/share/doc/vsftpd-3.0.2/
        /usr/share/man/man5/vsftpd.conf.5.gz
        /usr/share/man/man8/vsftpd.8.gz
        /var/ftp
        /var/ftp/pub
    2》用戶認證配置文件:
        /etc/pam.d/vsftpd
    3》服務腳本: 
        /usr/lib/systemd/system/vsftpd.service
        /etc/rc.d/init.d/vsftpd
    4》配置文件:
        /etc/vsftpd/vsftpd.conf
            man 5 vsftpd.conf
            格式:option=value
            注意:= 先後不要有空格
    5》匿名用戶(映射爲系統用戶ftp)共享文件位置:
        /var/ftp
    6》系統用戶共享文件位置:
        用戶本身的家目錄,家目錄不容許有寫權限
    7》虛擬用戶經過ftp訪問共享文件位置:
        給虛擬用戶指定的映射成爲系統用戶的家目錄

vsftpd服務的配置

/etc/vsftpd/vsftpd.conf
    1》命令端口
        listen=YES ##表示vsftpd以standalone(單機模式)啓動
        listen_port=21
    2》主動模式端口
        connect_from_port_20=YES    主動模式端口爲20
        ftp_data_port=20    指定主動模式的端口
    3》被動模式端口範圍
        linux   客戶端默認使用被動模式
        windows     客戶端默認使用主動模式
        pasv_min_port=6000  若設置0爲隨機分配
        pasv_max_port=6010  
    4》使用當地時間
        use_localtime=YES   使用當地時間(默認爲NO,使用GMT) 
    
    5》匿名用戶
        anonymous_enable=YES    支持匿名用戶
        no_anon_password=YES    ( 默認NO)匿名用戶略過口令 檢查
        anon_world_readable_only    ( 默認YES) 只能下載所有讀的文件
        anon_upload_enable=YES      匿名上傳,注意: 文件系統權限
        anon_mkdir_write_enable=YES 匿名用戶是否能夠建立目錄
        anon_other_write_enable=YES     可刪除和修改上傳的文件
        anon_umask=077      指定匿名上傳umask
        chown_uploads=YES   (默認NO)上傳是否開啓
        chown_username=wang 指定上傳文件的默認的全部者
        chown_upload_mode=0644  指定上傳文件的默認的權限
    6》Linux 系統用戶
        guest_enable=YES    全部系統用戶都映射成guest 用戶
        guest_username=ftp      配合上面選項才生效,指定guest 用戶
        local_enable=YES    是否容許linux 用戶登陸
        write_enable-YES    容許linux 用戶上傳文件
        local_umask=022     指定系統用戶上傳文件的默認權限
        local_root=/ftproot     非匿名用戶登陸所在目錄
    7》禁錮全部系統用戶在家目錄中
        chroot_local_user=YES (默認NO,不由錮)禁錮系統用戶
    8》禁錮或不由錮特定的系統用戶在家目錄中,與上面設置功能相反
        chroot_list_enable=YES
        chroot_list_file=/etc/vsftpd/chroot_list
        當chroot_local_user=YES 時,則chroot_list中用戶不由錮
        當chroot_local_user=NO 時,則chroot_list中用戶禁錮
    9》wu-ftp 日誌:默認啓用
        xferlog_enable=YES      (默認)啓用記錄上傳下載日誌
        xferlog_std_format=YES      (默認)使用wu-ftp日誌格式
        xferlog_file=/var/log/xferlog   (默認)可自動生成
        dual_log_enable=YES,vsftpd_log_file=/var/log/vsftpd.log 使用vsftpd本身的日誌文件
    10》vsftpd 日誌:默認不啓用
        dual_log_enable=YES  使用vsftpd   日誌格式,默認不啓用
        vsftpd_log_file=/var/log/vsftpd.log ( 默認 )可自動生成
    11》登陸提示信息
        ftpd_banner=「welcome to mage ftp server"
        banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效
    12》目錄訪問提示信息
        dirmessage_enable=YES   (默認)
        message_file=.message   (默認) 信息存放在指定目錄下.message
    13》使用pam(Pluggable Authentication Modules)完成用戶認證
        pam_service_name=vsftpd
        pam 配置文件:
            /etc/pam.d/vsftpd
            /etc/vsftpd/ftpusers  默認文件中用戶拒絕登陸
    14》是否啓用控制用戶登陸的列表文件
        userlist_enable=YES     默認有此設置
        userlist_deny=YES   (默認值)黑名單,不提示口令,NO爲白名單
        userlist_file=/etc/vsftpd/users_list    此爲默認值
    15》鏈接限制
        max_clients=0   最大併發鏈接數
        max_per_ip=0    每一個IP同時發起的最大鏈接數
    16》vsftpd 服務指定用戶身份運行
        nopriv_user=nobody
    17》傳輸速率:字節/秒 
        anon_max_rate=0     匿名用戶的最大傳輸速率
        local_max_rate=0  本 地用戶的最大傳輸速率
    18》鏈接時間:秒爲單位
        connect_timeout=60      主動模式數據鏈接超時時長
        accept_timeout=60   被動模式數據鏈接超時時長
        data_connection_timeout=300     數據鏈接無數據輸超時時長
        idle_session_timeout=60     無命令操做超時時長
    19》優先以文本方式傳輸
        ascii_upload_enable=YES
        ascii_download_enable=YES
    20》配置FTP 服務以非獨立服務方運行:listen=NO ,默認爲獨立方式
        vim /etc/xinetd.d/vsftpd
            service ftp
            {
                flags = REUSE
                socket_type = stream
                wait = no
                user = root
                server = /usr/sbin/vsftpd
                log_on_failure += USERID
                disable = no
            }

實現基於ssl的FTPS

1》查看是否支持SSL
        ldd `which vsftpd`  查看到libssl.so
    2》建立自簽名證書
        cd /etc/pki/tls/certs/
        make vsftpd.pem
        openssl x509 -in vsftpd.pem -noout –text
    3》配置vsftpd 服務支持SSL :
        vim /etc/vsftpd/vsftpd.conf
            ssl_enable=YES  啓用SSL
            allow_anon_ssl=NO   匿名不支持SSL
            force_local_logins_ssl=YES      本地用戶登陸加密
            force_local_data_ssl=YES    本地用戶數據傳輸加密
                        force_anon_logins_ssl=YES   
                        force_anon_data_ssl=YES     匿名用戶的可用在虛擬用戶上
            rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem 
        還能夠根據本身的需求來修改或添加對應的參數信息,需注意的是,在修改配置文件後是須要重啓vsftpd服務才能生效的。
    4》用filezilla等工具測試
                ftpes:

基於虛擬用戶的vsftpd

1》虛擬用戶就是系統當中不存在的實體用戶,它只能訪問服務器爲其提供的ftp服務,但不能訪問其餘的額外資源信息。
    2》咱們能夠經過使用虛擬用戶來提升系統的安全性。例如,可讓一些用戶對ftp服務中的內容具備寫權限,但又不容許訪問系統其餘資源。
    3》各虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定。
    4》全部虛擬用戶會統一映射爲一個指定的系統帳號,來訪問共享位置。
    5》虛擬用戶賬號的存儲方式:
        文件:編輯文本文件,此文件須要被編碼爲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
    6》虛擬用戶的認證方式是單獨的口令庫文件(pam_userdb),有可插入式認證模塊來完成認證,使用這種方式配置更加靈活也更加的安全。
    7》實現基於文件驗證的vsftpd虛擬用戶
        1)建立虛擬用戶的帳號密碼的數據庫文件
            a。咱們經過建立一個文本文件來記錄虛擬用戶的帳號密碼信息,格式爲:奇數行爲帳號,對應的偶數行爲對應的密碼。
                vim /etc/vsftpd/vusers.txt
                    shen1
                    123456
                    shen2
                    213546
                    shen3
                    546213
            b。將該文本文件轉換成二進制的數據庫文件,這裏須要藉助db4工具來實現。
                yum install db4-utils -y
                cd /etc/vsftpd/
                db_load -T -t hash -f vusers.txt vusers.db
                chmod 600 vusers.db(保證密碼文件的安全)
        2)建立FTP根目錄和虛擬用戶映射的系統用戶
            mkdir /var/ftproot(爲ftp的根目錄)
            useradd -d /var/ftproot -s /sbin/nologin vuser(將虛擬用戶映射爲vuser)
            chmod  +rx  /var/ftproot/
            centos7  還須要執行如下操做:
                chmod -w /var/ftproot/
                mkdir /var/ftproot/upload
                setfacl -m u:vuser:rwx /var/ftproot/upload
        3)建立支持虛擬用戶的PAM認證配置文件
            vim /etc/pam.d/vsftpd.db
                #%PAM-1.0
                                # 32-bit
                                #auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login
                                #account required /lib/security/pam_userdb.so db=/etc/vsftpd/login
                                # 64-bit
                                auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login
                                account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login建立配置文件存放的路徑
            vim /etc/vsftpd/vsftpd.conf
                virtual_use_local_privs=YES  開啓虛擬用戶
                user_config_dir=/etc/vsftpd/vusers.d/  虛擬用戶的配置文件的目錄
            cd /etc/vsftpd/vusers.d/  進入此目錄
                容許wang用戶可讀寫,其它用戶只讀
                vim wang  建立各用戶自已的配置文件
                    anon_upload_enable=YES
                    anon_mkdir_write_enable=YES
                    anon_other_write_enable=YES
                            ......
        7)重啓vsftpd服務器
            systemctl vsftpd restart
        8)使用虛擬用戶進行測試驗證

實現基於MYSQL 驗證的vsftpd

說明:本實驗在兩臺CentOS 主機上實現,一臺作爲FTP 服務器,一臺作數據庫服務器
    1、安裝所須要包和包組:
        在數據庫服務器上安裝包:
            Centos7 :在數據庫服務器 上 安裝
                yum –y install mariadb-server mariadb
                systemctl start mariadb.service
                systemctl enable mariadb
            Centos6 :在數據庫服務器上安裝
                yum –y install mysql-server
        在FTP 服務器上安裝vsftpd 和pam_mysql包
            centos6:
                pam_mysql由epel6 的源中提供
                yum install vsftpd pam_mysql
            centos7:
                無對應rpm 包,需手動 編譯 安裝
                yum -y groupinstall "Development Tools"
                yum -y install mariadb-devel pam-devel vsftpd
                下載pam_mysql-0.7RC1.tar.gz
                ftp://172.16.0.1/pub/Sources/sources/pam/
                tar xvf pam_mysql-0.7RC1.tar.gz
                cd pam_mysql-0.7RC1/
                ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
                make
                make install
    2、在數據庫服務器上建立虛擬用戶帳號
        1. 創建存儲虛擬用戶數據庫和鏈接的數據庫用戶
                mysql> CREATE DATABASE vsftpd;
                mysql> SHOW DATABASES;
            ftp 服務和mysql 不在同一主機:
                mysql> GRANT SELECT ON vsftpd.* TO
                vsftpd@'172.16.%.%' IDENTIFIED BY 'magedu';
            ftp 服務和mysql 在同一主機:
                mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'magedu';
                mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';
                mysql> FLUSH PRIVILEGES;
        2. 準備相關表
            mysql> USE vsftpd;
            Mysql> SHOW TABLES;
            mysql> CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);
            mysql>DESC users;
            測試鏈接
                mysql -uvsftpd -h 172.16.200.200 -pmagedu
                mysql> SHOW DATABASES;
        3. 添加虛擬用戶
        根據須要添加所須要的用戶,爲了安全應該使用PASSWORD函數加密其密碼後存儲
            mysql>DESC users;
            mysql> INSERT INTO users(name,password) values(‘wang',password('magedu'));
            mysql> INSERT INTO users(name,password) values(‘mage',password('magedu'));
            mysql> SELECT * FROM users;
    3、在FTP 服務器上配置vsftpd 服務
        1. 在FTP 服務器上創建pam 認證所需文件
            vi /etc/pam.d/vsftpd.mysql  添加以下兩行
                auth required pam_mysql.so user=vsftpd
                passwd=magedu host=mysqlserver db=vsftpd table=users
                usercolumn=name passwdcolumn=password crypt=2
                account required pam_mysql.so user=vsftpd
                passwd=magedu host=mysqlserver db=vsftpd table=users
                usercolumn=name passwdcolumn=password crypt=2
            注意:參考README 文檔,選擇正確的加密方式,crypt 是加密方式,0 表示不加密,1 表示crypt(3) 加密,2 表示使用mysql password() 函數加密,3 表示md5 加密,4 表示sha1
            配置字段說明
                auth  表示認證
                account  驗證帳號密碼正常使用
                required  表示認證要經過
                pam_mysql.so 模塊是默認的相對路徑,是相對/lib64/security/路徑而言,也能夠寫絕對路徑;後面爲給此模塊傳遞的參數
                user=vsftpd 爲登陸mysql 的用戶
                passwd=magedu  登陸mysql 的的密碼
                host=mysqlserver mysql 服務器的主機名或ip 地址
                db=vsftpd 指定鏈接msyql 的數據庫名稱
                table=users  指定鏈接數據庫中的表名
                usercolumn=name  當作用戶名的字段
                passwdcolumn=password  當作用戶名字段的密碼
                crypt=2  密碼的加密方式爲mysql password() 函數加密
        2. 創建相應用戶和修改vsftpd 配置文件,使其適應mysql認證,創建虛擬用戶映射的系統用戶及對應的目錄
            useradd -s /sbin/nologin -d /var/ftproot vuser
            chmod 555 /var/ftproot centos7  需除去ftp 根目錄的寫權限
            mkdir /var/ftproot/{upload,pub}
            setfacl –m u:vuser:rwx /var/ftproot/upload
            確保/etc/vsftpd.conf 中已經啓用瞭如下選項
                anonymous_enable=YES
            添加下面兩項
                guest_enable=YES
                guest_username=vuser
            修改下面一項,原系統用戶沒法登陸
                pam_service_name=vsftpd.mysql
    4、啓動vsftpd 服務
        service vsftpd start;systemctl start vsftpd
        chkconfig vsftpd on;systemctl enable vsftpd
        查看端口開啓狀況
            netstat -tnlp |grep :21

    5、Selinux 相關設置:在FTP 服務器上執行
        restorecon -R /lib64/security
        setsebool -P ftpd_connect_db 1
        setsebool -P ftp_home_dir 1
        chcon -R -t public_content_rw_t /var/ftproot/

    六 、測試:利用FTP 客戶端工具,以 以 虛擬用戶登陸驗證結果
        tail /var/log/secure

    7、在FTP 服務器上配置虛擬用戶具備不一樣的訪問權限vsftpd 能夠在配置文件目錄中爲每一個用戶提供單獨的配置文件以定義其ftp 服務訪問權限,每一個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄能夠是任意未使用目錄,只須要在vsftpd.conf 指定其路徑及名稱便可
        1 、配置vsftpd 爲虛擬用戶使用配置文件目錄
            vim /etc/vsftpd/vsftpd.conf
            添加以下選項
                user_config_dir=/etc/vsftpd/vusers_config

        2 、建立所須要目錄,併爲虛擬用戶提供配置文件
            mkdir /etc/vsftpd/vusers_config/
            cd /etc/vsftpd/vusers_config/
            touch wang mage
         3 、配置虛擬用戶的訪問權限
            虛擬用戶對vsftpd 服務的訪問權限是經過匿名用戶的相關指令進行的。若是須要讓用戶wang 具備上傳文件的權限,能夠修改/etc/vsftpd/vusers_config/wang 文件,在裏面添加以下選項並設置爲YES 便可, 只讀則設爲NO
            注意:需確保 對應的映射用戶對於文件系統有寫 權限
                anon_upload_enable={YES|NO}
                anon_mkdir_write_enable={YES|NO}
                anon_other_write_enable={YES|NO}
相關文章
相關標籤/搜索