OpenLDAP實現服務器集中化認證及安全管理

OpenLDAP實現服務器集中化認證及安全管理

目的
1·實現對於服務器普通用戶賬號的集中化認證管理
2·實現對於認證服務器的主從複製,保證數據一致
3·實現對於服務器數據傳輸的加密保護
Openldap集中化認證需要實現的效果
1·兩臺ldap服務器,做單向主從,寫操作只允許發生在Master上。
Master的任意數據更新都會引發Slave做相同操作,以確保數據一致。
2·通過ldap認證的用戶,可以通過系統命令passwd直接更改自己的密碼。
3·普通登錄用戶可以查詢任意ldap用戶信息,但無法看到密碼項。
安全性方面需要達到的效果:
·以下幾個方面的數據傳輸應用了SSL加密保護
1 客戶端認證時提交的信息以及服務器返回的信息
2 主從ldap服務器間的同步信息
安裝環境
三臺CentOS 5.7 x86_64服務器:10.20.10.202 10.20.10.211 10.20.10.203
Master:10.20.10.202
Slave:10.20.10.211
客戶機:10.20.10.203
202和211作爲LDAP集中認證服務器
一臺作爲需要進行安全性配置的應用服務器。
軟件環境
在Master和Slave兩臺ldap服務器上使用yum的方式分別安裝以下軟件:
openldap
openldap-clients
openldap-servers
openssl
nss_ldap
在客戶機上安裝:
openldap
nss_ldap
2.1 生成根證書
cd /etc/pki/tls/misc
./CA -newca
期間需要建立根證書密碼,國家名,公司名等等,這些都可以隨便填,我是按真實情況填寫
請先確認已經刪除了/etc/pki/CA這個目錄
2.2 生成Master服務器的證書
2.2.1openssl req -new -nodes -keyout newreq.pem -out newreq.pem
期間需要建立證書信息,其中common name一定要注意,因爲後面會用到
這裏common name填入的是ldap1.woyo.com
2.2.2/etc/pki/tls/misc/CA -sign
需要輸入之前建立的根證書密碼,並且還要經過兩次確認
複製根證書:
cp /etc/pki/CA/cacert.pem /etc/openldap/cacerts/
對於新生成的證書做以下調整:
mv /etc/pki/tls/misc/newcert.pem /etc/openldap/cacerts/server202.csr
mv /etc/pki/tls/misc/newreq.pem /etc/openldap/cacerts/server202.key
chmod 400 /etc/openldap/cacerts/server202.key
chown ldap /etc/openldap/cacerts/server202.key
2.3 生成Slave服務器的證書
2.3.1 openssl req -new -nodes -keyout newreq.pem -out newreq.pem
同master一樣,common name需要注意,這裏common name填入的是ldap2.woyo.com
2.3.2 /etc/pki/tls/misc/CA -sign
然後將新生成的證書移動到Slave服務器上:
scp /etc/pki/CA/cacert.pem 10.20.10.211:/etc/openldap/cacerts/
scp /etc/pki/tls/misc/newcert.pem 10.20.10.211:/etc/openldap/cacerts/server211.csr
scp /etc/pki/tls/misc/newreq.pem 10.20.10.211:/etc/openldap/cacerts/server211.key
到Slave上更改證書文件屬性
chmod 400 /etc/openldap/cacerts/server211.key
chown ldap /etc/openldap/cacerts/server211.key
將根證書傳一份到客戶機上
scp /etc/pki/CA/cacert.pem 10.20.10.203:/etc/openldap/cacerts/
注:注意移動和拷貝的區別
3LDAP主從認證服務器配置
3.1.1 更改Master服務器配置文件
首先清空配置文件
>/etc/openldap/slapd.conf
然後將下面內容導入slapd.conf文件中
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
TLSCertificateFile /etc/openldap/cacerts/server202.csr
TLSCertificateKeyFile /etc/openldap/cacerts/server202.key
access to attrs=userPassword
by self write
by users read
by anonymous auth
access to *
by self write
by * read
database bdb
suffix "dc=woyo,dc=com"
rootdn "cn=root,dc=woyo,dc=com"
rootpw {MD5}VR39fkEqxx7BYXtZaVmCfg== #slappasswd –h {md5}
directory /var/lib/ldap
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
replogfile /var/lib/ldap/replog
replica uri=ldaps://ldap1.woyo.com:636
binddn="cn=root,dc=woyo,dc=com"
bindmethod=simple
credentials=secret #這裏是你的rootpw後面密碼
loglevel 256
更改/etc/ldap.conf和/etc/openldap/ldap.conf兩個文件,確保兩個文件分別包含以下內容:
tls_cacert /etc/openldap/cacerts/cacert.pem
tls_cacertdir /etc/openldap/cacerts
3.1.2 更改Slave服務器配置文件
首先清空配置文件
>/etc/openldap/slapd.conf
然後將下面內容導入slapd.conf文件
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
CACertificateFile /etc/openldap/cacerts/cacert.pem
TLSCertificateFile /etc/openldap/cacerts/server211.csr
TLSCertificateKeyFile /etc/openldap/cacerts/server211.key
access to attrs=userPassword
by self read
by users read
by anonymous auth
access to *
by self write
by * read
database bdb
suffix "dc=woyo,dc=com"
rootdn "cn=root,dc=woyo,dc=com"
rootpw {SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=
directory /var/lib/ldap
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
updatedn "cn=root,dc=woyo,dc=com"
loglevel 256
更改/etc/ldap.conf和/etc/openldap/ldap.conf兩個文件,同樣確保兩個文件分別包含以下內容:
tls_cacert /etc/openldap/cacerts/cacert.pem
tls_cacertdir /etc/openldap/cacerts
3.1.3 打開兩臺ldap服務器的日誌功能
syslog中加入ldap日誌文件
vi /etc/syslog.conf
# save OpenLDAP log
local4.* /var/log/ldap.log

重啓syslog
service syslog restart
這樣,日誌文件/var/log/ldap.log就會保存ldap的日誌了
分別啓動兩臺ldap服務器的ldap服務
Service ldap start
分別測試兩臺ldap server是否正常工作
ldapsearch -x -b "dc=woyo,dc=com" -H ldaps://ldap1.woyo.com
ldapsearch -x -b "dc=woyo,dc=com" -H ldaps://ldap2.woyo.com
如果命令執行成功,返回一些信息,則說明服務器正常運行,且證書及ssl設置沒有問題了
3.2在主ldap服務器上錄入數據
使用Migration來進行ldif文件的轉換
tar xvf MigrationTools.gz -C /usr/local/openldap
cd /usr/local/openldap/MigrationTools-47
vi migrate_common.ph 文件,將其中兩行改爲下列形式
  $DEFAULT_MAIL_DOMAIN = "woyo.com";
  $DEFAULT_BASE = "dc=woyo,dc=com";
1·創建根項,併爲 Hosts、Networks、Group 和 People 等創建第一級的組織單元(OU)
migrate_base.pl > /tmp/base.ldif
編輯 base.ldif,刪除除下面之外的所有條目
  dn: dc=woyo,dc=com
  dc: woyo
  objectClass: top
  objectClass: domain
dn: ou=People,dc=woyo,dc=com
  ou: People
  objectClass: top
  objectClass: organizationalUnit
dn: ou=Group,dc=woyo,dc=com
  ou: Group
  objectClass: top
  objectClass: organizationalUnit
2·創建test組和test用戶
Useradd woyogame
3·創建用戶項,這裏導入系統的woyogame用戶信息
grep woyogame /etc/passwd > /tmp/passwd.in
./migrate_passwd.pl /tmp/passwd.in > /tmp/passwd.ldif
可以對/tmp/passwd.ldif文件進行修改,更改家目錄,uid等一些選項,達到想要的效果
4·導入ldap數據
ldapadd -x -D "cn=root,dc=woyo,dc=com" -W -f base.ldif
ldapadd -x -D "cn=root,dc=woyo,dc=com" -W -f passwd.ldif
注:由於是主從同步,因此上面的更新操作會同步到從ldap服務器上
好了,可以通過以下命令查看導入到ldap中的數據
ldapsearch -x -b "dc=woyo,dc=com"


修改以下三個文件
/etc/ldap.conf
uri ldaps://ldap1.woyo.comldaps://ldap2.woyo.com #主從ldap服務器的ip
base dc=woyo,dc=com #ldap服務器配置文件所設置的域
ssl on
tls_cacertdir /etc/openldap/cacerts
tls_cacert /etc/openldap/cacerts/cacert.pem
bind_policy soft
/etc/openldap/ldap.conf
uri ldap://ldap1.woyo.com ldap://ldap2.woyo.com
base dc=woyo,dc=com
tls_cacertdir /etc/openldap/cacerts
tls_cacert /etc/openldap/cacerts/cacert.pem
/etc/sysconfig/authconfig
USESHADOW=no
USELDAP=yes
USELDAPAUTH=yes
4.2加入ldap認證方式
vi /etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap
現在,就可以用任意客戶端通過遠程連接的方式連接到這臺應用服務器進行測試了


備註
·SSL部分的說明
ldap1.woyo.com爲Master服務器證書的common name,後面所有涉及到ldaps地址的部分均填寫這個名稱
ldap2.woyo.com作用相同,只不過是Slave服務器證書的common name
·紅色粗體部分,爲主從單向複製部分的配置
·紫色粗體部分,爲主從機器上SSL配置的部分,分別指定了三個證書文件
·橙色粗體部分,爲ACL控制語句,這裏的控制語句實現的效果是:
登錄後的用戶可以修改自己的密碼,匿名用戶可以提交密碼信息用於認證
· 4.1 部分的bind_policy soft語句,解決了若兩臺openldap服務器均掛掉的情況下,普通用戶登錄不斷嘗試,導致等待時間過長的問題

後記:

ldap的數據庫文件是在:/var/lib/ldap/下面的。
1、一開始把ldap放在一臺計算的服務器上,當這臺服務器負載重的時候,依靠ldap驗證登錄的機器登錄會非常慢(超慢,近乎死機),所以建議用一臺空閒的主機(甚至可以是vmware一臺虛擬機)。
2、和MySql一樣,有2種方法做數據庫的備份:一、用ldapsearch -x把內容倒出來存成文件,注意清除一下這個命令輸出的和數據無關的信息。萬一數據庫完了,把ldap相關的包刪掉,把原來的數據庫文件刪掉,在重新安裝 ldap相關包,把備份的文件改成ldif擴展名,一次導入就行了。個人建議每次作修改時的ldif文件最好保存被查,最好編輯成一個ldif文件,也可以算是一種備份ldap數據的方案。二、另一種是把數據庫文件直接打包備份,出現問題時,停止ldap server,把文件解壓,再重新啓動。
3、authconfig文件修改的文件中有2個ldap.conf文件:/etc/ldap.conf和 /etc/openldap/ldap.conf。在我看來前者只是客戶端在作認證時才用的,而後者是客戶端控制server時用的。具體點:不管在客戶端還是服務器,如果用ldap做認證,服務器的ldap server應該指向本機,前者是必須的,後者可有可無。在管理ldap server時後者是必須的,前者可有可無,即一臺客戶端配置了/etc/openldap/ldap.conf文件,就能通過ldap相關的命令來配置文件中指定的服務器,但這臺機器未必使用了ldap認證。只要修改一下/etc/openldap/ldap.conf文件中的主機名或IP就能用一臺機器配置任何一臺ldap server。
爲保持系統穩定,建議配置多臺ldap server,並以空格分隔把主機名或IP列在/etc/ldap.conf文件中,這樣萬一第一臺server宕了,第二臺server會繼續認證。
另外,建議多臺server使用不同的管理員密碼,要修改數據時只需修改你本地的/etc/openldap/ldap.conf文件中的主機名後對每臺執行一次就行了。應該不會很麻煩。

 

本文摘自http://gxjluck.blog.51cto.com/1211751/794323

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章