[OpenBMC] LDAP 设定(二) - openldap 伺服架设与BMC的设定

[OpenBMC] LDAP 设定(二) - openldap 伺服架设与BMC的设定,第1张

[OpenBMC] LDAP 设定(二) - openldap 伺服架设与BMC的设定

在[OpenBMC] LDAP 设定(一) - nss-pam-ldapd 提到了openbmc ldap设定和验证,能从以下几个方向来看 

nss-pam-ldapd
[OpenBMC] LDAP 设定(一) - nss-pam-ldapdLDAP server 架设Redfish/Web设定LDAP over TLS
[OpenBMC] LDAP 设定(三) - LDAPS(LDAP over TLS)

这篇会接续介绍ldap server的架设和redfish/web设定,因为openbmc支援了 openldap 和 windows 的ad,这篇选用OpenLDAP server架设为范例

在Ubuntu上架设OpenLDAP Server

OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol)的开源实现。通常用来管理公司组织的员工资料(帐号密码),那从Directory可看出他就是一个目录结构,那我们来一层一层解析

dc(Domain Component): 这是一开始要设定的"DNS domain name"会作为base dn 使用,如bmc.com, 最后会转换成 dc=bmc,dc=com 并成为ldap server的"base dn"

dn(Distinguished Name): 是ldap的中每个entry独一无二的区分名,因为他是个目录结构,因此每个dn都会基于"base dn"往下长,例如ou=Group,他的dn就会是"ou=Group,dc=bmc,dc=com" 

admin account: ldap 都会有个admin entry(用来 *** 作使用),他的dn通常会是"cn=admin,dc=bmc,dc=com",我们可以通做这组帐号来access ldap server

那我们开始在ubuntu上面安装ldap server

下载 openldap

sudo apt install slapd ldap-utils

如果已经下载了,但想要重新设定

sudo dpkg-reconfigure slapd

自订ldap 设定

设定domain name: bmc.com --> "base dn" 为"dc=bmc,dc=com"

设定组织名称

设定admin entry(cn=admin,dc=bmc,dc=com)的密码(我是设定成admin)

最后都选default就行了

设定完成后,我们就能用ldapsearch 来看到目前的ldap 的内容

ldapsearch -LL -Y EXTERNAL -H ldapi:/// -b dc=bmc,dc=com

ldapsearch -x -H ldap://127.0.0.1:389  -b "dc=bmc,dc=com" -D "cn=admin,dc=bmc,dc=com" -w admin 

接下来产生两个组织单位ou (Organizational Unit),分别是People和Group

使用ldapadd指令新增entry, 先将要新增的组织资料写在ldif file中

The LDAP Data Interchange Format (LDIF) is a standard plain text data interchange format for representing LDAP

newou.ldif

dn: ou=Group,dc=bmc,dc=com
objectclass: organizationalUnit
ou: Group

dn: ou=People,dc=bmc,dc=com
objectclass: organizationalUnit
ou: People

command

ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=bmc,dc=com" -w admin -f newou.ldif

接下来创建user 和 qroup

nss_pam_ldapd的default attributes如下(撷取自官网)

group (objectClass=posixGroup)
  cn                - group name
  userPassword      - password (by default mapped to "*")
  gidNumber         - gid
  memberUid         - members (user names)
  member            - members (DN values)
passwd (objectClass=posixAccount)
  uid               - account name
  userPassword      - password (by default mapped to "*")
  uidNumber         - uid
  gidNumber         - gid
  gecos             - gecos
  homeDirectory     - home directory
  loginShell        - shell

为什么objectClass分别指定是posixAccount和posixGroup呢?

我们先来看看/etc/passwd的格式


provided from https://landoflinux.com/linux_passwd_command.html

其中原本linux密码放在/etc/passwd里面,但因为安全考虑,之后密码就移到/etc/shadow,而在/etc/passwd第二项以x作为标记。

