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/0
或dirsrv: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)dscreate
、dsctl
、dsidm
命令的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