2021年5月29日 星期六

openBMC LDAP 設定(二) - openldap server 架設和bmc設定

在前一篇"openBMC LDAP 設定(一) - nss-pam-ldapd" 提到了openbmc ldap設定和驗證,能從以下幾個方向來看 

  • nss-pam-ldapd
  • ldap server 架設
  • redfish/web 設定
這篇會接續介紹剩下兩個部分,就是ldap server的架設和redfish/web設定

因為openbmc支援了 openldap 和 windows 的ad,因此這篇選用OpenLDAP server架設為範例

LDAPS: openBMC LDAP 設定(三) - LDAPS(LDAP over TLS)


在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
or

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分別指定是posixAccountposixGroup呢?

我們先來看看/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,他個格式範例如下

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掉了



那也能用redfish 的patch來更改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
    }
}


**補充 AMI BMC 之 LDAP user/group設定**

dn: cn=iris,ou=People,dc=bmc,dc=com
cn: iris
sn: ye
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: iris

dn: cn=amigroup,ou=Group,dc=bmc,dc=com
member: cn=iris,ou=People,dc=bmc,dc=com
cn: amigroup
objectClass: groupOfNames
objectClass: top

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。