LDAP

来自Gea-Suan Lin's Wiki
跳到导航 跳到搜索

LDAP指的是Lightweight Directory Access Protocol,是一个开放标准。经常被用在管理使用者帐号及权限。

使用者操作

使用者最常用的操作应该就是修改密码:

$ ldappasswd -x -D 'uid=gslin,ou=People,dc=example,dc=com' -W -S

系统操作

Ubuntu上可以透过ldap-utils里面的软体对LDAP伺服器操作,其中ldap*系列指令有一些共通参数:

  • 表示操作使用者的-D,通常会使用管理员帐号操作,像是-D 'cn=Manager,dc=example,dc=com'或是-D 'cn=admin,dc=example,dc=com'
  • 表示base的-b,像是-b 'dc=example,dc=com'

这些参数可以透过~/.ldaprc的设定让使用者不需要每次都输入:

BASE dc=example,dc=com
BINDDN cn=Manager,dc=example,dc=com

另外密码是每次都得输入的项目:

  • 表示操作使用者密码的-y,后面接档案名称,像是-y ~/passwd-Manager.txt。另外一种输入密码的方式为-W,表示程式执行时手动输入密码。

新增使用者

这边是选用inetOrgPerson处理,要给Unix-like系统帐号使用的,可以考虑用posixAccount

指令:

$ ldapmodify -x -y ~/passwd-Manager.txt -f user.ldif

对应的LDIF:

dn: uid=${USERNAME},ou=People,dc=example,dc=com
changetype: add
objectClass: inetOrgPerson
cn: ${USERNAME}
gn: ${FIRSTNAME}
sn: ${LASTNAME}
uid: ${USERNAME}
userPassword: ${PASSWORD_APR1MD5}

上面的行为可以写一只script使用(需要自行修改BASEDN):

#!/bin/bash

work() {
    local BASEDN
    BASEDN="dc=example,dc=com"

    local MAILBASE
    MAILBASE="example.com"

    local BASEDIR
    BASEDIR=$(dirname "${BASE_SOURCE}")

    local DISPLAYNAME
    local FIRSTNAME
    local LASTNAME
    local PASSWORD
    local PASSWORD_APR1MD5
    local USERNAME

    read -p 'Username: ' -r USERNAME
    read -p 'Display name: ' -r DISPLAYNAME
    read -p 'First name: ' -r FIRSTNAME
    read -p 'Last name: ' -r LASTNAME

    stty -echo
    read -p 'Password: ' -r PASSWORD
    stty echo
    PASSWORD_APR1MD5=$(slappasswd -h '{CRYPT}' -c '$1$%.8s' -s "${PASSWORD}")

    cat <<EOF | ldapmodify -x -y "${BASEDIR}"/passwd-Manager.txt
dn: uid=${USERNAME},ou=People,${BASEDN}
changetype: add
objectClass: inetOrgPerson
cn: ${USERNAME}
displayName: ${DISPLAYNAME}
gn: ${FIRSTNAME}
mail: ${USERNAME}@${MAILBASE}
sn: ${LASTNAME}
uid: ${USERNAME}
userPassword: ${PASSWORD_APR1MD5}
EOF
}

work

查询使用者

一般情况下,不需要拉出密码栏位时可以用anonymous的方式列出(不指定密码相关指令时会自动变成anonymous行为),像是这样:

$ ldapsearch -x 'uid=gslin'

如果有需要拉出密码栏位需求时,会需要登入(这边有透过~/.ldaprc减少输入的参数):

$ ldapsearch -x -y ~/passwd-Manager.txt 'uid=gslin'

删除使用者

删除会透过有写入权限(删除权限)的帐号来处理,会需要指定dn栏位,也就是完整的名称:

$ ldapdelete -x -y ~/passwd-Manager.txt 'uid=gslin,ou=People,dc=example,dc=com'

修改使用者密码

在忘记密码时可以用,这需要管理员权限才能改:

$ ldappasswd -x -D 'cn=Manager,dc=example,dc=com' -W -S 'uid=gslin,ou=People,dc=example,dc=com'

相关连结