如果ldap account需要有和/etc/passwd相对应的atrribute的话,那符合的类型就是posixAccount,他个格式范例如下

refer to An Approach for Using LDAP as a Network Information Service,

The following entry is an example of the posixAccount class:

dn: uid=lester, dc=aja, dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
uid: lester
cn: Lester the Nightfly
userPassword: {crypt}X5/DBrWPOQQaI
gecos: Lester
loginShell: /bin/csh
uidNumber: 10
gidNumber: 10
homeDirectory: /home/lester

userPassword values MUST be represented by following syntax:

passwordvalue          = schemeprefix encryptedpassword
schemeprefix           = "{" scheme "}"
scheme                 = "crypt" / "md5" / "sha" / altscheme
altscheme              = "x-" keystring
encryptedpassword      = encrypted password

The encrypted password contains of a plaintext key hashed using the algorithm scheme.

和/etc/passwd的atrribute对应如下

objectClass: posixAccount

id

uid

password

userPassword

uid

uidNumber

gid

gidNumber

full_name

gecos

Home Directory

homeDirectory

Login shell

loginShell


group也是差不多。因为passwd的格式有点复杂,所以我们先产生一个没有密码的user,后面再来设定他的密码,和ou产生方式差不多,我们先产生一个newuser.ldif

#新增user iris
#newuser.ldif

dn: uid=iris,ou=People,dc=bmc,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: iris ye
sn: ye
uid: iris
uidNumber: 3001
gidNumber: 1200
loginShell: /bin/bash
homeDirectory: /tmp

command:

ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=bmc,dc=com" -w admin -f newuser.ldif


接下来设定user密码

ldappasswd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=bmc,dc=com" -w admin  "uid=iris,ou=People,dc=bmc,dc=com"

会回传 New password: sdUo1UhJ 一个乱数密码

那我们再透过这个乱数密码来设定新的密码(这边设为iris)

ldappasswd -x -H ldap://127.0.0.1:389 -D "uid=iris,ou=People,dc=bmc,dc=com" -w sdUo1UhJ -s iris

#新增group webgroup
#newgroup.ldif

dn: cn=webgroup,ou=Group,dc=bmc,dc=com
cn: webgroup
description: web users group
objectClass: posixGroup
gidNumber: 1200

command:

ldapadd -x -H ldap://127.0.0.1:389 -D "cn=admin,dc=bmc,dc=com" -w admin -f newgroup.ldif

有了user 和 group之后,我们需要把user加入进group,透过新增memberUid这个atrribute

那这边要用到ldapmodify的指令来修改atrribute

#adduser2group.ldif

dn: cn=webgroup,ou=Group,dc=bmc,dc=com
changetype: modify
add: memberUid
memberUid: iris

command:

ldapmodify -x -H ldap://127.0.0.2:389  -D "cn=admin,dc=bmc,dc=com" -w admin -f adduser2group.ldif

这样ldap server就完成了

BMC端的设定

再webui上面填入相对应的值,就能透过iris这个user登入了

底下server URI 应该是ldap://192.168.24.1:389,字被cut掉了,但这边没填port number也没关系,可以只填ldap://192.168.24.1 

也能透过redfish 的patch method来更改LDAP的设定,[PATCH] /redfish/v1/AccountService, body 如下

{
    "LDAP": {
        "Authentication": {
            "AuthenticationType": "UsernameAndPassword",
            "Password": "admin",
            "Username": "cn=admin,dc=bmc,dc=com"
        },
        "LDAPService": {
            "SearchSettings": {
                "baseDistinguishedNames": [
                    "dc=bmc,dc=com"
                ],
                "GroupsAttribute": "gidNumber",
                "UsernameAttribute": "uid"
            }
        },
        "RemoteRoleMapping": [
            {
                "LocalRole": "Administrator",
                "RemoteGroup": "webgroup"
            }
        ],
        "ServiceAddresses": [
            "ldap://10.142.24.9:389"
        ],
        "ServiceEnabled": true
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5715149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存