OpenLDAP集中管理使用者帳號學習筆記 (轉)

yhj20041128001發表於2011-12-29

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"--&gt"Edit general settings",密碼是lam,進去後重新設定密碼;其他設定我沒作修改。

回到主頁,在右上角選擇"LAM configuration"--&gt"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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章