2016年6月21日 星期二

在 CentOS7/RHEL7 上架設 Vsftpd Server(二)

安裝前注意事項:
  • 基本 MariaDB 安裝與設定,請參考這一篇文章!

設定目標:
  • 利用 MariaDB 來管理 Vsftpd 的使用者!

快速安裝流程:
  1. 安裝 EPEL 套件:
    #rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    
  2. 安裝 vsftpd 相關套件:
    #yum install -y vsftpd-*
    
  3. 在 mariadb 裡,建立給 vsftpd 專用的資料庫與資料表:
    #mysql -u root -p
    MariaDB [(none)]> CREATE DATABASE vsftpd;
    MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'a123456';
    MariaDB [(none)]> FLUSH PRIVILEGES;
    MariaDB [(none)]> USE vsftpd;
    MariaDB [vsftpd]> CREATE TABLE `accounts` )
        -> `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        -> `username` VARCHAR(100) NOT NULL,
        -> `pass` VARCHAR(200) NOT NULL,
        -> UNIQUE (`username`)
        -> )ENGINE=InnoDB, CHARSET=utf8;
    MariaDB [vsftpd]> quit;
    
  4. 新增一個實機使用者,用來配合 vsftpd 運作:
    #groupadd nogroup
    #useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
    
  5. 編輯 vsftpd 設定檔:
    #vim /etc/vsftpd/vsftpd.conf
    (修改或是新增下列設定參數:)
    anonymous_enable=NO
    nopriv_user=vsftpd
    chroot_local_user=YES
    secure_chroot_dir=/var/run/vsftpd
    rsa_cert_file=/etc/ssl/certs/vsftpd.pem
    guest_enable=YES
    guest_username=vsftpd
    local_root=/home/vsftpd/$USER
    user_sub_token=$USER
    virtual_use_local_privs=YES
    user_config_dir=/etc/vsftpd/vsftpd_user_conf
    
  6. 建立各別使用者的設定檔目錄:
    #mkdir /etc/vsftpd/vsftpd_user_conf
    #mkdir /var/run/vsftpd
    
  7. 設定 vsftpd 的 PAM 模組,使 vsftpd 在建立連線時,讀取資料庫內容:
    #cd /etc/pam.d
    #cp vsftpd /root/vsftpd.pam
    #cat /dev/null > vsftpd
    #vim vsftp
    (輸入下列兩行內容)
    auth required pam_mysql.so user=vsftpd passwd=a123456 host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
    account required pam_mysql.so user=vsftpd passwd=a123456 host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
    
  8. 開啟防火牆:
    #firewall-cmd --permanent --add-service=ftp
    #firewall-cmd --reload
    
  9. 設定 SELinux:
    #setsebool -P ftp_home_dir on
    #setsebool -P ftpd_connect_db on
    #setsebool -P ftpd_full_access on
    #setsebool -P ftpd_use_passive_mode on
    
  10. 啟動 vsftpd 服務:
    #systemctl enable vsftpd.service
    #systemctl start vsftpd.service
    
  11. 使用 TLS 通訊用的密鑰對:
    #mkdir -p /etc/ssl/private
    #chmod 700 /etc/ssl/private
    #openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
    
  12. 重新編寫 vsftpd 設定檔:
    #vim /etc/vsftpd/vsftpd.conf
    (增加下列設定:)
    ssl_enable=YES
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1=YES
    ssl_sslv2=NO
    ssl_sslv3=NO
    require_ssl_reuse=NO
    ssl_ciphers=HIGH
    rsa_cert_file=/etc/ssl/private/vsftpd.pem
    
  13. 重新啟動 vsftpd 服務:
    #systemctl restart vsftpd.service
    
  14. 建立 vsftpd 虚擬使用者:
    #mysql -u vsftpd -p
    MariaDB [(none)]> use vsftpd;
    MariaDB [vsftpd]> INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
    MariaDB [vsftpd]> quit;
    
  15. 建立虚擬使用者家目錄:
    #mkdir /home/vsftpd/testuser
    #chown vsftpd:nogroup /home/vsftpd/testuser
    #chmod a-w /home/vsftpd/testuser
    #restorecon -R /home
    
缺 pam_mysql.so 模組:
  1. 利用 git 下載 pam_mysql 模組:
    #mkdir /root/pam_mysql
    #cd /root/pam_mysql
    #git clone https://github.com/NigelCunningham/pam-MySQL
    
  2. 編譯 pam_mysql 模組:
    #cd pam-MySQL/
    #yum install make gcc-c++ autoconf automake libtool rpm-build pam-devel mariadb-devel
    #./configure --with-pam-mods-dir=/usr/lib64/security --with-mysql=/bin/mysql --with-pam=/lib64/security
    
參考文獻:
  1. https://www.howtoforge.com/tutorial/virtual-hosting-with-vsftpd-and-mysql-on-ubuntu-15.10/
  2. https://wiki.centos.org/zh-tw/HowTos/VirtualVsFtpd
  3. https://access.redhat.com/solutions/3436