389-ds 目录服务器入门——1

0 实验环境

CPU	:龙芯3a5000
操作系统	:Loongnix Server8.4(衍生自CentOS 8.4)

1 389-ds简介

要了解389-ds,需要先了解几个概念。

1)389-ds中的ds是Directory Server(目录服务器) 的缩写,这里的目录指的是一种为了快速有效查找和搜索而进行了特别优化的数据库类型。存储在目录中的数据类型往往是长期存储的,并且基本上不会进行修改操作。
2)389-ds是Loongnix Server 8.4中所支持的一种目录服务器,在389-ds之前,广泛使用的目录服务器软件是openLDAP。
3)LDAP(Lightweight Directory Access Protocol/轻量级目录访问协议)。目录访问协议,也就是用来访问目录的协议。LDAP可用于用户和组管理、系统配置管理和地址管理等任务。

2 389-ds 安装

在Loongnix Server 8.4系统中,389-ds-base软件包位于AppStream仓库,且使用模块流的方式提供。模块流是从RHEL8版本开始,提供的一种全新的软件包多版本切换解决方案。

[loongson@bogon unrar]$ sudo yum module install 389-ds
[sudo] loongson 的密码:
上次元数据过期检查:0:09:03 前,执行于 2023年04月13日 星期四 21时45分11秒。
依赖关系解决。
=============================================================================================================================================================================
 软件包                                    架构                          版本                                                              仓库                         大小
=============================================================================================================================================================================
安装组/模块包:
 389-ds-base                               loongarch64                   1.4.3.16-19.0.1.module+lns8.4.0+10492+0073ae27                    appstream                   1.6 M
安装依赖关系:
 389-ds-base-libs                          loongarch64                   1.4.3.16-19.0.1.module+lns8.4.0+10492+0073ae27                    appstream                   740 k
 cyrus-sasl-md5                            loongarch64                   2.1.27-5.2.lns8                                                   baseos                       60 k
 openldap-clients                          loongarch64                   2.4.46-17.0.1.lns8                                                baseos                      194 k
 openssl-perl                              loongarch64                   1:1.1.1g-16.4.lns8                                                baseos                       79 k
 perl-Algorithm-Diff                       noarch                        1.1903-9.lns8                                                     baseos                       51 k
 perl-Archive-Tar                          noarch                        2.30-1.lns8                                                       baseos                       78 k
 perl-Compress-Raw-Bzip2                   loongarch64                   2.081-1.0.1.lns8                                                  baseos                       38 k
 perl-Compress-Raw-Zlib                    loongarch64                   2.081-1.0.1.lns8                                                  baseos                       65 k
 perl-DB_File                              loongarch64                   1.840-419.0.2.lns8                                                baseos                      124 k
 perl-IO-Compress                          noarch                        2.081-1.lns8                                                      baseos                      267 k
 perl-IO-Zlib                              noarch                        1:1.10-419.0.2.lns8                                               baseos                       79 k
 perl-Text-Diff                            noarch                        1.45-2.lns8                                                       baseos                       44 k
 python3-ldap                              loongarch64                   3.3.1-1.1.lns8                                                    appstream                   225 k
 python3-lib389                            noarch                        1.4.3.16-19.0.1.module+lns8.4.0+10492+0073ae27                    appstream                   897 k
 python3-pyasn1                            noarch                        0.3.7-6.lns8                                                      appstream                   125 k
 python3-pyasn1-modules                    noarch                        0.3.7-6.lns8                                                      appstream                   108 k
安装模块配置档案:
 389-ds/common                                                                                                                                                              
启用模块流:
 389-ds                                                                  1.4                                                                                                

事务概要
=============================================================================================================================================================================
安装  17 软件包

总下载:4.7 M
安装大小:16 M
确定吗?[y/N]:

3 和ds相关的命令

