A. linux裡面如何查看是否安裝ldap服務
先查看一下,系統有沒有該命令。
1
which ldapsearch
如果沒有的話安裝一個
1
2
yum list "*ldap*"
yum install openldap-clients
再查看一下,是否安裝好了。
1
2
rpm -ql openldap-clients
which ldapsearch
B. 有人用python寫過ldap的登錄和修改密碼嗎
你說的是AD域賬號吧?先安裝lpda3的庫
在cmd命令行下運行:
pin install ldap3
然後開始寫python腳本
fromldap3import*
user="CN=visitor02 ,OU=level1,DC=hello,DC=com,DC=cn" # 定義你要給誰改密碼
admin='xxxxxx' #xxxx換成你域控的管理員賬號如helloadministrator, hello是域名
adminpwd = 'xxxx' #域控的管理員密碼
s=Server('10.10.xx.xx',get_info=ALL,use_ssl=True) #10.10.xx.xx換成你域控的IP地址,這條是定義域伺服器信息
c=Connection(s,user=admin,password=adminpwd,auto_bind=True) #登錄域伺服器
print(c.extend.microsoft.modify_password(user,"123456")) #這行就是改密碼。如果print出true,就是成功了。如果false,再在下面加一條
print(c.response) #會顯示為什麼失敗。
如果想了解更多的python ldap3庫,可以看這個鏈接網頁鏈接
C. windows系統怎麼安裝ldap
一、OpenLDAP安裝和配置
安裝還是比較簡單的,一直next就好。
這里記得把上面2個都選上,將LDAP注冊為系統的一個服務,默認安裝位置:C:\Program Files\OpenLDAP,
進入安裝目錄,編輯slapd.conf文件:
找到
ucdata-path ./ucdata
include ./schema/core.schema
在下面加入:(注意你的系統路徑,可能隨安裝位置不同而稍有差異)
include ./schema/core.schema (這里是和原來有的,如果加入的話就重復包含了,不能正常啟動了。應該除這句外都加入)
include ./schema/corba.schema
include ./schema/dyngroup.schema
include ./schema/java.schema
include ./schema/misc.schema
include ./schema/cosine.schema
include ./schema/nis.schema
include ./schema/inetorgperson.schema
include ./schema/openldap.schema
這個搞定以後,在同一文件後面的(大概65-66行,修改)
suffix 」o=anotherbug,c=com「 (直接拷貝過去引號會變成中文的。注意引號用英文的,會影響啟動)
rootdn 」cn=manager,o=anotherbug,c=com「
還有第70行的位置 : rootpw secret,這里要修改為加密後的密碼。
具體操作:
打開命令行,定位到安裝目錄下,輸入:slappasswd -h {MD5} –s 「替換為你想要設置的密碼,無引號」
將生成的MD5密文:{MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==填入原來secret位置。
OK至此配置已經搞定,可以測試一下服務了。打開命令行轉到安裝目錄下輸入:sldapd -d 1 注意命令是(slapd -d 1)
至此LDAP伺服器已經搭建並可以跑起來了.下面要來測試怎麼倒入.ldif格式的數據了。
二、建立條目(Entry) ,導入 ldif 後綴名文件
ldif:LDAP Data Interchange Format,基於文本。有兩種類型的 LDIF 文件:第一種是描述 Directory 條目數據的,第二種是描述更新條目的。我們主要看怎麼描述條目的。
打開編輯器(如Editplus,UltraEdit等),新建test.ldif內容如下:
dn: o=anotherbug,c=com
objectClass: dcObject
objectClass: organization
o: anotherbug
dc: com
dn: uid=mousepoato, o=anotherbug,c=com
uid: mousepoato
objectClass: inetOrgPerson
mail: [email protected]
userPassword: admin
labeledURI: http://anotherbug.com/blog
sn: Li
cn: test
注意ldif文件對格式的要求非常嚴格,屬性要以冒號和空格與值隔開,並且其他地方不允許有空格。否則當你導入ldif文件時,會提示出現「ldap_add: Invalid syntax (21)」等諸多錯誤,另外在我機器上測試,ldif對中文支持也還不好,比如我將最後的cn: test改為 cn: 滑鼠土豆,導入就會報錯。
寫完保存到安裝目錄下。在命令行輸入:
ldapadd -c -x -D 「cn=manager,o=anotherbug,c=com」 -w 「剛才替換secret出的密碼明文」 -f test.ldif
運行命令後結果如下:
注意我們在ldapadd後面加上了 」–c 「 參數,他會一直運行不會因錯誤而終止,比如對系統已經存在的entry命令會提示但不會中止。
三、LDAP查看工具
可能大家看了這么多感覺還是很抽象,我們需要一個GUI看看LDAP到底是個什麼東東。
這里推薦兩個瀏覽工具
1、LdapBrowser
這是個Java 開發的 LDAP Browser/Editor 工具,不但跨平台(Windows, Unix-like),而且功能非常完整,速度又快。運行起來的界面時這個樣子的。
2、Softrra LDAP Administrator 2009
這是一個比較強大和專業的客戶端,涵蓋了大多數企業的LDAP服務類型。
一直下一步安裝成功後,它的配置也是比較簡單的:
新建一個profile,命名為Local_LDAP
配置連接信息
這是完整配置好後的效果
四、通過 JNDI api操作LDAP例子
Javax裡面提供的JNDI為我們封裝好了對LDAP 的directory service進行存取查詢的函數,可以方便實用。
貼上我用JUnit4寫一個對LADP伺服器進行測試的代碼供參考:
private static Logger log = Logger.getLogger(TestLdapOper.class);
DirContext context = null;
TestLdap tldap = null;
@Before
public void init() throws NamingException {
tldap = new TestLdap();
context = tldap.getContext();// 獲取context
}
@Test
@Ignore
public void testInsert() throws NamingException {
tldap.addEntry(context, 「uid=IBM,o=anotherbug,c=com」);
}
@SuppressWarnings(「unchecked」)
@Test
public void testGetAttributes() throws NamingException {
List attNameList = new ArrayList();
attNameList.add(「o」);
attNameList.add(「dc」);
attNameList.add(「objectClass」);
Map map = JNDIUitl.getAttributes(context, 「o=anotherbug,c=com」, attNameList);
Iterator keyValuePairs = map.entrySet().iterator();
for (int i = 0; i < map.size(); i++) {
Map.Entry entry = (Map.Entry) keyValuePairs.next();
Object key = entry.getKey();
Object value = entry.getValue();
log.info(key + 「==key」);
log.info(value + 「–value」);
}
}
@SuppressWarnings(「unchecked」)
@Test
public void testGetAttriValues() throws NamingException {
assertEquals(「anotherbug.com」, JNDIUitl.getAttributeValues(context, 「o=anotherbug,c=com」, 「dc」).get(0) + 「」);
List lst = new ArrayList();
lst = JNDIUitl.getAttributeValues(context, 「o=anotherbug,c=com」, 「objectClass」);
assertEquals(「organization」, lst.get(1) + 「」);
for (int i = 0; i < lst.size(); i++) {
log.info(lst.get(i));
log.info(ReflectionToStringBuilder.toString(lst.get(i)).toString());
}
}
@SuppressWarnings(「unchecked」)
@Test
public void testSearchContext() throws NamingException {
List list = JNDIUitl.searchContextSub(context, 「o=anotherbug,c=com」, 「(objectClass=*)」);
for (int i = 0; i < list.size(); i++) {
log.info(list.get(i));
}
}
@After
public void destroy() throws NamingException {
context.close();
}
D. 配置linux主機使用ldap用戶
目的:linux系統默認使用自己的Unix用戶,我們有時需要多台主機都使用同一個用戶,這樣的還用戶管理就比較麻煩。比較簡單的解決方法是配置這些linux主機都使用同一個ldap的用戶,這樣只需要在ldap中進行用戶更改即可,不再需要所有主機都進行更改了。
配置客戶數正判端:
a、安裝ldap客戶端:
yum install nss-pam-ldapd pam_ldap -y
b、圖形化配置:
LANG=C authconfig-tui
或者用命令修改:
authconfig --enablemkhomedir --disableldaptls --enableldap --enableldapauth --ldapserver=ldap://110.1.236.51 --ldapbasedn='dc=yinkp,dc=com' --update
cat /etc/sysconfig/authconfig |grep yes
1、增加/etc/openldap/ldap.conf
2、修改 /etc/nsswitch.conf中sss為ldap
3、 修改/etc/pam.d/system-auth,/etc/pam.d/password-auth
sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/system-auth
sed -i 's/pam_sss.so/pam_ldap.so/g' /etc/pam.d/password-auth
4、修改sssd配置文件:
vi /etc/sssd/sssd.conf
5、修改nslcd配置文件:
vi /etc/nslcd.conf
6、重啟nslcd/sssd
service nslcd restart
service sssd restart
驗證:
切換為系統薯改中沒有,ldap中有的用戶。如果OK,則成功。
ldapsearch -x -b 'ou=people,dc=yinkp,dc=com'
批量修改主機使用ldap用戶:
分發上面已經配置好的主機清猛上的文件到其它linux主機
註:如果沒有分發腳本,也可以一個一個文件scp
deploy.sh /etc/sysconfig/authconfig /etc/sysconfig/ all
deploy.sh /etc/openldap/ldap.conf /etc/openldap/ all
deploy.sh /etc/nsswitch.conf /etc/ all
deploy.sh /etc/pam.d/system-auth /etc/pam.d/ all
deploy.sh /etc/sssd/sssd.conf /etc/sssd/ all
deploy.sh /etc/nslcd.conf /etc/ all
重啟nslcd/sssd服務
runRemoteCmd.sh "/bin/systemctl restart nslcd.service && /bin/systemctl restart sssd.service" ldap_client