在[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 ServerOpenLDAP是轻型目录访问协议(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对应如下
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 } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)