当前位置:网站首页>金仓数据库KingbaseES安全指南--6.4. RADIUS身份验证
金仓数据库KingbaseES安全指南--6.4. RADIUS身份验证
2022-08-01 16:29:00 【沉舟侧畔千帆过_】
6.4.1. 关于RADIUS身份验证
这种认证方法的操作类似于password
,不过它使用 RADIUS 作为密码验证方式。RADIUS 只被用于验证用户名/密码。因此,在 RADIUS 能被用于认证之前,用户必须已经存在于数据库中。其中,Freeradius是RADIUS(Remote Authentication Dial-In User Service)协议服务器的开源版本,可用来提供RADIUS协议的AAA(认证、授权、记账)服务。
6.4.2. RADIUS身份验证原理
RADIUS服务器和KingbaseES服务器通过网络连接。当数据库应用(ksql、jdbc等)访问数据库执行登录操作时,KingbaseES根据应用提供的登录信息向FreeRADIUS服务器发起认证请求。RADIUS依据提供的登录信息产生认证响应,KingbaseES根据认证响应决定是否允许登录到数据库。
当使用 RADIUS 认证时,一个访问请求消息将被发送到配置好的 RADIUS 服务器。这一请求将是Authenticate Only
类型,并且包含参数user name
、password
(加密的)和NAS Identifier
。该请求将使用一个与服务器共享的密钥加密。RADIUS 服务器将对这个服务器响应Access Accept
或者Access Reject
。不支持RADIUS accounting。
可以指定多个RADIUS服务器,这种情况下将会依次验证。如果从一台服务器接收到否定响应,则认证失败。如果没有接收到响应,则将会尝试列表中的下一台服务器。要指定多台服务器,可将服务器名放在引号内并且用逗号分隔开。如果指定了多台服务器,所有其他RADIUS选项也可以以逗号分隔的列表给出,用来为每台服务器应用个别的值。也可以把选项指定为一个单一值,这样该值将被应用到所有的服务器。
6.4.3. 配置RADIUS身份验证
6.4.3.1. 安装
KingbaseES数据库安装
无特殊要求,常用方式安装即可。安装完后initdb初始化数据目录。
FreeRADIUS安装
本文示例使用FreeRADIUS配置RADIUS身份验证,安装步骤如下:
下载freeradius-server-release_3_0_21.tar.gz源代码包。
解压源代码包:tar xvf freeradius-server-release_3_0_21.tar.gz
进入源代码目录执行:
$ ./configure $ make $ make install
FreeRADIUS 编译依赖额外的软件包,如系统缺失configure过程会报错,安装缺失软件包即可。如无指定安装后默认配置文件路径为:/usr/local/etc/raddb 服务器程序名为radiusd。
6.4.3.2. 配置
KingbaseES配置
使用RADIUS认证时,对数据库对象的权限管理部分还是要依赖数据库本身的管理方式。数据库和用户以及对象的访问权限请事先在数据库内创建好。跟RADIUS相关的配置只需要编辑数据目录的sys_hba.conf 文件即可。
下列被支持的配置选项用于 RADIUS:
radiusservers
连接到 RADIUS 服务器的名称或IP地址。此参数是必需的。
radiussecrets
和 RADIUS 服务器秘密交谈时会用到共享密钥。这在 KingbaseES 和 RADIUS 服务器之间必须有完全相同的值。推荐使用至少 16 个字符的字符串。这个参数是必需的。
注意
如果KingbaseES编译为支持OpenSSL,所用的加密向量将只是强密码。在其他情况下,到 RADIUS 服务器的传输应该被视为应该被视为被混淆的、不安全的。如有必要,应采用外部安全措施。
radiusports
用于连接到 RADIUS 服务器的端口号。如果没有指定端口,则使用默认端口1812
。
radiusidentifiers
在 RADIUS 请求中字符串被用作NAS Identifier
。 这个参数可以被用作第二个参数标识。例如该用户试图以哪个数据库用户进行认证,它可以被用于 RADIUS 服务器上的策略匹配。如果没有指定标识符,默认使用kingbase
。
如果需要在RADIUS参数值中使用逗号或空格,可以通过在值周围加上要两层双引号。例如,将空格放入RADIUS机密字符串的示例如下:
host ... radius radiusservers="server1,server2" radiussecrets="""secret one"",""secret two"""
例如, 配置下列信息的hba文件
据库实例名字为:radius
用户名为:radius
radius用户对radius库有所有权限。
FreeRADIUS服务器ip地址为:127.0.0.1(本地,不在本地时请替换为远程服务器的IP地址)
FreeRADIUS服务器监听端口为:1812 (默认端口)
通讯密钥为: testing123 通讯密钥是为了保护数据库与FreeRADIUS服务器通讯而存在,是预共享密钥的方式。必须与FreeRADIUS服务器的配置是一致的,可以为不同的认证路径提供不同的密钥。
sys_hba.conf文件内容如下:
host radius all 0.0.0.0/0 radius radiusservers="127.0.0.1” radiusports="1812" radiussecrets="""testing123"""
相关sys_hba.conf文件各个参数字段意义如下表所示:
注意
为防止使用其他方式认证,hba文件中如配置有与radius认证冲突的其他项请删除。参数以逗号分割多个值的方式 。例如radiusservers="127.0.0.1,192.168.1.1”
FreeRADIUS服务配置
认证数据
radius服务器用来鉴别认证是否成功的数据。例如用户名和密码。 radius支持本地数据、LDAP、数据库等多种方式来获取鉴别数据,这是由内置的不同模块支持的。本文以本地数据为例来配置,本地数据保存在FreeRADIUS的配置文件中。 编辑配置文件目录的users文件(/usr/local/etc/raddb/users)增加用户及密码。
如下图所示:
# The canonical testing user which is in most of the # examples. # #bob Cleartext-Password := "hello" # Reply-Message := "Hello, %{User-Name}" # todd Cleartext-Password := "toddpass" Reply-Message := "Hello, %{User-Name}" radius Cleartext-Password := "radiuspass" Reply-Message := "Hello, %{User-Name}"
增加用户todd和radius,对应密码为toddpass和radiuspass 注意在这里添加的用户只是代表用该用户可以通过RADIUS认证,还要数据库内已有这个用户才能登录到数据库。
客户端配置
使用FreeRADIUS的认证服务的一方为客户端。本文中的KingbaseES数据库服务器为其客户端。 编辑客户端配置文件(/usr/local/etc/raddb/ clients.conf),当KingbaseES服务与FreeRADIUS服务在同一台机器时可直接修改原有的localhost项。也可修改或者增加一个新的客户端项。
client KingbaseES { ipaddr = 192.168.4.30 proto = * secret = testing123 require_message_authenticator = no nas_type = other # localhost isn't usually a NAS... limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } }
上图中,KingbaseES为客户端指定的别名,可任意指定。主要关注ipaddr 和 secret两个参数,其他参数可不修改。 ipaddr为KingbaseES服务器所在ip地址。 Secret为预共享密钥要与 sys_hba.conf中的配置参数一致。
注意
FreeRADIUS会对其配置文件的所属用户及读写权限检查,请不要修改这些文件的权限,否则可能导致服务启动不了。
6.4.3.3. 启动服务
启动KingbaseES
启动FreeRADIUS
直接运行命令radiusd即可启动FreeRADIUS服务器,建议以调试模式启动,这样方便查看认证请求和响应的信息。调试模式启动命令为:
#radiusd –X
启动调试模式会一直占用终端。启动成功时会输出如下信息 :
Ignoring "ldap" (see raddb/mods-available/README.rst) # Loading preacct {...} # Loading accounting {...} # Loading post-proxy {...} # Loading post-auth {...} } # server default server inner-tunnel { # from file /usr/local/etc/raddb/sites-enabled/inner-tunnel # Loading authenticate {...} # Loading authorize {...} # Loading session {...} # Loading post-proxy {...} # Loading post-auth {...} # Skipping contents of 'if' as it is always 'false' -- /usr/local/etc/raddb/sites-enabled/inner-tunnel:336 } # server inner-tunnel radiusd: #### Opening IP addresses and Ports #### listen { type = "auth" ipaddr = * port = 0 limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } } listen { type = "acct" ipaddr = * port = 0 limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } } listen { type = "auth" ipv6addr = :: port = 0 limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } } listen { type = "acct" ipv6addr = :: port = 0 limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } } listen { type = "auth" ipaddr = 127.0.0.1 port = 18120 } Listening on auth address * port 1812 bound to server default Listening on acct address * port 1813 bound to server default Listening on auth address :: port 1812 bound to server default Listening on acct address :: port 1813 bound to server default Listening on auth address 127.0.0.1 port 18120 bound to server inner-tunnel Listening on proxy address * port 43719 Listening on proxy address :: port 55298 Ready to process requests
6.4.4. 通过RADIUS身份验证连接Kingbase
RADIUS对数据库应用是透明的,正常方式连接数据库即可。
ksql客户端请使用符合sys_hba.conf中的radius认证方式的参数(ip、database、user)登录。例如:
ksql -U radius -d radius -W radiuspass -h 127.0.0.1
使用JDBC连接。示例代码如下:
private String url = "jdbc:postgresql://192.168.137.171:5432/todd"; private String username = "radiususer"; private String password = "radiuspass"; private Connection connection = null; public Connection getConn() { try { Class.forName("org.postgresql.Driver").newInstance(); connection = DriverManager.getConnection(url, username, password); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return connection; }
使用radius认证的登录方式,radiusd服务会有认证成功的输出信息,如果登录时没用RADIUS认证则不会有输出。
边栏推荐
- 高薪程序员&面试题精讲系列131之Eureka如何实现高可用?自我保护机制是怎么回事?
- 暑气渐敛,8月让我们开源一夏!
- 七夕专属博文-使用QGraphics画“红心“或“黑心“(含数学模型讲解)
- 网站备案后没有找到站点 您没有将此域名或IP绑定到对应站点! 配置文件未生效!
- Financial products with high annualized returns
- 使用Canvas实现网页鼠标签名效果
- ESP8266-Arduino编程实例-74HC595位移寄存驱动
- 工业制造行业的低代码开发平台思维架构图
- Vulnhub target drone: HARRYPOTTER_ NAGINI
- ESP8266-Arduino programming example-GA1A12S202 logarithmic scale analog light sensor
猜你喜欢
酷逼了 Pathetic Dog 第 304 场周赛
金仓数据库KingbaseES安全指南--6.3. Kerberos身份验证
月薪12K,蝶变向新勇往直前,我通过转行软件测试实现月薪翻倍...
计算机系统与网络安全技术——第一章——信息安全概述——1.1-网络安全定义——什么是信息?
MySQL's maximum recommended number of rows is 2000w, is it reliable?
Ant discloses the open source layout of core basic software technology for the first time
时序数据库在船舶风险管理领域的应用
蚂蚁首次披露核心基础软件技术开源版图
p5js炫酷网页流光动画
AI艺术‘美丑’不可控?试试 AI 美学评分器~
随机推荐
重庆银河证券股票开户安全吗,是正规的证券公司吗
MySQL INTERVAL Keyword Guidelines
比对软件-blastN结果详解
指针进阶(三)之指针与数组笔试题
OneFlow源码解析:Op、Kernel与解释器
IronOS, an open source system for portable soldering irons, supports a variety of portable DC, QC, PD powered soldering irons, and supports all standard functions of smart soldering irons
【Unity,C#】哨兵射线触发器模板代码
如何有效地开发 Jmix 扩展组件
MUI 做手机返回操作栏
TiFlash 存储层概览
Financial products with high annualized returns
等变图神经网络在药物研发中大放异彩
90后的焦虑,被菜市场治好了
Vulnhub target drone: HARRYPOTTER_ NAGINI
06 redis 集群搭建
金仓数据库 KDTS 迁移工具使用指南(3. 系统部署)
高薪程序员&面试题精讲系列131之Eureka如何实现高可用?自我保护机制是怎么回事?
Description of common operations and help projects about DevExpress in C#
GridControl helper class for DevExpress
软测面试如何介绍项目?要做哪些技术准备?