vsftpd基於pam_mysql的認證和hash編碼的方式配置虛擬用戶

基礎介紹什麼的就自行搜索了。下面直接從安裝配置開始。


環境:centos6

一、安裝

yum -y install vsftpd

安裝完成後可以直接啓動。service vsftpd start


新建一個用戶作爲虛擬用戶的宿主賬戶:

useradd vuser -s /sbin/nologin

passwd vuser


二、配置

使用pam_mysql或者db_load的認證方式:

a)使用db_load來設置虛擬用戶

    1、在/etc/vsftpd/下創建兩個目錄  

    mkdir /etc/vsftpd/vuser_dir		#後續存放虛擬用戶的配置文件
    mkdir /etc/vsftpd/vuser_db		#存放虛擬用戶的認證文件

    2、生成數據庫文件

    cd /etc/vsftpd/vuser_db/    
    vim login_vuser
    admin		#依次單行用戶名,密碼
    123456789
    test
    987654321
db_load -T -t hash -f /etc/vsftpd/vuser_db/login_vuser /etc/vsftpd/vuser_db/vuser.db	 #生成虛擬用戶的數據庫文件

    3、更改pam認證模塊

    cd /etc/pam.d/    
    vim vsftpd.vuser
    auth	required	/lib64/security/pam_userdb.so	db=/etc/vsftpd/vuser_db/vuser		#此處注意不要加.db後綴
    account    required        /lib64/security/pam_userdb.so   db=/etc/vsftpd/vuser_db/vuser

    4、更改vsftpd的配置文件

    vim /etc/vsftpd/vsftpd.conf    
    anonymous_enable=NO		#匿名用戶訪問控制
    local_enable=YES		#本地用戶訪問
    write_enable=YES		#用戶的寫權限
    local_umask=022
    ######################################################			
    dirmessage_enable=YES							
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    ######################################################			
    listen=YES
    user_config_dir=/etc/vsftpd/vuser_dir
    pam_service_name=/etc/pam.d/vsftpd.vuser
    userlist_enable=NO
    tcp_wrappers=YES
    chroot_list_enable=YES		#不允許用戶切換家目錄
    ###################################################### 			
    guest_enable=YES		#開啓匿名用戶
    guest_username=vuser
    ######################################################			
    chown_uploads=YES		#是否允許上傳的文件改變屬主
    chown_username=root		#改變爲哪個屬主
    ######################################################
    pasv_min_port=2222          #iptables放行ftp中的端口段
    pasv_max_port=2230
    其他未列出的配置選項都是註釋了的。具體的含義可以自行搜索
    如果需要也可以配置到虛擬用戶的配置文件中。

    5、爲虛擬用戶創建對應的配置文件

    cd /etc/vsftpd/vuser_dir/   #創建兩個虛擬用戶的配置文件test,admin
    vim test
    anon_upload_enable=YES
    anon_umask=022              #此處設置的是匿名用戶上傳文件的umask
    chown_upload_mode=0644      #此處設置的是長傳文件後更改的權限
    download_enable=YES
    anon_other_write_enable=NO
    anon_mkdir_write_enable=NO
    local_root=/some/to/path/
    ######################################################			
    vim admin
    anon_upload_enable=YES
    download_enable=YES
    anon_umask=022
    chown_upload_mode=0644
    anon_other_write_enable=YES
    anon_mkdir_write_enable=YES
    anon_world_readable_only=NO
    local_root=/some/to/path/

    6、重啓vsftpd測試登陸

    service vsftpd restart    
    		
    lftp -u username,password host    #測試
    
    # 這裏如果無法登陸,在配置文件的目錄位置創建一個chroot_list文件在測試。

