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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

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


环境:centos6

一、安装

1
yum  - y install vsftpd

安装完成后可以直接启动。service vsftpd start


新建一个用户作为虚拟用户的宿主账户:

useradd vuser -s /sbin/nologin

passwd vuser


二、配置

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

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

    1、在/etc/vsftpd/下创建两个目录  

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

    2、生成数据库文件

1
2
3
4
5
6
     cd  / etc / vsftpd / vuser_db /    
     vim login_vuser
     admin        #依次单行用户名,密码
     123456789
     test
     987654321
1
db_load  - - hash  - / etc / vsftpd / vuser_db / login_vuser  / etc / vsftpd / vuser_db / vuser.db    #生成虚拟用户的数据库文件

    3、更改pam认证模块

1
2
3
4
     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的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
     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、为虚拟用户创建对应的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     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测试登陆

1
2
3
4
5
     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软件 

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

    3、登陆mysql创建vsftpd库文件等

1
2
3
4
5
6
7
8
9
10
11
     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认证文件

1
2
3
     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配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
     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、为虚拟用户创建对应的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
     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测试登陆

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


三、所有的针对于用户权限的配置都可以在包含的虚拟用户配置文件的路径下进行单独的配置选项。

如果其中配置好登陆不上,可以查看安全认证日志。



四、作为补充说明

在线上的Linux搭建的vsftpd,死活连不上。测试是防火墙的问题。

防火墙是使用默认的安全策略;其中有一条是:

1
- A RH - Firewall - 1 - INPUT  - j REJECT  - - reject - with icmp - host - prohibited  # 拒绝上述不符的数据包

查看客户端默认使用的是被动连接;于是就放行被动模式指定一段端口分配给ftp做随机端口:

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

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

然后在iptables中放行即可。


五、FTP更精细的权限控制

使用cmds_allowed来控制更精细一点的权限。其实也没有多大用处。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 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的全部命令。


本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1566803,如需转载请自行联系原作者

相关文章
|
9月前
|
Linux 网络安全 数据安全/隐私保护
Linux vsFTPd服务详解——文件加密传输配置
Linux vsFTPd服务详解——文件加密传输配置
258 2
|
9月前
|
关系型数据库 MySQL 索引
【MySQL 解析】Hash索引和B+树索引对比分析
【1月更文挑战第11天】【MySQL 解析】Hash索引和B+树索引对比分析
|
9月前
|
存储 关系型数据库 MySQL
MySQL库的操作『增删改查 ‖ 编码问题 ‖ 备份与恢复』
MySQL库的操作『增删改查 ‖ 编码问题 ‖ 备份与恢复』
101 0
|
9月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
安全 Linux 应用服务中间件
[笔记]CentOS7 vsftpd安装及配置使用
[笔记]CentOS7 vsftpd安装及配置使用
657 0
|
2月前
|
安全 关系型数据库 MySQL
MySQL的插件式认证到底是干什么的?
MySQL 的插件式认证允许使用不同的方法验证用户身份,如指纹、面部识别等,而不仅仅是用户名和密码。它增强了安全性,支持与现有系统(如 LDAP)集成,并简化了用户管理。通过认证插件,MySQL 能更灵活地验证用户,提高数据库的安全性和管理效率。
106 8
|
7月前
|
关系型数据库 MySQL 数据安全/隐私保护
windows mysql8 安装后 提示密码不对,修改下密码认证方式就可以了
windows mysql8 安装后 提示密码不对,修改下密码认证方式就可以了
1342 3
|
3月前
|
SQL 关系型数据库 MySQL
|
4月前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
4月前
|
算法 量子技术