dscreate:用于创建目录服务的实例
dsctl:管理一个本地实例,需要root权限。要求你连接到正在运行目录服务器实例的终端。用于启动、停止、备份数据库,以及更多操作。
dsconf:用于管理和配置服务器的主要工具。通过其外部接口管理一个实例的配置。这允许你在实例上进行远程配置更改。
dsidm:用于身份管理(管理用户、组、密码等)。权限由访问控制授予。例如,用户可以重置自己的密码或改变自己账户的细节。

4 目录服务器实例

4.1 创建目录服务器实例

使用dscreate 命令创建本地实例,其中最简单的创建方式是使用包含了相关内容的.inf文件。.inf文件中包含了用于回答对应问题的答案(如果采用交互式方法创建,这些答案需要一个一个输入)。

4.1.1 .inf文件

关于.inf文件中合规的内容可以通过dscreate create-template命令来查看,加上--advanced选项,可以查看到更多的内容。

例如:可以使用如下命令生成一个.inf的模版文件:

[root@bogon ~]# dscreate create-template --advanced abc.inf

然后可以先打开abc.inf文件,大概浏览一下里面的内容。里面有比较详细的注释。

4.1.2 第一种方法创建目录服务器实例

一个简单的.inf文件示例:

[root@bogon ~]# more instance.inf
# /root/instance.inf
[general]
config_version = 2				(1)

[slapd]
root_password = YOUR_ADMIN_PASSWORD_HERE	(2)

[backend-userroot]
sample_entries = yes				(3)
suffix = dc=example,dc=com
[root@bogon ~]#

注意:上面的(1)、(2)、(3)标号,它们不是本该有的内容,而是我为了解释对应行的内容所添加的额外信息。
(1):这一行是必须的,它用来标明当前的inf文件所使用的是版本2的规则。
(2):为ldap用户cn=Directory Manager创建一个复杂的root_password。这个用户是用来连接(绑定)目录的。
(3):在新创建的实例中加入默认的用户和组条目。

记得修改上面文件中的root_password后面的内容,且密码长度需要大于8位。对比于abc.inf文件,此处没有给出的内容将会使用默认值。

然后你就可以使用下面的命令创建一个实例:

[root@bogon ~]# dscreate from-file instance.inf
Starting installation...
Completed installation for localhost

这样就创建了一个名为localhost的目录服务的实例。如果你想要看到更多的信息,可以加上-v参数。

4.1.2.1 查看目录服务器的状态

dsctl用于管理目录服务器的实例,可以通过它来执行重启、启动、关闭、删除、备份、查看状态等等操作。
如下:显示localhost实例的当前状态。这个命令的顺序和systemdctl查看服务状态的命令顺序有些区别,注意一下。

[root@bogon ~]# dsctl localhost status
Instance "localhost" is running

4.1.3 第二种方法创建目录服务器实例

说是第二种方法,其实也不是什么新方法,就是通过dscreate interactive命令来交互式的创建实例。这种就是比第一种写到.inf文件中的方法稍显麻烦一些。

4.2 列出有效的目录服务器实例

服务器上可以同时运行多个目录服务器实例,使用以下命令查看:

[root@bogon ~]# dsctl --list
slapd-localhost

其中--list选项可以简写为-l

4.3 删除目录服务器实例

当你不需要某个目录服务器实例时,可以删除它。使用下面的命令进行删除操作:

[root@bogon ~]# dsctl localhost remove --do-it
Removing instance ...
Completed instance removal

5 设置管理凭证

为了使管理更容易,我们可以通过一个配置来表明如何连接到目录服务器。这个配置文件就是~/.dsrc 。
对于管理一个远程实例,一个配置是:

# cat ~/.dsrc
[localhost]
uri = ldaps://<name of remote server>
basedn = dc=example,dc=com
binddn = cn=Directory Manager
# You need to copy /etc/dirsrv/slapd-localhost/ca.crt to your host for this to work.
# Then run /usr/bin/c_rehash /etc/openldap/certs
tls_cacertdir = /etc/openldap/certs/