b)使用pam_mysql來認證用戶

    1、創建目錄存儲虛擬用戶配置文件

    mkdir /etc/vsftpd/vuser_dir


    2、安裝mysql-server mysql-devel openssl-devel pam_mysql軟件 

    yum -y install mysql-server mysql-devel openssl-devel pam_mysql #epel源裏有pam_mysql模塊

    3、登陸mysql創建vsftpd庫文件等

    mysql -uroot -p password    
    create database vsftpd
    grant all on vsftpd.* to 'vsftpd'@'localhost' identified by 'vsftpd';
    grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftpd';
    			
    use vsftpd;
    CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`password` char(48) NOT NULL,PRIMARY KEY (`id`));
    INSERT INTO users (name,password) VALUES ('username','password'),('username','password');
    flush privileges;
    			
    mysql -uUSERNAME -pPASSWORD 			#測試上述創建的用戶是否有效

    4、創建mysql的pam認證文件

    vim vsftpd.mysql    
    auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password cypt=0
    account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password cypt=0

    5、修改vsftpd配置文件

    vim /etc/vsftpd/vsftpd.conf    
    anonymous_enable=YES		#開啓匿名用戶訪問
    local_enable=YES		#本地用戶訪問
    write_enable=YES		#用戶的寫權限
    local_umask=022
    ######################################################			
    dirmessage_enable=YES							
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_std_format=YES
    ######################################################			
    listen=YES
    user_config_dir=/etc/vsftpd/vuser_dir
    pam_service_name=/etc/pam.d/vsftpd.mysql      #這裏與上面的hash認證是有區別的
    userlist_enable=NO
    tcp_wrappers=YES
    chroot_list_enable=YES		#不允許用戶切換家目錄
    ###################################################### 			
    guest_enable=YES		#開啓匿名用戶
    guest_username=vuser
    ######################################################			
    chown_uploads=YES		#是否允許上傳的文件改變屬主
    chown_username=root		#改變爲哪個屬主	

    6、爲虛擬用戶創建對應的文件

    cd /etc/vsftpd/vuser_dir/   #創建兩個虛擬用戶的配置文件
    vim test
    anon_upload_enable=YES
    download_enable=YES
    anon_umask=022
    chown_upload_mode=0644
    anon_other_write_enable=NO
    anon_mkdir_write_enable=NO
    local_root=/some/to/path/
    ######################################################			
    vim admin
    anon_upload_enable=YES
    download_enable=YES
    anon_umask=022
    chown_upload_mode=0644
    anon_other_write_enable=YES
    anon_mkdir_write_enable=YES
    anon_world_readable_only=NO
    local_root=/some/to/path/

    7、重啓vsftpd測試登陸

    service vsftpd restart    
    lftp -u username,password host        #測試


三、所有的針對於用戶權限的配置都可以在包含的虛擬用戶配置文件的路徑下進行單獨的配置選項。

如果其中配置好登陸不上,可以查看安全認證日誌。



四、作爲補充說明

在線上的Linux搭建的vsftpd,死活連不上。測試是防火牆的問題。

防火牆是使用默認的安全策略;其中有一條是:

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited # 拒絕上述不符的數據包

查看客戶端默認使用的是被動連接;於是就放行被動模式指定一段端口分配給ftp做隨機端口:

就需要在vsftpd.conf中多添加一段端口用於連接的端口:

pasv_min_port=2222          #iptables放行ftp中的端口段
pasv_max_port=2230

然後在iptables中放行即可。


五、FTP更精細的權限控制

使用cmds_allowed來控制更精細一點的權限。其實也沒有多大用處。

# ABOR - abort a file transfer                       取消文件傳輸
# CWD - change working directory                     更改目錄
# DELE - delete a remote file                        刪除文件
# LIST - list remote files                           列出目錄
# MDTM - return the modification time of a file      返回文件的更新時間
# MKD - make a remote directory                      新建文件夾
# NLST - name list of remote directory
# PASS - send password
# PASV - enter passive mode
# PORT - open a data port                            打開一個傳輸端口
# PWD - print working directory                      顯示當前工作目錄
# QUIT - terminate the connection                    退出
# RETR - retrieve a remote file                      下載文件
# RMD - remove a remote directory
# RNFR - rename from
# RNTO - rename to
# SITE - site-specific commands
# SIZE - return the size of a file                    返回文件大小
# STOR - store a file on the remote host              上傳文件
# TYPE - set transfer type
# USER - send username

# less common commands:

# ACCT* - send account information
# APPE - append to a remote file
# CDUP - CWD to the parent of the current directory
# HELP - return help on using the server
# MODE - set transfer mode
# NOOP - do nothing
# REIN* - reinitialize the connection
# STAT - return server status
# STOU - store a file uniquely
# STRU - set file transfer structure
# SYST - return system type

以上是cmds的全部命令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章