大数据安全管理 -- FreeIPA的使用

栏目:网站封装打包 时间:2019-03-18 09:56 作者:35tui.cn
1.说明 Hadoop的安全默认套件为Kerberos,我们可以在各个节点上面手动安装Kerberos的各个组件。 还可以使用操作系统厂商提供的集成安全套件, FreeIPA就是其中的一个。 HDP也在它们的Ambari安装中支持FreeIPA的部署。 FreeIPA是CentOS(我只用过这个操作系统,RedHat中名称好象不是这个)提供的一个开源组件。但我觉得它更象是一系列开源软件的集合。在百度百科中,它是定义是: 网站封装打包
FreeIPA是一款集成的安全信息管理解决方案。FreeIPA包含Linux (Fedora),389 Directory Server 
MIT Kerberos, NTP, DNS, Dogtag (Certificate System)等等身份,认证和策略功能。
 
2. 安装部署说明
FreeIPA的安装部署有很多文档,这里只记录一下我碰到过的问题且认为比较重要的问题:
 
2.1 CentOS 版本问题
不建议使用CentOS 6.6。 原因: https://bugs.centos.org/view.php?id=8757&nbn=2
FreeIPA的安装最好与CentOS的版本一致。也就是说,假设操作系统的版本是CentOS 6.5,那么安装的FreeIPA也最好来源于CentOS 6.5。 因为碰到过这样的一个问题:操作系统版本是6.5, 但是安装的FreeIPA是来源于网络上的yum源(好象是6.7),结果出错。
2.2 输入空格
安装IPAClient的时候,注意不要多输入空格之类的符号
 
[root@ipa112 ~]# ipa-client-install --domain=example.com --realm=EXAMPLE.COM --principal=admin@EXAMPLE.COM --password=hadoop123 --enable-dns-updates  --permit --no-ntp
Provide your IPA server name (ex: ipa.example.com): ipa110.example.com  --输入ipaserver,需要注意后面一定不要带空格,否则就会抛出异常
1
2
2.3 节点名称必须满足FQDN的要求
FreeIPA集群必须密码FQDN。 
原因: freeipa有一个域的概念(kerberos也有), kerberos要求所有节点都在一个域内。 而我们在安装freeipa的时候,会将kerberos一同装好。 
在安装过程中,安装脚本会自动获取当前的机器名(是freeipa的主节点), 并解析出相应的域名。 
我们可以从它的安装脚本的提示信息获取: The domain name has been determined based on the host name 
另外我们的机器名称绝对不能叫做类似于hadoop.sec19, 通过点号后面的sec19来区分,这是绝对不行的。这在freeipa看来,它的域名就是sec19 
这会导致我们的所有的机器都不在同一个域内。
 
2.4 DNS说明
DNS用于机器名解析,如果安装FreeIPA 双机(即主从Server),那就需要DNS 
原因:我们需要执行类似于如下的命令:
 
  ipa-replica-prepare hadoop197.example.com --ip-address 192.168.116.197
1
此时它就会去DNS上面的解析,找不到,就直接报错。此时就导致从节点无法安装。 
如果我们只安装freeipa的单节点,就可以不使用DNS.
 
3 FreeIPA组件
 
上图是RedHat给出的一个组件关系图,从图中,我们大体的可以看明白它的组织关系。其中Directory Server是它的核心
 
3.1 Directory Server
FreeIPA的目录服务采用的是开源的389 DS. 它是基于LDAP协议的开源软件。它可以说是整个体系统的基础。 Kerberos的用户数据会存储在Directory Server的数据库中
 
3.1.1 文件说明
Directory Server就是LDAP服务,基于LDAP的服务还有Windows AD。 对于DS,其中我们可能会涉及到的文件有如下几个,其位置如列表。
 
文件或目录 所在地方
日志文件 /var/log/dirsrv/slap-{instance}
配置文件 /var/dirsrv/slap-{instance}
数据库文件 /var/lib/dirsrv/slapd-{instance}
注1:这里的instance,是我们在执行安装部署的时候,设置的,如在本文中,其值就是EXAMPLE.COM,那么我们的日志路径就是/var/log/dirsrv/slap-EXAMPLE.COM 
注2:DS的数据是存在一个名叫Berkeley DB的数据库中
 
3.1.2 多Master说明
我们一般来说,会部署两个IPAServer,即两个Master,然后人为将它们划分为:主节点与从节点。但这其中是一种”不正确”的描述。但是因为FreeIPA的脚本进行了区分,所以我们才这样描述。事实上对于DS本身而言,它是不会区分”主从”Master的,它可以有多个Master(超过两个Master的组网级配置没有测试,这里的记录是官方对于它的一个说明) 
每个master即是一个信息的提供者也是一个消费者。 当某个master更新数据后,它会其它master推送(push)相应的变化,如果出现冲突,就由冲突算法处理;如果仍然无法解决,这个冲突就会被标识出来,由管理员来处理。 
对于每一次修改,都会设置一个修改状态数(Change state NumberCSN),这个数可以唯一标识这次修改,而这个数是由两部分组成:时间戮与可以定义本次修改的master的标识符,而冲突解决算法很简单,就是“后修改者胜”。
 
3.1.3 配置修改
在使用FreeIPA中,我们可能会根据需要修改相应的配置。FreeIPA提供两种修改方式:WebUI界面修改与LDAP格式文件。 下面以我碰到的两种修改情况进行说明
 
