一、主机控制策略实现方式
针对 OpenLDAP 实现主机控制有两种方式。一种通过系统自身的 access 模块实现用户登录主机限制,但配置比较复杂、缺乏灵活性。另一种则通过 OpenLDAP 服务端自身定义的 schema、objectClass 以及添加用户条目属性。并结合客户端的参数配置,从而实现主机登录控制。此方式管理简单、灵活性强。
二、通过 Linux-PAM 模块实现控制
1.Linux-PAM 组织架构
默认登录 UNIX/Linux 机器时,均通过系统自带的 PAM 模块来验证登录者身份的合法性以及密码的正确性来实现系统的登录。Linux-PAM 组织架构图如下
+----------------+
| application: X |
+----------------+ / +----------+ +================+
| authentication-[---->--\--] Linux- |--<--| PAM config file|
| + [----<--/--] PAM | |================|
|[conversation()][--+ \ | | | X auth .. a.so |
+----------------+ | / +-n--n-----+ | X auth .. b.so |
| | | __| | | _____/
| service user | A | | |____,-----'
| | | V A
+----------------+ +------|-----|---------+ -----+------+
+---u-----u----+ | | |
| auth.... |--[ a ]--[ b ]--[ c ]
+--------------+
| acct.... |--[ b ]--[ d ]
+--------------+
| password |--[ b ]--[ c ]
+--------------+
| session |--[ e ]--[ c ]
+--------------+
2.PAM 配置文件语法讲解
PAM 配置文件路径
1 2 |
|
PAM 模块路径如下:
1 2 |
|
系统的默认配置文件如下:
1 |
|
三、通过Access 控制用户实战演练
1.Access 模块功能概要
1 |
|
2.Access 配置语法
1 2 3 4 5 6 7 |
|
3.通过 Access 控制用户实战演练
加载 pam_access.so 模块(需要限制用户登录的客户端机器上)
要加载 pam_access.so 模块,首先编辑 /etc/pam.d/sshd 文件。然后搜索并定位 account,添加如下:(新添加的 account 要设置最前面否则可能会失效)
1 2 3 4 5 6 7 8 9 10 11 |
|
配置访问规则
1 2 |
|
验证
1 2 3 4 5 6 7 8 9 |
|
如果要拒绝或运行多个用户登录系统,可以通过在 OpenLDAP 服务端上将用户加入到指定的组中,然后在 access.conf 配置文件中限制拒绝或运行即可,因为所有验证都通过 OpenLDAP 服务读取信息。
通过 pam_access.so 模块,从 ssh 登录以及 IP 地址方式限制了用户登录主机,但无法限制从控制台登录,所以建议根据当前需求进行选择。
四、OpenLDAP 服务端主机控制规则
提供自定义模块并调整主机配置即可实现 OpenLDAP 用户登录权限限制。
1.定义 olcModuleList 对象
1 2 3 4 5 6 |
|
2.添加模块路径
1 2 3 4 5 6 |
|
3.定义主机控制模块
1 2 3 4 5 6 |
|
4.定义主机 objectClass 对象
1 2 3 4 5 6 7 |
|
5.定义 ldapns 的 schema 规范
1 2 3 4 5 6 7 8 9 10 |
|
6.定义主机列表组
要定义举止列表组(ou),可以添加 ou 为 servers, 并在 servers 下添加子 ou(apphost 和 dbahost),然后将应用系统列表加入到 apphost 组中,将数据库系统加入到 dbahost 组中,从而以组为目录树单位限制不同用户登录不同系统。例如,应用用户只允许登录应用系统(JBOSS、Tomcat、Nginx、openStack 等)以及监控系统(Cacti、Nagios、Zabbix 等),数据库用户只允许登录数据库系统(Oracle、MySQL、MariaDB 等),这样就对用户登录不同系统进行了限制。
为了限制用户登录的系统,使用组进行的形式进行划分。例如,以项目名称为单位划分组,然后将每个项目的机器加入到每个组中,在添加用户时指定 objectClass 对象为 hostObject,并添加 host 和 labeldURI 数据及值即可。具体命令如下:
1 2 3 4 5 6 7 8 9 10 11 |
|
在添加 ou 时,添加了 objectClass 作为 hostObject 类型,添加了 host 属性,并将client01.pwb.com主机添加至 apphost 组
7.定义用户组
将用户添加至不同的组中,从而以组为单位限制主机登录。例如用户组:appteam,用户app_user1,具体步骤如下
添加用户组
1 2 3 4 5 6 |
|
添加用户,并添加到apphost组中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
检验
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
|
添加索引
1 2 3 4 5 6 7 8 |
|
客户端验证:
加载 LDAP 主机控制规则
1 2 3 4 5 6 7 8 9 10 11 |
|