对于管理一个本地实例,可以如下设置:

# cat ~/.dsrc
[localhost]						(1)
# Note that '/' is replaced to '%%2f'.
uri = ldapi://%%2fvar%%2frun%%2fslapd-localhost.socket	(2)
basedn = dc=example,dc=com
binddn = cn=Directory Manager

管理本地和远程实例的配置中最主要的差异是uri内容。
注意:此处内容内添加的标号(1)和(2)是用来标注对应行注释信息的,正常配置文件中不应该存在。
(1):打算操作的对应实例的名称。
(2):ldapi检测试图登录到服务器的用户的UID和GID。如果UID/GID是0/0dirsrv:dirsrv,ldapi将用户绑定为目录服务器root dn,也就是cn=Directory Manager。在URI中,/被替换成%%2f,所以在这个例子中,路径是/var/run/slapd-localhost.socket

5 添加用户和组信息

5.1 添加用户

[root@bogon ~]# dsidm localhost user create
Enter value for uid : huangyang
Enter value for cn : Huangyang
Enter value for displayName : Huangyang User
Enter value for uidNumber : 1000
Enter value for gidNumber : 1000
Enter value for homeDirectory : /home/huangyang
Successfully created huangyang

可以像上面一样通过交互式的方式创建用户,也可以通过传递参数的方式创建用户,如下所示:

[root@bogon ~]# dsidm localhost user create --uid eve --cn Eve --displayName 'Eve User' --uidNumber 1001 --gidNumber 1001 --homeDirectory /home/eve
Successfully created eve

虽然我们的命令尽力使用 "简短名称",如eve等,但LDAP的许多部分需要一个 "distinguished name"。这是目录对象的完全准确的名称,它保证是唯一的。我们可以用 get命令来查看任何类型的dn。下面显示我们查询的对象:

[root@bogon ~]# dsidm localhost user get huangyang
dn: uid=huangyang,ou=people,dc=example,dc=com
......

现在知道了dn,我们就可以为这些账户重置或修改密码。注意,我们在这里使用account子命令,它涉及到对目录的认证、账户锁定、解锁等。

[root@bogon ~]# dsidm localhost account reset_password uid=huangyang,ou=people,dc=example,dc=com
Enter new password for uid=huangyang,ou=people,dc=example,dc=com : 
CONFIRM - Enter new password for uid=huangyang,ou=people,dc=example,dc=com : 
reset password for uid=huangyang,ou=people,dc=example,dc=com

5.2 添加组

[root@bogon ~]# dsidm localhost group create
Enter value for cn : server_admins
Successfully created server_admins

将用户添加到组里面:
其中server_admins是上面刚创建的组名称,而uid=huangyang,ou=people,dc=example,dc=com是前面所创建用户的dn信息。

[root@bogon ~]# dsidm localhost group add_member server_admins uid=huangyang,ou=people,dc=example,dc=com
added member: uid=huangyang,ou=people,dc=example,dc=com

到了这里,我们有了可以认证的用户和组,并且有了分配给他们的信息。

我们可以用 ldapwhoami命令显示认证工作。其中需要输入的密码是前面通过reset_password命令给用户huangyang所设置的密码。

[root@bogon ~]# LDAPTLS_CACERT=/etc/dirsrv/slapd-localhost/ca.crt ldapwhoami -H ldaps://localhost -D uid=huangyang,ou=people,dc=example,dc=com -W -x
Enter LDAP Password: 
dn: uid=huangyang,ou=people,dc=example,dc=com

参考

1)dscreatedsctldsidm命令的man手册
2)https://www.port389.org/docs/389ds/howto/quickstart.html
3)https://access.redhat.com/documentation/zh-cn/red_hat_directory_server/11/html/administration_guide/index
4)https://documentation.suse.com/sles/15-SP3/html/SLES-all/cha-security-ldap.html

posted @ 2023-04-28 09:48  streamlet_hy  阅读(716)  评论(0编辑  收藏  举报