「LDAP」:修訂間差異

出自Gea-Suan Lin's Wiki
跳至導覽 跳至搜尋
本頁面具有訪問限制。如果您看見此訊息,這代表您沒有訪問本頁面的權限。
 
(未顯示同一使用者於中間所作的 5 次修訂)
行 1: 行 1:
'''LDAP'''是'''Lightweight Directory Access Protocol''' 的縮寫
'''LDAP''' 指的 是'''Lightweight Directory Access Protocol''' ,是一個開放標準。經常被用在管理使用者帳號及權限


==  基本 操作 ==
==  使用者操作 ==
 在[[Ubuntu]]上可以透過<code>ldap-utils</code>裡面的軟體對LDAP伺服器操作。
使用者最常用的操作應該就是修改密碼:
 
<syntaxhighlight lang="shell-session">
$ ldappasswd -x -D 'uid=gslin,ou=People,dc=example,dc=com' -W -S
</syntaxhighlight>
 
== 系統 操作 ==
 在[[Ubuntu]]上可以透過<code>ldap-utils</code>裡面的軟體對LDAP伺服器操作 ,其中<code>ldap*</code>系列指令有一些共通參數:
 
* 表示操作使用者的<code>-D</code>,通常會使用管理員帳號操作,像是<code>-D 'cn=Manager,dc=example,dc=com'</code>或是<code>-D 'cn=admin,dc=example,dc=com'</code>。
* 表示base的<code>-b</code>,像是<code>-b 'dc=example,dc=com'</code>。
 
這些參數可以透過<code>~/.ldaprc</code>的設定讓使用者不需要每次都輸入:
 
<pre>
BASE dc=example,dc=com
BINDDN cn=Manager,dc=example,dc=com
</pre>
 
另外密碼是每次都得輸入的項目:
 
* 表示操作使用者密碼的<code>-y</code>,後面接檔案名稱,像是<code>-y ~/passwd-Manager.txt</code>。另外一種輸入密碼的方式為<code>-W</code>,表示程式執行時手動輸入密碼
 
=== 新增使用者 ===
這邊是選用<code>inetOrgPerson</code>處理,要給Unix-like系統帳號使用的,可以考慮用<code>posixAccount</code>。
 
指令:
 
<syntaxhighlight lang="shell-session">
$ ldapmodify -x -y ~/passwd-Manager.txt -f user.ldif
</syntaxhighlight>
 
對應的LDIF:
 
<pre>
dn: uid=${USERNAME},ou=People,dc=example,dc=com
changetype: add
objectClass: inetOrgPerson
cn: ${USERNAME}
gn: ${FIRSTNAME}
sn: ${LASTNAME}
uid: ${USERNAME}
userPassword: ${PASSWORD_APR1MD5}
</pre>
 
上面的行為可以寫一隻script使用(需要自行修改<code>BASEDN</code>):
 
<syntaxhighlight lang="bash">
#!/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
</syntaxhighlight>
 
=== 查詢使用者 ===
一般情況下,不需要拉出密碼欄位時可以用anonymous的方式列出(不指定密碼相關指令時會自動變成anonymous行為),像是這樣:
 
<syntaxhighlight lang="shell-session">
$ ldapsearch -x 'uid=gslin'
</syntaxhighlight>
 
如果有需要拉出密碼欄位需求時,會需要登入(這邊有透過<code>~/.ldaprc</code>減少輸入的參數):
 
<syntaxhighlight lang="shell-session">
$ ldapsearch -x -y ~/passwd-Manager.txt 'uid=gslin'
</syntaxhighlight>
 
=== 刪除使用者 ===
刪除會透過有寫入權限(刪除權限)的帳號來處理,會需要指定<code>dn</code>欄位,也就是完整的名稱:
 
<syntaxhighlight lang="shell-session">
$ ldapdelete -x -y ~/passwd-Manager.txt 'uid=gslin,ou=People,dc=example,dc=com'
</syntaxhighlight>
 
=== 修改使用者密碼 ===
在忘記密碼時可以用,這需要管理員權限才能改:
 
<syntaxhighlight lang="shell-session">
$ ldappasswd -x -D 'cn=Manager,dc=example,dc=com' -W -S 'uid=gslin,ou=People,dc=example,dc=com'
</syntaxhighlight>


== 相關連結 ==
== 相關連結 ==
* [[OpenLDAP]]
* [[OpenLDAP]]

於 2018年4月16日 (一) 07:24 的最新修訂

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'

相關連結