LDAP:修订间差异
跳到导航
跳到搜索
此页面具有访问限制。如果您看见此消息,则说明您没有权限访问此页面。
无编辑摘要 |
|||
(未显示同一用户的6个中间版本) | |||
第1行: | 第1行: | ||
'''LDAP'''是'''Lightweight Directory Access Protocol'''的 | '''LDAP''' 指的 是'''Lightweight Directory Access Protocol''' ,是一個開放標準。經常被用在管理使用者帳號及權限。 | ||
== 使用者操作 == | |||
使用者最常用 的 操作應該就是修改密碼: | |||
<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'