OpenLDAP集中管理使用者帳號學習筆記 (轉)
OpenLDAP集中管理使用者帳號學習筆記
本文使用Redhat Enterprice Linux 4.0版本測試,併成功實現。
經過2年多的測試和使用,在CentOS 5.x/Cent OS4.x/RHEL4.x/RHEL 5.x都沒有任何問題。
只是軟體包的版本有所所區別而已;伺服器端配置完全一樣,客戶端配置僅命令不同而已。
openldap為系統自帶工具,可以在安裝時選擇相應軟體包安裝或用rpm命令安裝。
需要的包為(RHEL4):
openldap-2.2.13-2:包含 OpenLDAP 配置檔案、庫和文件
openldap-servers-2.2.13-2:包含 slapd 和 slurpd 伺服器、遷移指令碼和相關檔案
openldap-clients-2.2.13-2:包含客戶機程式,用來訪問和修改 OpenLDAP 目錄
啟動:
#service ldap start
或
#/etc/init.d/ldap start
或
#/etc/rc.d/init.d/ldap start
將start引數改為restart或stop來重啟或停止ldap服務。
設定在開機時自動啟動:
#chkconfig ldap on
作為練習,可將系統的防火牆關閉;至於實際應用需開啟的埠請自行參考iptables相關文件。關閉iptables防火牆:
#service iptables stop
或
#/etc/init.d/iptables stop
下面配置ldap。
一、配置ldap伺服器的賬戶修改:
在配置檔案/etc/openldap/slapd.conf中加入以下行:
loglevel 296
local4.debug /var/log/slapd.log
#上面兩行定義了ldap伺服器執行的日誌
access to attrs=shadowLastChange,userPassword
by self write
by * auth
access to *
by * read
#access 行定義了誰可以訪問目錄中的內容。我們希望使用者可以修改自己的密碼,並更新自己的 shadow 資訊來反映密碼的變化。希望身份驗證程式能夠檢索使用者的密碼。還希望使用者能夠讀取所有其他條目。注意密碼條目是不可讀的,shadow 屬性的惟一用處就是管理密碼的過期問題。
二、配置ldap伺服器的資料庫:
修改檔案/etc/openldap/slapd.conf的以下行:
database bdb
suffix "dc=my-domain,dc=com"
rootdn "cn=Manager,dc=my-domain,dc=com"
把my-domain改為你的“域名”,本文中並不需要真正的域名,只是ldap的一個容器,但為了ldap的其他服務,建議用你的真實域名。
這裡定義了ldap的資料庫和管理者。
這裡還需要一個管理員密碼,加入下面這行(密碼111111):
rootpw {MD5}lueSGJZetyySpUndWjMBEg==
密碼可以用slappasswd命令生成,slappasswd -h {MD5}
OK,ldap伺服器配置完成了,可以重新啟動一下ldap伺服器了。
三、將使用者賬戶資訊新增到ldap資料庫
Redhat Enterprice Linux 4自帶了一組perl指令碼來轉換本地使用者的資訊。
相關工具也可以到http://www.padl.com/下載
這些指令碼預設位於/usr/share/openldap/migration/下
修改migrate_common.ph檔案,我們的目的來說,只需要修改命名字首的變數來使用條目的識別名就足夠了,如下所示:
$DEFAULT_BASE = "dc=my-domain,dc=com"
然後執行:
migrate_base.pl > base.ldif
這是建立根項,併為 Hosts、Networks、Group 和 People 等建立第一級的組織單元(OU)
編輯 base.ldif,刪除除下面之外的所有條目:
dn: dc=my-domain,dc=com
dc: my-domain
objectClass: top
objectClass: domain
dn: u=People,dc=my-domain,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: u=Group,dc=my-domain,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
執行:
grep ldapuser /etc/group > group.ldapuser.in
./migrate_group.pl group.ldapuser.in > group.ldapuser.ldif
匯出ldapuser組的資訊,以同樣方式到處其他組的資訊
執行:
grep ldapuser /etc/passwd > passwd.ldapuser.in
./migrate_passwd.pl passwd.ldapuser.in > passwd.ldapuser.ldif
可以複製passwd檔案為passwd.in後將passwd.in中系統自帶的使用者刪除後作為指令碼的輸入引數,這樣可以一次轉換所有使用者。不建議將系統自帶使用者匯入ldap,這樣做的好處是萬一在ldap認證出現問題的情況下不至於連root賬戶也不能登入。
做完賬戶資訊轉換後即可以匯入ldap資料了,執行:
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f base.ldif
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f group.ldif
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f passwd.ldif
這裡的group.ldif和passwd.ldif對應的你的組資訊和使用者資訊的檔案,注base.ldif必須最先匯入。
四、配置系統使用ldap認證系統使用者
使用authconfig命令配置:
注若使用RHEL5.x 或 Cent OS 5.x 則使用setup命令,然後選擇“Authentication Configuratio”
把以下選項選上:
Use LDAP
Use MD5 Passwords
Use Shadow Passwords
Use LDAP Authentication
Local authorization is sufficient(如果有此項)
選擇下一步:
請勿選擇使用TLS!
輸入ldap伺服器地址或主機名,若有一臺以上ldap伺服器則用空格隔開。
輸入base dn:dc=my-domain,dc=com(參考base.ldif檔案)
將passwd、shadow、以及group檔案備份後清除已經匯入的使用者資訊,再用id命令測試一下,確認使用者資訊正確。
OK!!大功告成!!
其他客戶機只需執行行本文第四步即可!
注1:若ldap伺服器使用主機名,客戶端必需能解析到該主機!
注2:新增新使用者可以先建立本地使用者再參照本文第四步操作,加入ldap後再刪除本地使用者。
注3:若使用者非資料庫高手,編輯使用者或組資訊請務必使用ldapmodify命令,本人曾使用ldapphpadmin修改ldap資料庫,結果,呵呵!!
注4:(2009-02-09)在RHEL 5.x和CentOS5.x 上執行啟動ldap服務時會報錯"bdb_db_open: Warning - No DB_CONFIG file found in directory /var/lib/ldap",該錯誤不影響ldap驗證服務;若一定要解決,執行以下命令即可:cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG ; chown ldap:ldap /var/lib/ldap/DB_CONFIG
更新2009-1-20
新增管理使用者帳號的指令碼:
文字寫了一個簡單的建立使用者帳號的指令碼方便帳號管理。
文中以中文和"#"開頭的是註釋和說明:
注,編輯指令碼時別忘了把“#!/bin/sh”放在指令碼檔案的首行!
#!/bin/sh
### Input the user account
if [ "$1" = "" ];then
printf "Please input the user account: "
read ans1
user=$ans1
echo "\n"
else
user=$1
fi
#提示使用者輸入使用者名稱賦值給變數user
### make sure the username is unique
existuser=` id $ans1 2> /dev/null `
while [ "$existuser" != "" ]
do
echo "user $user already exist!"
printf "Please input another username: "
read ans3
user=$ans3
existuser=` id $ans1 2> /dev/null `
echo ""
done
檢查輸入的使用者名稱是否唯一,如果已經存在則提示使用者再次輸入使用者名稱並賦值給變數user
### adding user
useradd -g group1 -d /NFS/user/$user -m $user
passwd $user
#在本地檔案裡新增使用者並設定使用者密碼,
#注1、這裡的group1是指定預設組的組名,請自行更改
#注2、這裡的/NFS/user/是從遠端主機上mount過來的,用於配合automount服務並統一使用者主目錄使用,請自行更改
#注3、-m選項是當指定的使用者主目錄不存在時自動建立該目錄,在大多數情況下這是預設選項,即不加該選項,系統會自動加上
sed -i "s/\/NFS\/user\/$user/\/home\/$user/g" /etc/passwd
cd /ldapsettings/
grep $user /etc/passwd > newuser.in
/usr/share/openldap/migration/migrate_passwd.pl newuser.in > newuser.ldif
ldapadd -x -D "cn=Manager,dc=dam,dc=com" -w 1234567 -f /ldapsettings/newuser.ldif
rm -f /ldapsettings/newuser.in
rm -f /ldapsettings/newuser.ldif
sed -i '/$user\:/d' /etc/passwd
sed -i '/$user\:/d' /etc/shadow
#修改使用者的home目錄,並將本地的帳號資訊匯入ldap資料庫,刪除臨時檔案,刪除本地使用者驗證資訊
更新2009-2-3
一直在網上找用ldap驗證samba的文章。很多,但是都需要加入域,配置很麻煩,而且,samba畢竟和windows的域有太大差別了!
下文的配置其實只是讓samba讀取ldap資料庫來代替讀取sampasswd檔案,僅此而已!
本文參考了下文,做了適當修改,並在CentOS 4.X 和CentOS 5.X 上測試成功:
使用openldap目錄服務進行samba使用者驗證 http://www.ringkee.com/note/opensource/samba.htm
samba可把使用者資訊存放到ldap目錄伺服器上,使用目錄伺服器上的使用者資料進行使用者驗證。這樣做的好處是:
1. 集中存放使用者資訊,多臺Samba伺服器可共用一套使用者資料。
2. 當使用者數量多時,採用ldap目錄伺服器可加快使用者驗證的速度。因為ldap目錄服務是專門為讀操作而優化的,搜尋資料的速度是非常快的。
3. 使用者可自由更改自已的密碼,而不用經過系統管理員,可大大減輕系統管理員的工作量。
一、配置ldap服務
要 openldap能認識samba的使用者資訊,我們需在openldap伺服器中匯入samba.schema。該檔案是不包含在openldap原始碼中的,我們可在samba原始碼目錄中的/examples/LDAP路徑中找到該檔案。把它拷貝到openldap的schema目錄。接著編輯 slapd.conf檔案,用include指令把samba.schema匯入openldap。如:
到這裡下載samba的原始碼包:http://us1.samba.org/samba/
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
#include /etc/openldap/schema/redhat/autofs.schema
include /etc/openldap/schema/samba.schema #匯入samba.schema檔案
# Allow LDAPv2 client connections. This is NOT the default.
allow bind_v2
重啟ldap服務,使配置生效。
[root@linux5 ~]# service ldap restart
Stopping slapd: [ OK ]
Checking configuration files for slapd: config file testing succeeded
Starting slapd: [ OK ]
二、配置samba服務
下來我們要配置samba伺服器了。開啟smb.conf檔案,新增以下內容:
# You may wish to use password encryption. Please read ENCRYPTION.txt,
# Win95.txt and WinNT.txt in the Samba documentation. Do not enable this
# option unless you have read those documents
security = user #如果原來不是user,請改成user,因為我原來用的是share
encrypt passwords = yes
; passdb backend = smbpasswd guest #取消smbpasswd驗證
ldap admin dn = "cn=Manager,dc=my-domain,dc=com" #指定管理員,請參考slapd.conf檔案
passdb backend = ldapsam:ldap://192.168.0.7 #指定使用者驗證的ldap目錄伺服器的IP地址或主機名
ldap user suffix = dc=samba,dc=my-domain,dc=com #使用者資訊存放的目錄路徑
ldap delete dn = no #不允許刪除dn
ldap suffix = dc=my-domain,dc=com #指定搜尋字尾
存檔退出,重啟smb服務。執行以下命令,把cn=Manager,dc=my-domain,dc=com管理員的密碼“123456”儲存到secrets.tdb檔案中,以便samba伺服器與openldap伺服器進行通訊。
[root@linux5 ~]# service smb restart
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
[root@linux5 ~]# smbpasswd -w 123456
Setting stored password for "cn=Manager,dc=my-domain,dc=com" in secrets.tdb #成功儲存的提示資訊
千萬注意!!這裡的密碼“123456”,就是slapd.conf檔案裡指定的管理員的密碼!
配置完成,使用smbpasswd命令就可把使用者資訊儲存到ldap目錄伺服器上了。
[root@linux5 ~]# smbpasswd -a dwang
New SMB password:
Retype new SMB password:
Added user dwang. #成功新增使用者
三、設定ldap服務來維護samba帳號
到此為止,使用ldap目錄伺服器進行Samba使用者驗證已配置完成。但現在還是要管理員在samba伺服器上使用smbpasswd命令為使用者維護密碼。從維護工作量和保密的角度出發,由使用者自已維護自已的密碼是一種最好的方法。具體設定方法是這樣的:
通過目錄伺服器的許可權管理,我們也可把test使用者密碼屬性設定成只有 dn是cn=dwang,dc=samba,dc=it,dc=com的使用者和目錄伺服器管理員才能修改。要達到該項果,請把以下ACL加入到 slapd.conf中。
access to attrs=sambaLMPassword
by dn="cn=Manager,dc=newavetech,dc=com" write
by anonymous auth
by self write
by * none
access to attrs=sambaNTPassword
by dn="cn=Manager,dc=newavetech,dc=com" write
by anonymous auth
by self write
by * none
重啟openldap伺服器使配置生效。
用smbpasswd命令就能修改使用者的密碼了,不過別忘了原始密碼,否則又得勞駕管理員了!
根據密碼複雜度要求,使用者自己設的密碼至少要有6位,以root許可權執行沒此要求。
(2009-02-11)
偶然發現了一款LDAP的管理工具LDAP Account Manager,主頁在:http://sourceforge.net/projects/lam
因為我使用的是CentOS 5.2,直接下載rpm包安裝:ldap-account-manager-2.5.0-0.fedora.1.noarch.rpm
安裝需求:LAM是用php編寫的,基於web管理。所以apache、php是不能少的,還需要個別的rpm包稍後介紹,只要你有CentOS的光碟就無需擔心。
一、安裝LAM
#rpm -ivh ldap-account-manager-2.5.0-0.fedora.1.noarch.rpm
安裝完後在資料夾/var/www/html/下會有一個lam資料夾。
#cd /var/www/html/lam/config
#cp cp config.cfg_sample config.cfg
#cp lam.conf_sample ldapserver1.conf
說明:
1、config.cfg是LAM的通用配置檔案
2、ldapserver1.conf是LAM的伺服器配置檔案,如果你有多臺ldap伺服器就需要多複製幾個檔案,例如:
#cp lam.conf_sample ldapserver2.conf
#cp lam.conf_sample ldapserver3.conf
#chown -R apache:apache /var/www/html/lam
這裡的ldapserver?檔名可任意,它就是你在使用LAM時看到的配置檔案,建議使用ldapserver的主機名。
二、配置LAM
用瀏覽器訪問LAM,在瀏覽器裡開啟http://lamserver/lam/
有可能出現如下提示:
##########################################
Your PHP has no LDAP support!
Please install the LDAP extension for PHP.
##########################################
##########################################
Please increase the "memory_limit" parameter in your php.ini to at least "64M".
Your current memory limit is 16M.
##########################################
上面的問題缺少了php-ldap包,在CentOS5.2裡,執行下面命令即可:
#rpm -ivh php-ldap-5.1.6-20.el5.i386.rpm
下面的問題是PHP記憶體限制的問題,修改PHP配置檔案即可,執行如下命令:
#sed -i '/memory_limit/s/.*/memory_limit = 64M/' /etc/php.ini
以上命令是將檔案/etc/php.ini中含有memory_limit的那行設定改為“memory_limit = 64M“,也可以用vi命令編輯。
安裝完rpm包和修改了配置檔案後重啟apache伺服器:
#service httpd restart
再次用瀏覽器訪問LAM,在瀏覽器裡開啟http://lamserver/lam/,一切正常。
在右上角選擇"LAM configuration"-->"Edit general settings",密碼是lam,進去後重新設定密碼;其他設定我沒作修改。
回到主頁,在右上角選擇"LAM configuration"-->"Edit server profiles";在下拉框裡選擇你複製的配置檔案,進入配置。
預設密碼為“lam“,接下來就是根據你的ldap伺服器的設定在修改你複製過的配置檔案,進去後別忘了修改密碼哦!配置完成。
下面是我認為有必要修改的一些選項:
################################
伺服器地址
樹狀結構字尾
使用者: 最小UID號
時區
組: 最小GID號
預設語言
合法使用者列表
編輯帳號型別:裡面的所有LDAP字尾
################################
三、使用LAM
在LAM主頁選擇你要維護的配置檔案,輸入密碼。開始體驗便捷的ldap帳號管理吧!
注:這裡的密碼不是上文修改過的LAM密碼,是在LDAP server上配置LDAP配置文件裡的管理員密碼哦!
(2009-03-06)
四、配置squid適用openldap驗證
squid可以使用LDAP目錄伺服器上的系統使用者資料進行使用者驗證。這樣做的好處是:
1. 集中存放使用者資訊,多臺squid伺服器可共用一套使用者資料。
2. 當使用者數量多時,採用ldap目錄伺服器可加快使用者驗證的速度。因為ldap目錄服務是專門為讀操作而優化的,搜尋資料的速度是非常快的。
3. 不再需要維護squid帳號檔案,只需要維護Linux系統帳號,可減少出錯機率和減少系統管理員的工作量。
為配置成功,先將squid配置成能使用password file進行驗證(網上文章太多了,而且很容易)
配置完以後,squid檔案必定包含類似下面2行語句,將以下內容:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/squid.passwd
acl idtnw_aclauth proxy_auth REQUIRED
替換成類似下面的語句:
auth_param basic program /usr/lib/squid/squid_ldap_auth -b "dc=newavetech,dc=com" -D "cn=Manager,dc=newavetech,dc=com" -w "123456" -f "uid=%s" -h ldapserver1.newavetech.com
auth_param basic children 5
auth_param basic realm Your Organisation Name
auth_param basic credentialsttl 5 minutes
acl idtnw_aclauth proxy_auth REQUIRED
說明:
-b "dc=newavetech,dc=com" 該選項根據你的系統裡的/etc/openldap/slapd.conf檔案修改
-D "cn=Manager,dc=newavetech,dc=com" 該選項根據你的系統裡的/etc/openldap/slapd.conf檔案修改
-w "123456" 該選項根據你的系統裡的/etc/openldap/slapd.conf檔案中“rootpw {MD5}VWjZk4C6Geu9wuO2vN+eVQ==”指定的密碼
-h ldapserver1.newavetech.com 該選項指定了ldap伺服器
重啟squid伺服器即可,linux系統使用者和密碼就和squid是一致的了。
(2009-03-06)
怎樣讓系統自動建立使用者的home目錄
假設系統管理員已經掌握PAM配置檔案的使用,並且瞭解在伺服器所在的環境當中,伺服器認證配置需要哪些其他型別的使用者資訊和使用者認證。以下提供的例子是基於一個使用ldap驗證的使用者,作為使用者資訊或者使用者認證的系統。
以下步驟包括手工編輯伺服器主要PAM認證配置檔案/etc/pam.d/system-auth.在做任何改變之前,你應當備份一下/etc/pam.d /system-auth,並且保持一個root登陸視窗,以防止因輸入錯誤或者配置錯誤時可以恢復到原先的system-auth檔案。記住,執行認證配置工具,例如authconfig-tui,會有可能造成手工在system-auth做的更改丟失。所以在更改了system-auth檔案並且測試成功後應當做一個更改後的備份。
假設ldap服務已經正確配置且在伺服器上正常驗證使用者帳號。在/etc/pam.d/system-auth檔案的session部分新增一行,以使用PAM模組pam_mkhomedir.so 。如果使用者認證成功,使用者的home目錄沒有存在,這個模組將自動建立使用者的home目錄。
session required pam_mkhomedir.so skel=/etc/skel umask=0077
將上面內容加到system-auth檔案的session部分的。skel=/etc/skel選項告訴pam_mkhomedir.so拷貝/etc /skel下的檔案到使用者的home目錄,就像作業系統普通使用者一樣。umask=0077選項讓pam_mkhomedir.so以700許可權建立 home目錄,就像作業系統普通使用者一樣。
注意:建立使用者home目錄的父目錄必須存在,否則pam_mkhomedir.so將不能建立使用者home目錄。
注意:在測試中將看到,如果使用者通過FTP第一次登入系統,他們的home目錄可能不會被建立。如果第一次登入出現問題,請使用其他的登入方式。
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Kernel 2.6.18-128.ELsmp on an i686
su - dwang
Creating directory '/homes/dwang'.
Creating directory '/homes/dwang/.mozilla'.
Creating directory '/homes/dwang/.mozilla/plugins'.
Creating directory '/homes/dwang/.mozilla/extensions'.
如果域使用者通過X服務的prefdm第一次登入系統, 它的home目錄也會被pam_mkhomedir.so成功建立。
經過2年多的測試和使用,在CentOS 5.x/Cent OS4.x/RHEL4.x/RHEL 5.x都沒有任何問題。
只是軟體包的版本有所所區別而已;伺服器端配置完全一樣,客戶端配置僅命令不同而已。
openldap為系統自帶工具,可以在安裝時選擇相應軟體包安裝或用rpm命令安裝。
需要的包為(RHEL4):
openldap-2.2.13-2:包含 OpenLDAP 配置檔案、庫和文件
openldap-servers-2.2.13-2:包含 slapd 和 slurpd 伺服器、遷移指令碼和相關檔案
openldap-clients-2.2.13-2:包含客戶機程式,用來訪問和修改 OpenLDAP 目錄
啟動:
#service ldap start
或
#/etc/init.d/ldap start
或
#/etc/rc.d/init.d/ldap start
將start引數改為restart或stop來重啟或停止ldap服務。
設定在開機時自動啟動:
#chkconfig ldap on
作為練習,可將系統的防火牆關閉;至於實際應用需開啟的埠請自行參考iptables相關文件。關閉iptables防火牆:
#service iptables stop
或
#/etc/init.d/iptables stop
下面配置ldap。
一、配置ldap伺服器的賬戶修改:
在配置檔案/etc/openldap/slapd.conf中加入以下行:
loglevel 296
local4.debug /var/log/slapd.log
#上面兩行定義了ldap伺服器執行的日誌
access to attrs=shadowLastChange,userPassword
by self write
by * auth
access to *
by * read
#access 行定義了誰可以訪問目錄中的內容。我們希望使用者可以修改自己的密碼,並更新自己的 shadow 資訊來反映密碼的變化。希望身份驗證程式能夠檢索使用者的密碼。還希望使用者能夠讀取所有其他條目。注意密碼條目是不可讀的,shadow 屬性的惟一用處就是管理密碼的過期問題。
二、配置ldap伺服器的資料庫:
修改檔案/etc/openldap/slapd.conf的以下行:
database bdb
suffix "dc=my-domain,dc=com"
rootdn "cn=Manager,dc=my-domain,dc=com"
把my-domain改為你的“域名”,本文中並不需要真正的域名,只是ldap的一個容器,但為了ldap的其他服務,建議用你的真實域名。
這裡定義了ldap的資料庫和管理者。
這裡還需要一個管理員密碼,加入下面這行(密碼111111):
rootpw {MD5}lueSGJZetyySpUndWjMBEg==
密碼可以用slappasswd命令生成,slappasswd -h {MD5}
OK,ldap伺服器配置完成了,可以重新啟動一下ldap伺服器了。
三、將使用者賬戶資訊新增到ldap資料庫
Redhat Enterprice Linux 4自帶了一組perl指令碼來轉換本地使用者的資訊。
相關工具也可以到http://www.padl.com/下載
這些指令碼預設位於/usr/share/openldap/migration/下
修改migrate_common.ph檔案,我們的目的來說,只需要修改命名字首的變數來使用條目的識別名就足夠了,如下所示:
$DEFAULT_BASE = "dc=my-domain,dc=com"
然後執行:
migrate_base.pl > base.ldif
這是建立根項,併為 Hosts、Networks、Group 和 People 等建立第一級的組織單元(OU)
編輯 base.ldif,刪除除下面之外的所有條目:
dn: dc=my-domain,dc=com
dc: my-domain
objectClass: top
objectClass: domain
dn: u=People,dc=my-domain,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: u=Group,dc=my-domain,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
執行:
grep ldapuser /etc/group > group.ldapuser.in
./migrate_group.pl group.ldapuser.in > group.ldapuser.ldif
匯出ldapuser組的資訊,以同樣方式到處其他組的資訊
執行:
grep ldapuser /etc/passwd > passwd.ldapuser.in
./migrate_passwd.pl passwd.ldapuser.in > passwd.ldapuser.ldif
可以複製passwd檔案為passwd.in後將passwd.in中系統自帶的使用者刪除後作為指令碼的輸入引數,這樣可以一次轉換所有使用者。不建議將系統自帶使用者匯入ldap,這樣做的好處是萬一在ldap認證出現問題的情況下不至於連root賬戶也不能登入。
做完賬戶資訊轉換後即可以匯入ldap資料了,執行:
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f base.ldif
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f group.ldif
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f passwd.ldif
這裡的group.ldif和passwd.ldif對應的你的組資訊和使用者資訊的檔案,注base.ldif必須最先匯入。
四、配置系統使用ldap認證系統使用者
使用authconfig命令配置:
注若使用RHEL5.x 或 Cent OS 5.x 則使用setup命令,然後選擇“Authentication Configuratio”
把以下選項選上:
Use LDAP
Use MD5 Passwords
Use Shadow Passwords
Use LDAP Authentication
Local authorization is sufficient(如果有此項)
選擇下一步:
請勿選擇使用TLS!
輸入ldap伺服器地址或主機名,若有一臺以上ldap伺服器則用空格隔開。
輸入base dn:dc=my-domain,dc=com(參考base.ldif檔案)
將passwd、shadow、以及group檔案備份後清除已經匯入的使用者資訊,再用id命令測試一下,確認使用者資訊正確。
OK!!大功告成!!
其他客戶機只需執行行本文第四步即可!
注1:若ldap伺服器使用主機名,客戶端必需能解析到該主機!
注2:新增新使用者可以先建立本地使用者再參照本文第四步操作,加入ldap後再刪除本地使用者。
注3:若使用者非資料庫高手,編輯使用者或組資訊請務必使用ldapmodify命令,本人曾使用ldapphpadmin修改ldap資料庫,結果,呵呵!!
注4:(2009-02-09)在RHEL 5.x和CentOS5.x 上執行啟動ldap服務時會報錯"bdb_db_open: Warning - No DB_CONFIG file found in directory /var/lib/ldap",該錯誤不影響ldap驗證服務;若一定要解決,執行以下命令即可:cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG ; chown ldap:ldap /var/lib/ldap/DB_CONFIG
更新2009-1-20
新增管理使用者帳號的指令碼:
文字寫了一個簡單的建立使用者帳號的指令碼方便帳號管理。
文中以中文和"#"開頭的是註釋和說明:
注,編輯指令碼時別忘了把“#!/bin/sh”放在指令碼檔案的首行!
#!/bin/sh
### Input the user account
if [ "$1" = "" ];then
printf "Please input the user account: "
read ans1
user=$ans1
echo "\n"
else
user=$1
fi
#提示使用者輸入使用者名稱賦值給變數user
### make sure the username is unique
existuser=` id $ans1 2> /dev/null `
while [ "$existuser" != "" ]
do
echo "user $user already exist!"
printf "Please input another username: "
read ans3
user=$ans3
existuser=` id $ans1 2> /dev/null `
echo ""
done
檢查輸入的使用者名稱是否唯一,如果已經存在則提示使用者再次輸入使用者名稱並賦值給變數user
### adding user
useradd -g group1 -d /NFS/user/$user -m $user
passwd $user
#在本地檔案裡新增使用者並設定使用者密碼,
#注1、這裡的group1是指定預設組的組名,請自行更改
#注2、這裡的/NFS/user/是從遠端主機上mount過來的,用於配合automount服務並統一使用者主目錄使用,請自行更改
#注3、-m選項是當指定的使用者主目錄不存在時自動建立該目錄,在大多數情況下這是預設選項,即不加該選項,系統會自動加上
sed -i "s/\/NFS\/user\/$user/\/home\/$user/g" /etc/passwd
cd /ldapsettings/
grep $user /etc/passwd > newuser.in
/usr/share/openldap/migration/migrate_passwd.pl newuser.in > newuser.ldif
ldapadd -x -D "cn=Manager,dc=dam,dc=com" -w 1234567 -f /ldapsettings/newuser.ldif
rm -f /ldapsettings/newuser.in
rm -f /ldapsettings/newuser.ldif
sed -i '/$user\:/d' /etc/passwd
sed -i '/$user\:/d' /etc/shadow
#修改使用者的home目錄,並將本地的帳號資訊匯入ldap資料庫,刪除臨時檔案,刪除本地使用者驗證資訊
更新2009-2-3
一直在網上找用ldap驗證samba的文章。很多,但是都需要加入域,配置很麻煩,而且,samba畢竟和windows的域有太大差別了!
下文的配置其實只是讓samba讀取ldap資料庫來代替讀取sampasswd檔案,僅此而已!
本文參考了下文,做了適當修改,並在CentOS 4.X 和CentOS 5.X 上測試成功:
使用openldap目錄服務進行samba使用者驗證 http://www.ringkee.com/note/opensource/samba.htm
samba可把使用者資訊存放到ldap目錄伺服器上,使用目錄伺服器上的使用者資料進行使用者驗證。這樣做的好處是:
1. 集中存放使用者資訊,多臺Samba伺服器可共用一套使用者資料。
2. 當使用者數量多時,採用ldap目錄伺服器可加快使用者驗證的速度。因為ldap目錄服務是專門為讀操作而優化的,搜尋資料的速度是非常快的。
3. 使用者可自由更改自已的密碼,而不用經過系統管理員,可大大減輕系統管理員的工作量。
一、配置ldap服務
要 openldap能認識samba的使用者資訊,我們需在openldap伺服器中匯入samba.schema。該檔案是不包含在openldap原始碼中的,我們可在samba原始碼目錄中的/examples/LDAP路徑中找到該檔案。把它拷貝到openldap的schema目錄。接著編輯 slapd.conf檔案,用include指令把samba.schema匯入openldap。如:
到這裡下載samba的原始碼包:http://us1.samba.org/samba/
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
#include /etc/openldap/schema/redhat/autofs.schema
include /etc/openldap/schema/samba.schema #匯入samba.schema檔案
# Allow LDAPv2 client connections. This is NOT the default.
allow bind_v2
重啟ldap服務,使配置生效。
[root@linux5 ~]# service ldap restart
Stopping slapd: [ OK ]
Checking configuration files for slapd: config file testing succeeded
Starting slapd: [ OK ]
二、配置samba服務
下來我們要配置samba伺服器了。開啟smb.conf檔案,新增以下內容:
# You may wish to use password encryption. Please read ENCRYPTION.txt,
# Win95.txt and WinNT.txt in the Samba documentation. Do not enable this
# option unless you have read those documents
security = user #如果原來不是user,請改成user,因為我原來用的是share
encrypt passwords = yes
; passdb backend = smbpasswd guest #取消smbpasswd驗證
ldap admin dn = "cn=Manager,dc=my-domain,dc=com" #指定管理員,請參考slapd.conf檔案
passdb backend = ldapsam:ldap://192.168.0.7 #指定使用者驗證的ldap目錄伺服器的IP地址或主機名
ldap user suffix = dc=samba,dc=my-domain,dc=com #使用者資訊存放的目錄路徑
ldap delete dn = no #不允許刪除dn
ldap suffix = dc=my-domain,dc=com #指定搜尋字尾
存檔退出,重啟smb服務。執行以下命令,把cn=Manager,dc=my-domain,dc=com管理員的密碼“123456”儲存到secrets.tdb檔案中,以便samba伺服器與openldap伺服器進行通訊。
[root@linux5 ~]# service smb restart
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
[root@linux5 ~]# smbpasswd -w 123456
Setting stored password for "cn=Manager,dc=my-domain,dc=com" in secrets.tdb #成功儲存的提示資訊
千萬注意!!這裡的密碼“123456”,就是slapd.conf檔案裡指定的管理員的密碼!
配置完成,使用smbpasswd命令就可把使用者資訊儲存到ldap目錄伺服器上了。
[root@linux5 ~]# smbpasswd -a dwang
New SMB password:
Retype new SMB password:
Added user dwang. #成功新增使用者
三、設定ldap服務來維護samba帳號
到此為止,使用ldap目錄伺服器進行Samba使用者驗證已配置完成。但現在還是要管理員在samba伺服器上使用smbpasswd命令為使用者維護密碼。從維護工作量和保密的角度出發,由使用者自已維護自已的密碼是一種最好的方法。具體設定方法是這樣的:
通過目錄伺服器的許可權管理,我們也可把test使用者密碼屬性設定成只有 dn是cn=dwang,dc=samba,dc=it,dc=com的使用者和目錄伺服器管理員才能修改。要達到該項果,請把以下ACL加入到 slapd.conf中。
access to attrs=sambaLMPassword
by dn="cn=Manager,dc=newavetech,dc=com" write
by anonymous auth
by self write
by * none
access to attrs=sambaNTPassword
by dn="cn=Manager,dc=newavetech,dc=com" write
by anonymous auth
by self write
by * none
重啟openldap伺服器使配置生效。
用smbpasswd命令就能修改使用者的密碼了,不過別忘了原始密碼,否則又得勞駕管理員了!
根據密碼複雜度要求,使用者自己設的密碼至少要有6位,以root許可權執行沒此要求。
(2009-02-11)
偶然發現了一款LDAP的管理工具LDAP Account Manager,主頁在:http://sourceforge.net/projects/lam
因為我使用的是CentOS 5.2,直接下載rpm包安裝:ldap-account-manager-2.5.0-0.fedora.1.noarch.rpm
安裝需求:LAM是用php編寫的,基於web管理。所以apache、php是不能少的,還需要個別的rpm包稍後介紹,只要你有CentOS的光碟就無需擔心。
一、安裝LAM
#rpm -ivh ldap-account-manager-2.5.0-0.fedora.1.noarch.rpm
安裝完後在資料夾/var/www/html/下會有一個lam資料夾。
#cd /var/www/html/lam/config
#cp cp config.cfg_sample config.cfg
#cp lam.conf_sample ldapserver1.conf
說明:
1、config.cfg是LAM的通用配置檔案
2、ldapserver1.conf是LAM的伺服器配置檔案,如果你有多臺ldap伺服器就需要多複製幾個檔案,例如:
#cp lam.conf_sample ldapserver2.conf
#cp lam.conf_sample ldapserver3.conf
#chown -R apache:apache /var/www/html/lam
這裡的ldapserver?檔名可任意,它就是你在使用LAM時看到的配置檔案,建議使用ldapserver的主機名。
二、配置LAM
用瀏覽器訪問LAM,在瀏覽器裡開啟http://lamserver/lam/
有可能出現如下提示:
##########################################
Your PHP has no LDAP support!
Please install the LDAP extension for PHP.
##########################################
##########################################
Please increase the "memory_limit" parameter in your php.ini to at least "64M".
Your current memory limit is 16M.
##########################################
上面的問題缺少了php-ldap包,在CentOS5.2裡,執行下面命令即可:
#rpm -ivh php-ldap-5.1.6-20.el5.i386.rpm
下面的問題是PHP記憶體限制的問題,修改PHP配置檔案即可,執行如下命令:
#sed -i '/memory_limit/s/.*/memory_limit = 64M/' /etc/php.ini
以上命令是將檔案/etc/php.ini中含有memory_limit的那行設定改為“memory_limit = 64M“,也可以用vi命令編輯。
安裝完rpm包和修改了配置檔案後重啟apache伺服器:
#service httpd restart
再次用瀏覽器訪問LAM,在瀏覽器裡開啟http://lamserver/lam/,一切正常。
在右上角選擇"LAM configuration"-->"Edit general settings",密碼是lam,進去後重新設定密碼;其他設定我沒作修改。
回到主頁,在右上角選擇"LAM configuration"-->"Edit server profiles";在下拉框裡選擇你複製的配置檔案,進入配置。
預設密碼為“lam“,接下來就是根據你的ldap伺服器的設定在修改你複製過的配置檔案,進去後別忘了修改密碼哦!配置完成。
下面是我認為有必要修改的一些選項:
################################
伺服器地址
樹狀結構字尾
使用者: 最小UID號
時區
組: 最小GID號
預設語言
合法使用者列表
編輯帳號型別:裡面的所有LDAP字尾
################################
三、使用LAM
在LAM主頁選擇你要維護的配置檔案,輸入密碼。開始體驗便捷的ldap帳號管理吧!
注:這裡的密碼不是上文修改過的LAM密碼,是在LDAP server上配置LDAP配置文件裡的管理員密碼哦!
(2009-03-06)
四、配置squid適用openldap驗證
squid可以使用LDAP目錄伺服器上的系統使用者資料進行使用者驗證。這樣做的好處是:
1. 集中存放使用者資訊,多臺squid伺服器可共用一套使用者資料。
2. 當使用者數量多時,採用ldap目錄伺服器可加快使用者驗證的速度。因為ldap目錄服務是專門為讀操作而優化的,搜尋資料的速度是非常快的。
3. 不再需要維護squid帳號檔案,只需要維護Linux系統帳號,可減少出錯機率和減少系統管理員的工作量。
為配置成功,先將squid配置成能使用password file進行驗證(網上文章太多了,而且很容易)
配置完以後,squid檔案必定包含類似下面2行語句,將以下內容:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/squid.passwd
acl idtnw_aclauth proxy_auth REQUIRED
替換成類似下面的語句:
auth_param basic program /usr/lib/squid/squid_ldap_auth -b "dc=newavetech,dc=com" -D "cn=Manager,dc=newavetech,dc=com" -w "123456" -f "uid=%s" -h ldapserver1.newavetech.com
auth_param basic children 5
auth_param basic realm Your Organisation Name
auth_param basic credentialsttl 5 minutes
acl idtnw_aclauth proxy_auth REQUIRED
說明:
-b "dc=newavetech,dc=com" 該選項根據你的系統裡的/etc/openldap/slapd.conf檔案修改
-D "cn=Manager,dc=newavetech,dc=com" 該選項根據你的系統裡的/etc/openldap/slapd.conf檔案修改
-w "123456" 該選項根據你的系統裡的/etc/openldap/slapd.conf檔案中“rootpw {MD5}VWjZk4C6Geu9wuO2vN+eVQ==”指定的密碼
-h ldapserver1.newavetech.com 該選項指定了ldap伺服器
重啟squid伺服器即可,linux系統使用者和密碼就和squid是一致的了。
(2009-03-06)
怎樣讓系統自動建立使用者的home目錄
假設系統管理員已經掌握PAM配置檔案的使用,並且瞭解在伺服器所在的環境當中,伺服器認證配置需要哪些其他型別的使用者資訊和使用者認證。以下提供的例子是基於一個使用ldap驗證的使用者,作為使用者資訊或者使用者認證的系統。
以下步驟包括手工編輯伺服器主要PAM認證配置檔案/etc/pam.d/system-auth.在做任何改變之前,你應當備份一下/etc/pam.d /system-auth,並且保持一個root登陸視窗,以防止因輸入錯誤或者配置錯誤時可以恢復到原先的system-auth檔案。記住,執行認證配置工具,例如authconfig-tui,會有可能造成手工在system-auth做的更改丟失。所以在更改了system-auth檔案並且測試成功後應當做一個更改後的備份。
假設ldap服務已經正確配置且在伺服器上正常驗證使用者帳號。在/etc/pam.d/system-auth檔案的session部分新增一行,以使用PAM模組pam_mkhomedir.so 。如果使用者認證成功,使用者的home目錄沒有存在,這個模組將自動建立使用者的home目錄。
session required pam_mkhomedir.so skel=/etc/skel umask=0077
將上面內容加到system-auth檔案的session部分的。skel=/etc/skel選項告訴pam_mkhomedir.so拷貝/etc /skel下的檔案到使用者的home目錄,就像作業系統普通使用者一樣。umask=0077選項讓pam_mkhomedir.so以700許可權建立 home目錄,就像作業系統普通使用者一樣。
注意:建立使用者home目錄的父目錄必須存在,否則pam_mkhomedir.so將不能建立使用者home目錄。
注意:在測試中將看到,如果使用者通過FTP第一次登入系統,他們的home目錄可能不會被建立。如果第一次登入出現問題,請使用其他的登入方式。
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Kernel 2.6.18-128.ELsmp on an i686
su - dwang
Creating directory '/homes/dwang'.
Creating directory '/homes/dwang/.mozilla'.
Creating directory '/homes/dwang/.mozilla/plugins'.
Creating directory '/homes/dwang/.mozilla/extensions'.
如果域使用者通過X服務的prefdm第一次登入系統, 它的home目錄也會被pam_mkhomedir.so成功建立。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23757700/viewspace-714190/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 華為帳號服務學習筆記(一):什麼是HMS,什麼是華為帳號服務筆記
- 三分鐘上手openldap帳號系統LDA
- PMP學習筆記-溝通管理(轉)筆記
- 華為帳號服務學習筆記(二):OAuth2.0協議詳解筆記OAuth協議
- 華為帳號服務學習筆記(四):Authorization Code模式服務端開發筆記模式服務端
- 華為帳號服務學習筆記(五):OpenID Connect協議詳解筆記協議
- 磁碟管理--學習筆記筆記
- mysql用命令增加管理帳號的方法(轉)MySql
- sed學習筆記(轉)筆記
- gurb學習筆記(轉)筆記
- ANT學習筆記 (轉)筆記
- GRUB學習筆記(轉)筆記
- TreeView學習筆記 (轉)View筆記
- Oracle 帳號基本管理 收藏Oracle
- 忘記後臺管理員帳號怎麼辦?
- ctf學習筆記[轉載]筆記
- SAP BASIS學習筆記(轉)筆記
- PE學習筆記(一) (轉)筆記
- Linux 學習筆記--程式管理Linux筆記
- 男士形象管理-學習筆記筆記
- Vue學習筆記(十一):路由管理Vue筆記路由
- ASM學習筆記_磁碟的管理ASM筆記
- Golang學習筆記(1):包管理Golang筆記
- CentOS7學習筆記(六) 使用者許可權管理CentOS筆記
- 公用查詢帳號的管理
- JSP標記學習筆記 (轉)JS筆記
- 學習筆記:勒讓德(Legendre)符號筆記符號
- Linux 管理員手冊(7)--管理使用者帳戶(轉)Linux
- uc/os-iii學習筆記-資源管理(中斷、訊號、訊號量、互斥訊號量)筆記
- Linux 學習筆記--使用者及檔案許可權管理Linux筆記
- repuest轉發學習筆記一筆記
- C#學習筆記(一) (轉)C#筆記
- 我的Hook學習筆記 (轉)Hook筆記
- Microsoft Agent 學習筆記 (一) (轉)ROS筆記
- 我的COM學習筆記 (轉)筆記
- APT HOWTO 學習筆記(轉)APT筆記
- 學習筆記:debfoster & deborphan(轉)筆記
- linux安全學習筆記(轉)Linux筆記