vsftpd基于pam_mysql的认证和hash编码的方式配置虚拟用户

基础介绍什么的就自行搜索了。下面直接从安装配置开始。python


环境:centos6mysql

1、安装sql

yum -y install vsftpd

安装完成后能够直接启动。service vsftpd start数据库


新建一个用户做为虚拟用户的宿主帐户:vim

useradd vuser -s /sbin/nologincentos

passwd vuser安全


2、配置app

使用pam_mysql或者db_load的认证方式:less

a)使用db_load来设置虚拟用户tcp

    一、在/etc/vsftpd/下建立两个目录  

    mkdir /etc/vsftpd/vuser_dir		#后续存放虚拟用户的配置文件
    mkdir /etc/vsftpd/vuser_db		#存放虚拟用户的认证文件

    二、生成数据库文件

    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	 #生成虚拟用户的数据库文件

    三、更改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

    四、更改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
    其余未列出的配置选项都是注释了的。具体的含义能够自行搜索
    若是须要也能够配置到虚拟用户的配置文件中。

    五、为虚拟用户建立对应的配置文件

    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/

    六、重启vsftpd测试登录

    service vsftpd restart    
    		
    lftp -u username,password host    #测试
    
    # 这里若是没法登录,在配置文件的目录位置建立一个chroot_list文件在测试。

b)使用pam_mysql来认证用户

    一、建立目录存储虚拟用户配置文件

    mkdir /etc/vsftpd/vuser_dir


    二、安装mysql-server mysql-devel openssl-devel pam_mysql软件 

    yum -y install mysql-server mysql-devel openssl-devel pam_mysql #epel源里有pam_mysql模块

    三、登录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 			#测试上述建立的用户是否有效

    四、建立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

    五、修改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		#改变为哪一个属主	

    六、为虚拟用户建立对应的文件

    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/

    七、重启vsftpd测试登录

    service vsftpd restart    
    lftp -u username,password host        #测试


3、全部的针对于用户权限的配置均可以在包含的虚拟用户配置文件的路径下进行单独的配置选项。

若是其中配置好登录不上,能够查看安全认证日志。



4、做为补充说明

在线上的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中放行便可。


5、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的所有命令。

相关文章
相关标签/搜索