3.1.3.1 密码规则修改
用户的密码策略是很常用的一种配置。用户可以通过web UI进行配置。其配置位置如图所示: 
 
如果用户没有配置过密码策略,那么就会使用默认的密码策略,即上图中的global_policy,点开就可以看到如下图所示的策略配置信息: 
 
下表为具体项说明:
 
名称 含义
Max lifetime(days) 用户密码的最长时间,默认为90天
Min lifetime(hours) 用户修改用户密码后,必须要等一段时间才能再次被修改。这段时间表就是最短的修改时间表,默认为1小时。 单位也是小时。 它是为避免用户在修改密码后,立即改成原来的密码。否则就会弹出信息:Constraint violation: Too soon to change password
History size(number of password) 记录前几次的历史密码
最小长度 密码的最小长度。默认为8,即密码长度不小于8位。如果不需要校验密码长度,可以将它设置为0
Max failures 最大失败次数。即用户在登录或kinit的时候允许的最大输错密码的次数
注:如果输入错误密码次数过多,需要解锁,此时执行kinit命令时,就会有如下信息:
 
[root@hdp136 ~]# kinit lch
kinit: Clients credentials have been revoked while getting initial credentials
1
2
此时在KDC节点(即IPAServer节点)执行命令:
 
[root@hdp134 ~]# kadmin.local    <-----执行kadmin.local
Authenticating as principal admin/admin@EXAMPLE.COM with password.
kadmin.local:  getprinc  lch  <---查看用户信息情况
Principal: lch@EXAMPLE.COM
Expiration date: [never]
Last password change: Tue Feb 27 11:11:02 CST 2018
Password expiration date: Mon May 28 11:11:02 CST 2018
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: Tue Feb 27 11:11:02 CST 2018 (lch@EXAMPLE.COM)
Last successful authentication: Tue Feb 27 11:12:23 CST 2018
Last failed authentication: Tue Feb 27 14:11:07 CST 2018
Failed password attempts: 6      <--------------打印信息表明已经超过最大失败次数
Number of keys: 4
Key: vno 3, aes256-cts-hmac-sha1-96, Special
Key: vno 3, aes128-cts-hmac-sha1-96, Special
Key: vno 3, des3-cbc-sha1, Special
Key: vno 3, arcfour-hmac, Special
MKey: vno 1
Attributes: REQUIRES_PRE_AUTH
Policy: [none]
kadmin.local:   modprinc -unlock lch@EXAMPLE.COM    <---输入的命令进行解锁
Principal "lch@EXAMPLE.COM" modified.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
3.1.3.2 LDIF修改
Ldif是一种LDAP数据交换格式。 LDIF是一种ASCII格式,被用于在server与client之间或者两个server之间交换、导出数据。它也用在修改LDAP服务器数据库。FreeIPA的配置信息都是通过ldif设置,然后导入到数据库中的。下面以修改主从节点的数据交换的buffer大小为例,进行说明。 
在ipa server的从节点创建的user信息无法同步到主节点,而在日志中:
 
sasl_io_recv failed to decode packet for connection....
1
此时就需要修改buffer size的大小。 
1. 创建一个package.ldif的文件,其文件内容:
 
[root@ipa110 /]# cat package.ldif 
dn: cn=config
changetype: modify
replace: nsslapd-sasl-max-buffer-size
nsslapd-sasl-max-buffer-size: 2097152
1
2
3
4
5
执行命令,导入ldif
[root@ipa110 /]# ldapmodify -h localhost -D "cn=directory manager" -w hadoop123 -f package.ldif -ZZ
1
其中-w后面的hadoop123为管理员密码,就是在执行ipa-server-install时输入的密码。在几个节点都执行,然后重启,使用buffer生效。
 
3.2 SSSD
3.2.1 操作系统用户
在RedHat的图中并没有列出SSSD,它不属于IPAServer,而是属于IPAClient。 它主要用于Linux系统用户管理。 
我们知道,当我们使用useradd命令去创建一个用户的时候,会在linux的/etc/passwd文件记录下来。但是使用freeipa创建的用户,其信息并不保存在/etc/passwd,而是保存在DS的数据库中。那它是如何进行工作的呢? 
Linux有一个配置文件
 
[root@hdp136 ~]# cat /etc/nsswitch.conf
... 
passwd:     files sss
... 
1
2
3
4
这个配置文件中的files就是指linux的本地文件,如/etc/passwd,而sss则是指的Linux中的一个内核进程:
 
[root@hdp136 ~]# service sssd status
sssd (pid  1799) is running...
1
2
而我们使用用户登录到linux系统中时,其流程如下:
 
 
 
需要注意的是sssd本身是有缓存的,它不会时时去到ldap服务器查询用户信息,因此我们也不必要担心网络导致登录很慢。
 
3.2.2 SSSD日志配置
SSSD如果需要修改日志级别,可以如下修改:
 
[root@hdfs142 sssd]# vi /etc/sssd/sssd.conf 
 
[domain/example.com]
 
cache_credentials = True
debug_level = 9    ---修改这个值然后重启sssd
1
2
3
4
5
6
然后重启相应的sssd,即可以在/var/log/ssssd/ ldap_child.log查看到详细的说明
 
4. 参考文档
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Identity_Management_Guide/index.html
https://www.freeipa.org/page/Documentation
网站封装打包www.35tui.cn
扫描微信
TOP