顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


主題 - Niko

頁: [1]
1
各位大大們好啊!正如標題所述,小弟在目前工作上顯得非常無力;
第一次爆發點是協助高雄公司搬家,詳細就不說了。
第二次正在發生,也就是台北公司搬家,一開始的網路佈線與機房等事就沒與我討論,等機房已經差不多了,才叫我過去看;
一、110v插頭10個,220v插頭10個,非常棒,server與零零總總的東西加起來也約30個插頭,提出增加插頭數量以應付未來增加server的可能性被打搶。
二、網路線過短,根本無法拉線到機櫃上的switch,只能延著出線孔附近擺張桌子放4台switch直接接線。
三、主管(非直系)交代,因為機房獨立冷氣一直開24H會壞掉,所以使用中央空調就好,平時獨立冷氣不準開。
四、主管(就是上面那位)找來的水電師傅兼網路佈線,連568b(白橙,橙,白綠,藍,白藍,綠,白棕,棕)的順序都不知道,兩邊壓成(白橙,橙,白綠,綠,白藍,藍,白棕,棕),說多不多,77條線都是這樣壓。
五、兩天內公司要能全部上線運作。

2
Network 討論版 / IPsec VPN traceroute疑問
« 於: 2014-07-04 16:08 »
各位大大們好,

小弟有1台fortigate 50B(IP:192.168.50.1),1台fortigate 110C(IP:192.168.10.1),2台已經建立好IPsec VPN,連線也都正常,

使用traceroute由110C的網段連到50B的某台電腦
traceroute to 192.168.50.177 (192.168.50.177), 30 hops max, 60 byte packets
 1  192.168.10.1 (192.168.10.1)
 2  192.168.50.1 (192.168.50.1)
 3  192.168.50.177 (192.168.50.177)

使用traceroute由50B的網段連到110C的某台電腦
traceroute to 192.168.10.177 (192.168.10.177), 30 hops max, 60 byte packets
 1  192.168.50.1 (192.168.50.1)
 2  210.61.X.X (210.61.X.X)
 3  192.168.10.177 (192.168.10.177)

設定方面小弟也全面檢查過了,雙方在使用上都沒問題,但是一直不解為何不是110C的private ip (192.168.10.1),而是110C的public ip?

如有需要小弟可再整理把設定畫面PO上來,

謝謝!!!

3
Linux 討論版 / 多台samba使用LDAP認證問題
« 於: 2013-11-06 17:59 »
hello!各位大大好

小弟測試的方法是下指令
代碼: [選擇]
net getlocalsid S-1-5-21-XXXX把多台samba SID設定成相同,這樣在LDAP上的user就能夠登入多台samba

雖然可行,但總覺得不對....

小弟找了一篇文章 Samba解放微軟下的王國

其中DOMAIN_CONTROLER 和 DOMAIN_MEMBER 讓小弟覺得是否要這樣做才是比較正確的作法?

windows的網域讓小弟好頭痛... :P

4
MIS 討論區 / windows給AD管,linux給LDAP管
« 於: 2013-08-08 19:13 »
如題,小弟最近在找工作,有位面試官說了這段話,一直讓小弟很不解,礙於公司機密小弟也就沒多問什麼了

想請問大大們,到底是什麼樣的需求才要這樣子做呢?

小弟的理論非常簡單,用LDAP一台就打死全部了,為何還要分開管?!

另外他一直用很懷疑的眼神問小弟samba透過LDAP做認證都沒遇到問題嗎?    奇怪~到底是遇到什麼樣的問題啊?!

在samba PDC,小弟遇到最嚴重的問題也只不過是samba版本太舊不支援win7做認證而已

不知道是否有相關經驗的大大們能否讓小弟多學習一下?  :P

謝謝!!!


p.s:慘了,這篇小弟本要發在雜七雜八區的,不小心點錯區了....sorry

5
雜七雜八 / 那個....關於LDAP的演講
« 於: 2013-05-08 22:16 »
在這裡先跟阿翔大大說抱歉啊!!!

因為最近私人事情,今天才看到阿翔大大的mail,這個嘛! 其實小弟沒有演講過,不過呢..有機會能夠在這裡出一份力的話,那小弟就獻醜了

因為沒有經驗,所以需要一點時間讓小弟準備一下....

謝謝各位大大!!!

6
各位大大們好...我又來問蠢問題了 :P
小弟對POP3收信的認知,就如鳥哥大所說明的
1. MUA 透過 POP3 (Post Office Protocol version 3) 的協定連接到 MRA 的 port 110, 並且輸入帳號與密碼來取得正確的認證與授權;
2. MRA 確認該使用者帳號/密碼沒有問題後,會前往該使用者的 Mailbox (/var/spool/mail/使用者帳號) 取得使用者的信件並傳送給使用者的 MUA 軟體上;
3. 當所有的信件傳送完畢後,使用者的 mailbox 內的資料將會被刪除!
(sorry~直接copy鳥哥網站)

今天發生mail server的home目錄爆滿事件,使用者要去收信時發生『在60 秒內未有回應您的POP3 伺服器。 要等待另一個60 秒伺服器回應嗎?』,導致無法收信,
mbox的位置是在"/var/spool/mail/使用者帳號",這讓小弟很納悶,MTA信收下來之後是存到mailbox下,應該與home目錄並沒有關係才對啊?!

第2個file server的觀念問題,不知有大大是否做過類似以下架構

A server → B server → C server →client

A 為 NFS
B 連接 A 的 NFS資源,再開啟 NFS
C 連接 B 的 NFS資源,開啟 NFS 與 SAMBA 供client使用

這樣的架構也讓小弟很不解,到底是為了什麼?! 硬碟IO?! 網路 ?! 但最終都是A server在進行讀寫....


以上肯請各位大大賜教....謝謝!!!

7
雜七雜八 / 小弟來灌個水...
« 於: 2013-03-03 21:38 »
大大們好啊!!!

不知各位大大們有沒有參與到今年的轉職潮,薪水有升級跳嗎? ;D

其實是小弟自己遇到了瓶頸 :P

雖然很偷懶的一星期只抓五天兩小時逼自己學些東西,但是總覺得還不夠,到底該怎麼做,才能夠像各位大大這樣達到"神乎其技" ?!

最近一直在想是不是該轉業了.....

灌水完畢 :P

8
LDAP 討論區 / LDAP over TLS
« 於: 2013-01-22 23:07 »
各位好,又是小弟我 :P           
這次是與各位大大們分享小弟的實作成果...

關於TLS與SSL可以參考wiki的說明 → http://zh.wikipedia.org/wiki/SSL

LDAP要走TLS/SSL,也就是加密,用最最最簡單來理解的話,有兩種方式
一 : 在server上作certificate就OK
二 : server與client都要作certificate,雙方都要通過驗證才可以 (較安全)

第二點在『man slapd.conf』中有提到 :
TLSVerifyClient <level>
              Specifies what checks to perform on client certificates in an incoming TLS session, if any.  The <level> can be specified as one of the following keywords:

never     This is the default.  slapd will not ask the client for a certificate.

所以,實作部份小弟就用最簡單的方式來完成,主要目的只要能夠走TLS就好。
另外還有一個非常非常重要的觀念,只要是有關LDAP over TLS/SSL的文章裡,每位大大都會提到的 :
TLS是走port 389,SSL才是port 636,也就是  TLS → ldap://xxx.xxx.tw          SSL → ldaps://xxx.xxx.tw

小弟的環境是 :
網域為split.com.tw
IP網段為192.168.1.0/24
OS統一是CentOS 6.3
DNS server一台,跑dns、dhcp服務。hostname : dns
LDAP server兩台,使用mirror mode來互相複製。hostname : ldap1、ldap2
samba server兩台,分別為PDC與BDC,另外還有nfs、heartbeat、drbd等服務。hostname : smb1、smb2
client兩台,用來做測試,分別用nslcd與sssd來加入LDAP。hostname : client、client2


1. 建立TLS憑證 (以ldap1為例,ldap2也用相同作法)

使用簡單的方法,一次把cert和key做好
代碼: [選擇]
[root@ldap1 ~]# cd  /etc/pki/tls/certs 在certs目錄下有一個『Makefile』,是製作憑證的script,先修改裡面的內容,讓製作出來的憑證有效日期加長為10年。
代碼: [選擇]
[root@ldap1 certs]# vim  Makefile 在『%.pem:』這個項目中,找到
『/usr/bin/openssl req $(UTF8) -newkey rsa:2048 -keyout $$PEM1 -nodes -x509 -days 365 -out $$PEM2 -set_serial $(SERIAL)』這一行 (約41行),把『-days 365』修改成『-days 3650』。

產生ldap1.pem憑證
代碼: [選擇]
[root@ldap1 certs]# make  ldap1.pem umask 77 ; \
   PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
   PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
   /usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 3650 -out $PEM2 -set_serial 0 ; \
   cat $PEM1 >  ldap1.pem ; \
   echo ""    >> ldap1.pem ; \
   cat $PEM2 >> ldap1.pem ; \
   rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
...........+++
......................+++
writing new private key to '/tmp/openssl.LDBJkp'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:TW
State or Province Name (full name) []:Taiwan
Locality Name (eg, city) [Default City]:Taipei
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:ldap1.split.com.tw      #重要,必須是server的FQDN
Email Address []:xxxx@gmail.com

修改憑證權限
代碼: [選擇]
[root@ldap1 certs]# chmod  640  ldap1.pem
[root@ldap1 certs]# chown  ldap:ldap  ldap1.pem

將ldap1的憑證與CA的憑證放到openldap的certs目錄下
代碼: [選擇]
[root@ldap1 certs]# ln  -s  `pwd`/ldap1.pem  /etc/openldap/certs/
[root@ldap1 certs]# ln  -s  `pwd`/ca-bundle.crt  /etc/openldap/certs/

修改系統的啟動設定檔,開啟LDAPS的功能
代碼: [選擇]
[root@ldap1 certs]# vim  /etc/sysconfig/ldap SLAPD_LDAPS=yes       #約16行

修改slapd.conf,加入憑證路徑
代碼: [選擇]
[root@ldap1 certs]# vim  /etc/openldap/slapd.conf 約71~73行
befort
TLSCACertificatePath  /etc/openldap/certs
TLSCertificateFile  "\"OpenLDAP Server\""
TLSCertificateKeyFile  /etc/openldap/certs/password

after
TLSCACertificateFile  /etc/openldap/certs/ca-bundle.crt
TLSCertificateFile  /etc/openldap/certs/ldap1.pem
TLSCertificateKeyFile  /etc/openldap/certs/ldap1.pem
# Certificate的File和KeyFile因為在製作時都已包含在內,所以指定同一個檔案即可

使用上面作法把ldap2也搞定

2. 本機驗證
兩台都做完成後,先來試看看能不能使用TLS (目前焦點還是在ldap1、ldap2上)

修改ldap.conf
代碼: [選擇]
[root@ldap1 ~]# vim  /etc/openldap/ldap.conf新增
TLS_REQCERT  never

代碼: [選擇]
[root@ldap1 ~]# ldapsearch  -x  -ZZ 如果有查詢到資料並且在log中 :
conn=1000  op=0  STARTTLS
conn=1000  op=0  RESULT  oid=  err=0  text=
conn=1000  fd=16  TLS  established  tls_ssf=256  ssf=256
有出現類似訊息,就代表已經成功走TLS了。(如果client上有設定TLS,在log中都會出現類似的訊息)

3. 設定mirror mode
在slapd.conf裡的mirror mode參數中新增內容,ldap1、ldap2都是相同設定 (另一種Syncrepl模式,只要設定consumer就好)。
小弟用先前筆記的設定截取一部份來說明 :

serverID 1

syncrepl         rid=123
                      provider=ldap://ldap2.split.com.tw
                      bindmethod=simple
                      binddn="cn=admin2,dc=split,dc=com,dc=tw"
                      credentials=redhat
                      searchbase="dc=split,dc=com,dc=tw"
                      schemachecking=on
                      type=refreshAndPersist
                      retry="60 +"
                      starttls=yes
                      tls_reqcert=never


mirrormode on

完成,就是這麼簡單 :P,以下設定client的方式其實都滿簡單的,是否有成功,觀察一下log就知道了
小提醒:只要動到slapd.conf的話都必須要 :
代碼: [選擇]
[root@ldap1 ~]# rm  -rf  /etc/openldap/slapd.d/*
[root@ldap1 ~]# slaptest  -f  /etc/openldap/slapd.conf  -F  /etc/openldap/slapd.d
[root@ldap1 ~]# chown  -R  ldap:ldap  /etc/openldap/slapd.d
[root@ldap1 ~]# service  slapd  restart

Samba PDC/BDC(smb1、smb2設定相同)
先編輯『/etc/openldap/ldap.conf』
加入:
TLS_REQCERT  never

再修改『/etc/samba/smb.conf』
找到『ldap ssl = No』這一行,改成『ldap ssl = start tls』,
如果沒有就自己新增進去,修改完後重新啟動samba即可。


Client
這裡要分兩部份介紹,第一部份是小弟先前用手動的方式加入LDAP,採用nslcd和pam_ldap;
第二部份則是RHEL 6使用的"系統安全性服務SSSD (System Security Services Daemon)",一種管理身份驗證的機制。

client(nslcd、pam_ldap)
修改ldap.conf
代碼: [選擇]
[root@client ~]# vim  /etc/openldap/ldap.conf
新增
TLS_REQCERT  never

修改nslcd.conf
代碼: [選擇]
[root@client ~]# vim  /etc/nslcd.conf
把先前的設定
ssl  no
修改成
ssl  start_tls
tls_reqcert  never


最後修改pam_ldap.conf (與sudo有關)
代碼: [選擇]
[root@client ~]# vim  /etc/pam_ldap.conf
約263行
tls_checkpeer    no

先前的設定
ssl  no
改成
ssl  start_tls

Client(sssd)
有兩種方法,一種是『authconfig-tui』文字介面,另一種是『authconfig-gtk』圖形介面,前提都必須要有server的cert才可以。
依照上面作法來說明,server的certificate位置應該在/etc/pki/tls/certs目錄下,先分別把兩台的certificate處理一下(以ldap1為例,ldap2也用相同作法)
代碼: [選擇]
[root@ldap1 ~]# cp   /etc/pki/tls/certs/ldap1.pem   /etc/openldap/certs/ldap1-cert.pem
[root@ldap1 ~]# chmod  755  /etc/openldap/certs/ldap1-cert.pem
代碼: [選擇]
[root@ldap1 ~]# vim  /etc/openldap/certs/ldap1-cert.pem
-----BEGIN  CERTIFICATE-----
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
-----END  CERTIFICATE-----
只留BEGIN  CERTIFICATE到END  CERTIFICATE這部份就好,其他的請刪除


接著要先在client的"/etc/openldap/"目錄下新增一個"cacerts"目錄
代碼: [選擇]
[root@client ~]# mkdir  /etc/openldap/cacerts
把ldap1-cert.pem、ldap2-cert.pem複製到client的"/etc/openldap/cacerts"目錄下
代碼: [選擇]
[root@ldap1 ~]# scp  /etc/pki/tls/certs/ldap1-cert.pem  client:/etc/openldap/cacerts
[root@ldap2 ~]# scp  /etc/pki/tls/certs/ldap2-cert.pem  client:/etc/openldap/cacerts

所有事情都做好後,在client上就用authconfig-gtk這個圖形介面來玩玩 (authconfig-tui 作法也是一樣的)


開啟後長這樣,LDAP伺服器欄位的寫法 :『ldap://ldap1.split.com.tw  ldap://ldap2.split.com.tw』(因為有兩台LDAP server)
『下載CA憑證』那個不用去理它,因為我們已經把憑證放好了。之所以要手動先放置好憑證的原因就是我們有兩台LDAP server,如果先去下載ldap1-cert.pem,再去下載ldap2-cert.pem,會把原本的ldap1-cert.pem給覆蓋掉。
設定好後直接按套用,此時cacerts目錄底下會長這樣 :


到此client也算完成了,不過最後小弟還要提一個東西,那就是用sssd加入LDAP後的sudo

檢查sudo版本與檔案
代碼: [選擇]
[root@client ~]# rpm  -qa|grep  sudo
sudo-1.7.4p5-11.el6.x86_64

代碼: [選擇]
[root@client ~]# ls  /etc/sudo-ldap.conf
/etc/sudo-ldap.conf

編輯sudo-ldap.conf
代碼: [選擇]
[root@client ~]# vim  /etc/sudo-ldap.conf
uri  ldap://ldap1.split.com.tw  ldap://ldap2.split.com.tw
sudoers_base  ou=Sudoers,dc=split,dc=com,dc=tw
ssl  start_tls
tls_checkpeer  no

編輯nsswitch.conf
代碼: [選擇]
[root@client ~]# vim  /etc/nsswitch.conf
新增
sudoers:    ldap

以上就是小弟的筆記。 ;D

參考資料 :
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1032785
http://www.study-area.org/tips/smbldap/
http://blog.jangmt.com/2012/08/centos-6-ldap-server-ldap.html
http://www.weithenn.org/cgi-bin/wiki.pl?OpenLDAP-SSL_TLS_%E8%A8%AD%E5%AE%9A
http://www.l-penguin.idv.tw/article/ldap-5.htm
https://gist.github.com/4187388

2013/01/26
補上小弟用wireshark來觀察有TLS和沒有TLS的差別

沒有TLS


TLS

9
LDAP 討論區 / LDAP+sudo與su的筆記
« 於: 2012-12-09 19:40 »
hello!!又是小弟我...會完成這篇筆記主要是wlhfor大大提了一個問題,剛好利用之前弄好的LDAP server,所以就稍微實作了一下  :P

sudo
先把sudo的schema加到LDAP中,以ldap1為例 :
代碼: [選擇]
[root@ldap1 ~]# cp  /usr/share/doc/sudo-1.7.4p5/schema.OpenLDAP    /etc/openldap/schema/sudo.schema

修改slapd.conf
代碼: [選擇]
[root@ldap1 ~]# vim  /etc/openldap/slapd.conf #新增設定

include     /etc/openldap/schema/sudo.schema

##################################################
# database definitions
##################################################

index       sudoUser        eq


代碼: [選擇]
[root@ldap1 ~]# rm  -rf  /etc/openldap/slapd.d/*
[root@ldap1 ~]# slapdtest  -f  /etc/openldap/slapd.conf  -F  /etc/openldap/slapd.d
[root@ldap1 ~]# service  slapd  restart

完成後到phpLDAPadmin上的schema去搜尋是否有出現『sudoRole』這個objectClass。

接下來建立一個ou (或者也可以使用現有的) ,名稱為Sudoers,底下的子記錄就是用來建立sudo的規則,下面使用ldif檔來示範。
代碼: [選擇]
[root@ldap1 ~]# vim  sudoers.ldif #ou=Sudoers,dc=split,dc=com,dc=tw
dn: ou=Sudoers,dc=split,dc=com,dc=tw
objectclass: organizationalUnit
objectclass: top
ou: Sudoers

#cn=%d30,ou=Sudoers,dc=split,dc=com,dc=tw
dn: cn=%d30,ou=Sudoers,dc=split,dc=com,dc=tw
cn: %d30
objectclass: sudoRole
objectclass: top
sudocommand: ALL
sudohost: ALL
sudouser: %d30

依照 /etc/sudoers的內容說明就是 :
群組(sudouser)        來源主機(sudohost)                   可切換的身份(預設)          可用指令(sudocommand)
%d30                          ALL                            =                  (root)                             ALL


匯入LDIF檔
代碼: [選擇]
[root@ldap1 ~]# ldapmodify  -D  "cn=admin,dc=split,dc=com,dc=tw"   -W  -x  -a  -f  sudoers.ldif

然後把niko這個帳號加入至d30群組中,以便稍後用來測試。 (詳細操作小弟就不說了)

Client設定
sudo要能夠支持LDAP似乎要sudo-1.7.4p5-13以上版本,CentOS 6.3預設的版本為sudo-1.7.4p5-11,所以先使用『yum  update  sudo』來升級版本,之後在 /etc下會有個sudo-ldap.conf的檔案。
sorry~這裡小弟突然鬼打牆,經測試後,CentOS6.3預設帶的sudo(sudo-1.7.4p5-11.el6.x86_64)就能夠支援LDAP了,所以這裡可以不用特別去更新,如果沒有/etc/sudo-ldap.conf這個檔再去更新也不遲!!!

設定sudo-ldap.conf
代碼: [選擇]
[root@client ~]# vim  /etc/sudo-ldap.conf
#新增內容
uri  ldap://ldap1.split.com.tw  ldap://ldap2.split.com.tw

sudoers_base  ou=Sudoers,dc=split,dc=com,dc=tw


設定nsswitch.conf
代碼: [選擇]
[root@client ~]# vim  /etc/nsswitch.conf
#新增內容
sudoers:    ldap

設定好後小弟我是直接reboot,然後niko這個帳號就可使用sudo了,當然還有其它沒有加入d30群組的帳號來做測試。


sudo問題 :
一般在local上,sudo的expire time預設是5分鐘,第一次使用sudo時要輸入密碼,如果5分鐘內沒有執行過sudo,則再一次執行時會重新要求密碼。
修改expire time的方式為 :
代碼: [選擇]
[root@client ~]# vim  /etc/sudoers #新增
Defaults    env_reset , timestamp_timeout=X      # X的單位為分鐘
或者可單獨指定帳號
Defaults : niko  timestamp_timeout=1

# timestamp_timeout=0,表示每次執行sudo都要輸入密碼
# timestamp_timeout=-1,表示執行sudo時不用輸入密碼

如果使用LDAP就無法用上面的方法來設定,目前還沒找到修改expire time的方法。


接著問題來了,就以niko這個已經加入d30 group的帳號來說一下...
在home server的NFS中已經有設定root_squash這個參數,但是如果niko在client主機上輸入sudo su - xxx,那不就....囧
所以,小弟另外限制了su,也就是d30可以su,非d30的成員只可su到非root的其它用戶,並且root要su到其它用戶也必須要輸入用戶的密碼。

su
代碼: [選擇]
[root@client ~]# vim  /etc/pam.d/su #%PAM-1.0
#新增
auth            [ignore=1 default=ignore]  pam_wheel.so  group=su  use_uid debug
auth            required        pam_listfile.so  item=user sense=deny  onerr=succeed  file=/etc/sudeny

#auth           sufficient      pam_rootok.so        #註解

代碼: [選擇]
[root@client ~]# vim  /etc/sudeny #新增
root

代碼: [選擇]
[root@clinet ~]# chmod  440  /etc/sudeny
設定好後不需要重新開機,立即生效。(資料來源 : http://www.suse.url.tw/sles10/  http://hi.baidu.com/nashczh/item/7d2623ed1591aa3c87d9dee8 )

10
在開始前,小弟主要遇到的問題就是samba PDC(BDC),因為有兩台LDAP server,採用mirror的方式互相備份,但是兩台rootdn和rootpw不一樣時,samba只會使用smb.conf裡的『ldap admin dn = 』這個參數以及設定在secrets.tdb裡的密碼去try另一台LDAP server,導致如果ldap1當機,會連不上ldap2,這個問題小弟還沒有時間去深入研究,所以....暫時就先把ldap1、ldap2兩台的rootdn和rootpw設定成相同。

這篇筆記是參考Weithenn大大的『24小時不打烊的雲端服務:專家教你用 CentOS 架設萬年不掛的伺服器』這本書,所以許多的設定主要也是從書中來的。


以下是小弟的架構,採用HA+DRBD的方式,不會因某台file server掛掉而導致使用者(linux、windows)無法存取自己的家目錄。



OS : CentOS6.3 (64位元)
eth0 : IP是由DHCP產生 (小弟有自行架設DHCP+DNS server)
eth1 : IP採用手動方式設定

DRBD是用硬碟的區塊(block)來進行同步的動作,並不是某個檔或某個資料夾,所以小弟把smb1、smb2的『home』單獨切一個分割區出來,並做成LVM,名稱為 /dev/VolGroup/lv_home (兩台都相同)。

注意事項(smb1、smb2相同) :
1. heartbeat對於叢集主機的FQDN(Fully Qualified Doamin Name)要求非常嚴格,所以DNS務必要設定正確,並確保雙方主機都可使用FQDN去ping到對方。 (192.168.1.0/24 這個網段)
2. 『/dev/VolGroup/lv_home』不要去自動掛載它,NFS、Samba等服務也不要手動開啟和開機時啟動,所有的動作都會由DRBD與HA來負責。
3. SELinux(3.7.19-155)對heartbeat這個服務目前似乎有些問題存在,所以小弟暫時先設定成permissive。
4. 加入至LDAP client中

套件 :
DRBD : drbd83-utils、kmod-drbd83 (需安裝ELRepo套件庫)
HA : heartbeat、heartbeat-devel、heartbeat-libs (需安裝EPEL套件庫)

drbd與heartbeat的設定,在叢集主機中幾乎都是一樣的,要改的東西很少,所以小弟就以smb1來當範例,smb2只說明不一樣的地方。

DRBD (drbd83-utils-8.3.13-1、kmod-drbd83-8.3.13-2)

DRDB的主設定檔為/etc/drbd.conf;為了方便管理,會將設定檔分成多個部分,並且都保存至/etc/drbd.d目錄中,主設定檔僅使用『include』將這些設定檔整合起來。

=====================drbd.conf內容=====================
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";                #整體環境設定
include "drbd.d/*.res";                                        #資源環境設定
====================================================


smb1主機設定 :
代碼: [選擇]
[root@smb1 ~]# vim  /etc/drbd.d/global_common.conf
global  {
                   minor-count 64;
                   usage-count yes;
}

common  {
   protocol C;
     handlers  {
                   pri-on-incon-degr  "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                   pri-lost-after-sb  "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                   local-io-error  "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

                   fence-peer  "/usr/lib64/heartbeat/drbd-peer-outdater -t 5";          #OS是64位元的話才會多一個"64"

                   pri-lost  "/usr/lib/drbd/notify-pri-lost.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot     -f";

                  split-brain  "/usr/lib/drbd/notify-split-brain.sh root";

                  out-of-sync  "/usr/lib/drbd/notify-out-of-sync.sh root";
  }

     startup  {
                  wfc-timeout  60
                  degr-wfc-timeout  120;
                  outdated-wfc-timeout  2;
  }

     disk  {
                 on-io-error   detach;
                 fencing  resource-only;
  }

     net  {
                after-sb-0pri  disconnect;
                after-sb-1pri  disconnect;
                after-sb-2pri  disconnect;
                #這三段主要是設定split-brain的自動恢復機制,暫時先設定"disconnect"
  }

     syncer  {
                 rate  10M;                #資料最大同步速率,單位是Mbyte。
  }
}


一個DRBD的設備(如:/dev/drbd0),就叫做一個資源(resource),一個資源裡包含了兩台以上的主機資訊
代碼: [選擇]
[root@smb1 ~]# vim  /etc/drbd.d/home.res
resource home {              #"home"就是DRBD的資源名稱       
        on smb1 {                                              #要與『#uname -n』所顯示的相同
                device    /dev/drbd0;                      #DRBD的設備
                disk      /dev/VolGroup/lv_home;    #"/dev/drbd0"指向實際的partition "/dev/VolGroup/lv_home"
                address   192.168.100.1:7788;     #同步用的IP和port
                meta-disk internal;
        }
        on smb2 {
                device    /dev/drbd0;
                disk      /dev/VolGroup/lv_home;
                address   192.168.100.2:7788;
                meta-disk internal;
        }
}


copy這兩份設定檔到smb2
代碼: [選擇]
[root@smb1 ~]# scp  /etc/drbd.d/*  smb2:/etc/drbd.d/

建立DRBD資源(smb2也是相同做法)
在開始建立時首先要塞點東西到『/dev/VolGroup/lv_home』裡面,否則 :

Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
Operation refused.

可能會出現類似的錯誤訊息。

代碼: [選擇]
[root@smb1 ~]# dd  if=/dev/zero  of=/dev/VolGroup/lv_home  bs=1M  count=1010+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00715784 s, 1.5 GB/s

建立"home"資源
代碼: [選擇]
[root@smb1 ~]# drbdadm  create-md  homeWriting meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

兩台主機都設定好後,接下來就可以開啟drbd的服務了。(service drbd start)


觀察DRBD的狀態
代碼: [選擇]
[root@smb1 ~]# service  drbd  status drbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, 2012-09-04 12:06:10
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    Connected      Secondary/Secondary       Inconsistent/Inconsistent        C

ds欄位狀態顯示『Inconsistent』,代表兩台主機的『/dev/drbd0』尚未開始同步。

進行同步,並把smb1提升為Primary Node(smb1設定即可)
代碼: [選擇]
[root@smb1 ~]# drbdadm  --  --overwrite-data-of-peer  primary  home
代碼: [選擇]
[root@smb1 ~]# service  drbd  status version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, 2012-09-04 12:06:10
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    SyncSource     Primary/Secondary           UpToDate/Inconsistent             C
...     sync'ed:    8.0%               (4604/4996)M

上面顯示『/dev/drbd0』正在進行同步中。

當同步完成後,smb1主機上所看到的DRBD狀態應為 : ro欄位顯示Primary/Secondary,ds欄位顯示UpToDate/UpToDate。

格式化『/dev/drbd0』(smb1設定即可)
代碼: [選擇]
[root@smb1 ~]# mkfs.ext4  /dev/drbd0
測試
代碼: [選擇]
[root@smb1 ~]# mount  /dev/drbd0  /home
代碼: [選擇]
[root@smb1 ~]# df  -h /dev/drbd0          4.9G  138M  4.5G   3%  /home

代碼: [選擇]
[root@smb1 ~]# service  drbd  status drbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, 2012-09-04 12:06:10
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    Connected      Primary/Secondary           UpToDate/UpToDate               C     /home         ext4

可看到掛載點及檔案系統格式的資訊。

到此DRBD的建置就算完成了。

設定HA之前,先把smb1、smb2加入LDAP client,並且把NFS、Samba、Samba PDC(smb1)、Samba BDC(smb2)等服務設定好。

注意事項 : 由於現在的『/dev/drbd0』已經是處於同步的狀態,參考第四篇筆記把PDC設定好後,在home目錄下所建立的東西,如logon.bat、profiles等,在BDC上就不需要在去建立了,只要把samba設定好即可。而為了避免產生錯誤,先把smb2提升為primary,並掛載/home。

先把smb1降級(已設定好PDC等相關資料)
代碼: [選擇]
[root@smb1 ~]# umount  /home
[root@smb1 ~]# drbdadm  secondary  home

升級smb2
代碼: [選擇]
[root@smb2 ~]# drbdadm  primary  home
[root@smb2 ~]# mount  /dev/drbd0  /home

以下先來談談之前筆記一直沒寫到的Samba BDC(Backup Domain Controller) :
在smb2上先把samba、smbldap-tools安裝好,然後只需修改幾個地方,其餘的設定都與小弟第四篇的筆記相同。

代碼: [選擇]
[root@smb2 ~]# vim  /etc/samba/smb.conf domain master = No #修改成no

先啟動samba
代碼: [選擇]
[root@ smb2 ~]# /etc/init.d/nmb  start ; /etc/init.d/smb  start
加入LDAP管理員的密碼至samba
代碼: [選擇]
[root@ smb2 ~]# smbpasswd  -W
設定smbldap-tools script configuration
代碼: [選擇]
[root@ smb2 ~]# perl  /usr/share/doc/smbldap-tools-*/configure.pl . SID for domain LDAP: SID of the domain (can be obtained with 'net getlocalsid home')
  SID for domain LDAP [S-1-5-21-79182496-1355799292-2301990952] >S-1-5-21-2085468683-186526287-1002239668 #這裡要修改成smb1的SID,其餘設定同第四篇筆記

重開samba service,並測試
代碼: [選擇]
[root@ smb2 ~]# /etc/init.d/nmb  restart ; /etc/init.d/smb  restart
代碼: [選擇]
[root@smb2 ~]# testparm Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[home]"
Processing section "[netlogon]"
Loaded services file OK.
Server role: ROLE_DOMAIN_BDC
Press enter to see a dump of your service definitions

代碼: [選擇]
[root@ smb2 ~]# pdbedit  -Lv
測試完畢後,關閉samba、卸載home目錄,把DRBD降級成secondary;準備開始設置HA時,兩台主機的DRBD狀態都是 :
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    Connected      Secondary/Secondary       UpToDate/UpToDate                C


Heartbeat(heartbeat-3.0.4-1)

複製設定檔至 /etc/ha.d 目錄下
代碼: [選擇]
[root@smb1 ~]# cp  /usr/share/doc/heartbeat-3.0.4/ha.cf  /etc/ha.d/
[root@smb1 ~]# cp  /usr/share/doc/heartbeat-3.0.4/authkeys   /etc/ha.d/
[root@smb1 ~]# cp  /usr/share/doc/heartbeat-3.0.4/haresources   /etc/ha.d/

一樣,只要先在smb1主機上去修改設定,然後再copy到smb2上就可以了。

smb1主機設定 :
Heartbeat通訊設定檔
代碼: [選擇]
[root@smb1 ~]# vim  /etc/ha.d/ha.cf debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility local0

keepalive 2           #每2秒會去偵測對方是否存活(心跳間隔)

deadtime 15   #如果smb2主機在15秒內沒有收到smb1的心跳信號,就會開始接管資源

warntime 5    #當備用節點(smb2)在5秒內沒有收到主節點(smb1)的心跳,就會在LOG中寫入一個警告訊息,但還不會切換服務

initdead 60            #第一次啟動heartbeat或重新開機時,超過60秒仍未完成雙方的連線,則判定服務啟動失敗

udpport 694

ucast eth0 192.168.1.5
ucast eth1 192.168.100.2
#smb2的IP (心跳線)

auto_failback off
#當smb2接管資源後,不允許smb1恢復正常運作時重新接管資源

node smb1
node smb2
#兩台主機的hostname,要和『uname  -n』相同

ping 192.168.1.1
#當網路(網卡) 失效時測試連線狀態用的,這裡指向小弟的DNS+DHCP server


respawn hacluster /usr/lib64/heartbeat/ipfail
respawn hacluster /usr/lib64/heartbeat/dopd
#設定與heartbeat 一起啟動、關閉的程序
《ipfail與dopd (drbd outdate-peer daemon)算是heartbeat的小工具;ipfail是用來檢測和處理網路故障,配合ping 這個參數來檢測;dopd是規範當我們的DRBD資料不同步時不允許切換。》

apiauth dopd gid=haclient uid=hacluster
apiauth ipfail gid=haclient uid=hacluster
#設定dopd、ipfail啟動時所使用的gid與uid


Heartbear資源設定檔
代碼: [選擇]
[root@smb1 ~]# vim  /etc/ha.d/haresources #在最後一行新增以下內容
smb1 IPaddr::192.168.1.6/24/eth0 drbddisk::home Filesystem::/dev/drbd0::/home::ext4 rpcbind nfs nmb smb


設定內容可分成五個部份來看 :

『smb1』: 預設Primary node的FQDN

『IPaddr::192.168.1.6/24/eth0』: 虛擬叢集的IP,設定在eth0網卡上

『drbddisk::home』: DRBD的資源名稱

『Filesystem::/dev/drbd0::/home::ext4』: DRBD的裝置,掛載點,檔案系統格式

『rpcbind  nfs  nmb  smb』: 要啟動的服務;啟動時是左到右,關閉是由右到左


Heartbear驗證設定檔
這個檔案主要是用在叢集主機節點 (Cluster Node) 之間的驗證檔,主機都必須具備此一檔案才會被認為是身處在同一個叢集中。

代碼: [選擇]
[root@smb1 ~]# vim  /etc/ha.d/authkeys auth 2
2 sha1 HI!

authkeys的權限一定要600才可以
代碼: [選擇]
[root@smb1 ~]# chmod 600 /etc/ha.d/authkeys

smb2主機設定 :

把先前smb1做好的設定檔scp過來
代碼: [選擇]
[root@smb2 ~]# scp smb1:/etc/ha.d/ha.cf /etc/ha.d/
[root@smb2 ~]# scp smb1:/etc/ha.d/haresources /etc/ha.d/
[root@smb2 ~]# scp smb1:/etc/ha.d/authkeys /etc/ha.d/

修改Heartbeat通訊設定檔
代碼: [選擇]
[root@smb2 ~]# vim /etc/ha.d/ha.cf#找到以下兩行,並修改成smb1的I
ucast eth0 192.168.1.4
ucast eth1 192.168.100.1


確認authkeys的權限是否為600
代碼: [選擇]
[root@smb2 ~]# ll /etc/ha.d/authkeys-rw-------. 1 root root 693 2012-11-12 23:08 /etc/ha.d/authkeys



接下來就是要將heartbeat設定成開機啟動,但要注意必須先啟動DRBD才可啟動heartbeat,否則系統在啟動過程中會因為DRBD還沒啟動 ( /dev/drbd0 尚未啟動),進而造成heartbeat啟動失敗。

代碼: [選擇]
[root@smb1 ~]# chkconfig heartbeat on
[root@smb2 ~]# chkconfig heartbeat on

檢查DRBD及heartbeat啟動順序
代碼: [選擇]
[root@smb1 ~]# ll /etc/rc.d/rc5.d/S7*/etc/rc.d/rc5.d/S70drbd -> ../init.d/drbd
/etc/rc.d/rc5.d/S75heartbeat -> ../init.d/heartbeat

代碼: [選擇]
[root@smb2 ~]# ll /etc/rc.d/rc5.d/S7*/etc/rc.d/rc5.d/S70drbd -> ../init.d/drbd
/etc/rc.d/rc5.d/S75heartbeat -> ../init.d/heartbeat

啟動heartbeat
代碼: [選擇]
[root@smb1 ~]# service heartbeat startStarting High-Availability services: INFO: Resource is stopped
Done.

代碼: [選擇]
[root@smb2 ~]# service heartbeat startStarting High-Availability services: INFO: Resource is stopped
Done.

檢查smb1狀態
代碼: [選擇]
[root@smb1 ~]# service drbd startdrbd driver loaded OK; device status:
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by dag@Build64R6, 2012-09-04 12:06:10
m:res       cs                    ro                                     ds                                              p     mounted     fstype
0:home    Connected      Primary/Secondary           UpToDate/UpToDate                 C     /home         ext4

代碼: [選擇]
[root@smb1 ~]# df -h/dev/drbd0          4.9G  138M  4.5G   3%  /home

代碼: [選擇]
[root@smb1 ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:78:91:1d brd ff:ff:ff:ff:ff:ff
inet 192.168.1.4/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.6/24 brd 192.168.1.255 scope global secondary eth0:0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:f3:31:04 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 brd 192.168.100.255 scope global eth1

代碼: [選擇]
[root@smb1 ~]# netstat -tunlp
#看是否有開啟nmbd (137、138) 及smbd (139) 的LISTEN port

由上面的資訊可看到heartbeat已經幫我們自動開啟先前設定的所有服務了。

至於要怎麼手動切換Active node 到smb2主機上?!
很簡單,只要把目前的Active node重新啟動heartbeat即可
代碼: [選擇]
[root@smb1 ~]# service heartbeat restart接著再去smb2檢查看看,資訊應該與上面檢查smb1的狀態相同。


災難測試
實作完成後當然要來測試一下囉!否則怎麼知道設定是否正確和所謂的『high availability』到底好不好用....
測試方向小弟採三種方式 :
1. smb1(Active node)的eth0網卡關閉,smb2是否會自動接管,smb1的eth0網卡恢複運作,smb2繼續接管並不會轉交回smb1
2. smb1、smb2的eth1網卡(192.168.100.0/24)關閉
3. smb2(目前的Active node)直接關閉電源,smb1是否會自動接管


1. 停用smb1的eth0網卡
代碼: [選擇]
[root@smb1 ~]# ifdown eth0
可開啟smb2的ha-log來觀察轉換的過程,由於資訊量很多小弟就不貼出來了,總之就是會發現smb1掛掉了(Link smb1:eth0 dead ),smb2告訴其他人我還活著(Telling other node that we have more visible ping nodes),接著smb2開始接手資源(acquire [all] resources from smb1)以及啟動服務,最後完成接管的動作(remote resource transition completed.)。

此時可至smb2上觀察eth0會多一個192.168.1.6的IP,DRBD的狀態應該也是Primary node等等...

重新啟動smb1的eth0網卡
代碼: [選擇]
[root@smb1 ~]# ifup eth0可發現heartbeat應該不會有任何的動作才對,Active node還在smb2上。


2. smb1、smb2的eth1網卡(192.168.100.0/24)關閉
這種作法會有兩種不同的狀態,假設目前DRBD的Primary node是smb1,eth1網卡有問題斷線,則雙方的DRBD的狀態會是
代碼: [選擇]
[root@smb1 ~]# service drbd statusm:res       cs                    ro                                     ds                                              p           mounted     fstype
0:home    StandAlone      Primary/Unknown            UpToDate/Outdated                  r-----    ext4

代碼: [選擇]
[root@smb2 ~]# service drbd statusm:res       cs                      ro                                     ds                                              p           mounted     fstype
0:home    WFConnection   Secondary/Unknown        Outdated/DUnknown                C

代碼: [選擇]
[root@smb1 ~]# ifup eth1
重新連接『home』資源
代碼: [選擇]
[root@smb1 ~]# drbdadm connect home

如果是Secondary node → smb2的eth1網卡斷線,雙方的DRBD狀態為
代碼: [選擇]
[root@smb1 ~]# service drbd statusm:res       cs                      ro                                     ds                                              p           mounted     fstype
0:home    WFConnection   Primary/Unknown            UpToDate/Outdated                  C           /home         ext4

代碼: [選擇]
[root@smb2 ~]# service drbd statusm:res       cs                    ro                                     ds                                              p           mounted     fstype
0:home    StandAlone     Secondary/Unknown        Outdated/DUnknown                r-----

代碼: [選擇]
[root@smb2 ~]# ifup eth1
重新連接『home』資源或重啟DRBD
代碼: [選擇]
[root@smb2 ~]# drbdadm connect homeor
代碼: [選擇]
[root@smb2 ~]# service drbd restart

3. 在smb1主機(Active node)上強制關閉電源,結果應與第1個測試相同,smb2會接管。

Split-Brain(裂腦)
簡單來說,就是DRBD無法判斷各節點之間的主從關係。
split-brain實際上是指在某種情況下,造成drbd的兩個節點斷開了連接,都以primary的身份來運作。當drbd某個primary node連接對方節點準備發送資訊的時候如果發現對方也是primary的狀態,那麼會立刻自行斷開連接,並認定當下已經發生split-brain,這時候會在log中記錄『Split-Brain detected,droppingconnection!』,也就是主機偵測到split-brain的狀況已經發生,但內建機制已無法自動解決問題,為了保全資料因此拒絕所有連線。
當發生split-brain之後,如果查看連接狀態,其中至少會有一個是StandAlone狀態,另外一個可能也是StandAlone (如果是同時發現split brain狀態),也有可能是WFConnection的狀態。

代碼: [選擇]
[root@smb1 ~]# service drbd statusm:res       cs                    ro                                     ds                                              p           mounted     fstype
0:home    StandAlone     Primary/Unknown             UpToDate/Outdated                  r-----    ext4

代碼: [選擇]
[root@smb2 ~]# service drbd statusm:res       cs                    ro                                     ds                                              p           mounted     fstype
0:home    StandAlone     Secondary/Unknown        UpToDate/Outdated                  r-----   

smb1為DRBD的primary,而smb2為secondary,此時分別查看兩台主機的DRBD狀態會發現,cs欄位為『StandAlone』,表示雙方皆認為只剩下自己在維持資料同步的服務;ds欄位為『UpToDate/Outdated』,表示雙方皆認為自己的資料是最新的,並等待備用主機來跟自己同步資料;p欄位為『r-----』,表示目前沒有採用任何資料同步複製模式來進行資料同步的動作。

split-brain有兩種解決辦法:
手動處理
假設想保留目前smb1上的資料,並且放棄smb2上的資料時....

首先要設定smb2的DRBD資源角色為secondary node
代碼: [選擇]
[root@smb2~]# drbdadm secondary home
放棄DRBD的資料
代碼: [選擇]
[root@smb2~]# drbdadm -- --discard-my-data connect home
接著設定smb1 :
重新連接DRBD資源
代碼: [選擇]
[root@smb1~]# drbdadm connect home
設定DRBD資源角色成為primary node
代碼: [選擇]
[root@smb1~]# drbdadm primary home
之後再度查看雙方的DRBD狀態,可以發現兩台主機已恢復正常了。

自動處理(這裡小弟還沒有測試完)
自動處理策略定義如下:
after-sb-0pri
當兩個節點的狀態都是secondary時,可以通過after-sb-0pri策略自動恢復。

1)disconnect
默認策略,沒有自動恢復,簡單的斷開連接。

2)discard-younger-primary
在split-brain發生前從主節點自動同步。

3)discard-older-primary
在split-brain發生時從變成primary的節點同步資料。

4)discard-least-changes
在split-brain發生時從資料區塊最多的節點同步資料。

5)discard-node-NODENAME
自動同步到指定的名稱節點。

after-sb-1pri
當兩個節點的狀態只有一個是primary時,可以通過after-sb-1pri策略自動恢復。

1)disconnect
默認策略,沒有自動恢復,簡單的斷開連接。

2)consensus
丟棄secondary或者簡單的斷開連接。

3)discard-secondary
丟棄secondary數據。

4)call-pri-lost-after-sb
按照after-sb-0pri的策略執行。

after-sb-2pri
當兩個節點的狀態都是primary時,可以通過after-sb-2pri策略自動恢復。

1)disconnect
默認策略,沒有自動恢復,簡單的斷開連接。

2)violently-as0p
按照after-sb-0pri的策略執行。

3)call-pri-lost-after-sb
按照after-sb-0pri的策略執行,並丟棄其他節點。

配置自動恢復
編輯『/etc/drbd.d/global_common.conf』,找到『net』部分,配置策略如下,所有節點完全一致。

after-sb-0pri discard-younger-primary;

after-sb-1pri discard-secondary;

after-sb-2pri call-pri-lost-after-sb;


資料來源:http://blog.csdn.net/kntao/article/details/7790263

LVM
最早開始規劃partition時,已經把smb1、smb2的單獨切一個分割區出來,並做成LVM,名稱為 /dev/VolGroup/lv_home,也就是我們的DRBD資源裝置,現在就來玩玩如何線上增加drbd resource的容量。

目前的容量 (兩台主機相同) :
代碼: [選擇]
[root@smb1~]# df -h檔案系統         Size    Used     Avail    Use%    掛載點
/dev/drbd0   4.9G   138M    4.5G    3%       /home

代碼: [選擇]
[root@smb1~]# lvsLV            VG              Attr          LSize
lv_home   VolGroup    -wi-ao--   4.88g

先增加1G的容量給LV (兩台主機都要執行) :
代碼: [選擇]
[root@smb1~]# lvresize -L +1G /dev/VolGroup/lv_homeExtending logical volume lv_home to 5.88 GiB
Logical volume lv_home successfully resized

代碼: [選擇]
[root@smb2~]# lvresize -L +1G /dev/VolGroup/lv_homeExtending logical volume lv_home to 5.88 GiB
Logical volume lv_home successfully resized

重置drdb resource(只需在primary主機上執行)
代碼: [選擇]
[root@smb1~]# drbdadm resize home
重置檔案系統容量 (只需在primary主機上執行)
代碼: [選擇]
[root@smb1~]# resize2fs /dev/drbd0resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/drbd0 is mounted on /home; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/drbd0 to 1542087 (4k) blocks.
The filesystem on /dev/drbd0 is now 1542087 blocks long.

查看容量
代碼: [選擇]
[root@smb1~]# df -h檔案系統         Size    Used     Avail    Use%    掛載點
/dev/drbd0   5.8G   138M    4.5G    3%       /home

手動切換Active node,並觀察smb2
代碼: [選擇]
[root@smb1~]# service heartbeat restart
代碼: [選擇]
[root@smb2~]# df -h檔案系統         Size    Used     Avail    Use%    掛載點
/dev/drbd0   5.8G   138M    4.5G    3%       /home


以上就是小弟初學成的筆記,還望各位大大們賜教,謝謝!!!

11
LDAP 討論區 / 請益大大們兩個問題
« 於: 2012-10-27 23:38 »
1. ldap server我有兩台,採用mirrormode,client方面設定都OK也運作正常,小弟假設ldap1掛掉了,雖然client會去找到ldap2,但是中間過程約花60秒左右,在log中看到以下三行會重復三次

nslcd[1531]: [a2a8d4] ldap_result() timed out
nslcd[1531]: [a2a8d4] failed to bind to LDAP server ldap://ldap1.split.com.tw: Can't contact LDAP server: Transport endpoint is not connected
nslcd[1531]: [a2a8d4] connected to LDAP server ldap://ldap2.split.com.tw

設定了nslcd.conf的幾個TIMING/RECONNECT OPTIONS後似乎還是沒有用.....所以,有沒有方法能夠設定如10秒內無法連到ldap1就會去找uri設定的第二台主機?!


2. 關於sambaPDC的問題,如果ldap1與ldap2的rootdn或rootpw設定不相同,則如果一樣是ldap1掛掉時,則會出現:
failed to bind to server ldap://ldap1.split.com.tw ldap://ldap2.split.com.tw with dn="cn=admin,dc=split,dc=com,dc=tw" Error: Invalid credentials

但使用相同的rootdn和rootpw又沒這個問題,請問大大們有方法能夠把兩台不同的dn和pw同時寫進secrets.tdb裡呢?!
smb.conf的ldap admin dn能不能夠設定兩個rootdn?!


以上,感謝!

12
總算完成了,這份筆記能夠成功生產下來也靠了netman大大與三子大大  ;D
先感謝這兩位大大,謝謝!!

在這兒也先祝各位中秋節快樂!! :D

小弟原先的想法是ldap1用NFS去掛"home" server,但是實作後發現在windows登入時會發生問題,所以,為了簡單點,samba PDC就直接做在"home" server那台上面。

LDAP使用原先的架構(請參考http://phorum.study-area.org/index.php/topic,67535.0.html),其中"home" server小弟的OS更新為CentOS6.3_x64,其餘設定都沒變。

當初建立LDAP時並沒有把samba包含在內,所以我們首先要做的就是加入samba.schema,使LDAP支援"sambaSamAccount",另外LDAP server也加入到LDAP client中(加入方法請參考http://phorum.study-area.org/index.php/topic,67626.0.html)。
要特別注意,如果LDAP有做複製功能(Replication)的話,小弟建議是用MirrorMode的方式,這樣萬一"ldap1"掛掉了,我們還是可以用"ldap2"來做修改(設定方法請參考http://phorum.study-area.org/index.php/topic,67566.0.html)

LDAP 支援 samba 設定 (ldap1與ldap2相同設定) :
在目前版本中(2.4.23-26.el6),/etc/openldap/schema預設沒有samba.schema,必須要先安裝samba才可以
代碼: [選擇]
[root@ldap1 ~]# yum  install  -y  samba
安裝完後 /etc/openldap/schema應該就可以看到 samba.schema,如果沒有的話...
代碼: [選擇]
[root@ldap1 ~]# cp  /usr/share/doc/samba-*/LDAP/samba.schema   /etc/openldap/schema/

接下來修改slapd.conf
代碼: [選擇]
[root@ldap1 ~]# vim  /etc/openldap/slapd.conf===============================================================================
##新增紅色字體##
include         /etc/openldap/schema/samba.schema

access to attrs=userPassword,sambaLMPassword,sambaNTPassword
        by self write
        by anonymous auth
        by * none

### database definitions ###

index   sambaSID,sambaSIDList,sambaGroupType    eq,pres
===============================================================================

修改完後
代碼: [選擇]
[root@ldap1 ~]# cd  /etc/openldap/
[root@ldap1 openldap]# rm  -rf  slapd.d/*
[root@ldap1 openldap]# slaptest  -f  slapd.conf  -F  slapd.d
[root@ldap1 openldap]# chown  -R  ldap:ldap  slapd.d
[root@ldap1 openldap]# /etc/init.d/slapd restart

使用者的資料先前我沒有設定samba屬性 (attribute),為了節省麻煩,可以把先前的LDAP資料匯出,用slapcat  -l 或是用phpldapadmin的匯出功能;小弟是使用phpldapadmin的export,除了簡單好用之外,匯出的ldif檔也不會因為有中文關係而顯示亂碼。
匯出後,偷懶一點就直接使用phpldapadmin把People底下的NIKO和PING這兩個user直接刪除。

到此LDAP就算暫時完成了,但是請記得,因為兩台LDAP(ldap1、ldap2)現在是使用MirrorMode,所以雙方的資料要確保相同,避免稍後增加資料時產生雙方的資料錯誤無法同步。

Samba PDC (Primary Domain Controller) 設定
smabPDC server = hostname:home,ip:192.168.1.4

小叮嚀:要設定PDC之前必須先把server也加入到LDAP client中才可以喔!

安裝samba(版本為3.5.10-125) 與 smbldap-tools(版本為0.9.6-3)
##smbldap-tools需先安裝EPEL來源##
代碼: [選擇]
[root@home ~]# yum  -y  install  samba  smbldap-tools

設定sambaPDC
先備份原本的smb.conf
代碼: [選擇]
[root@home ~]# mv  /etc/samba/smb.conf  /etc/samba/smb.conf.bak
Copy smbldap-tools裡的smb.conf到 /etc/samba中
代碼: [選擇]
[root@home ~]# cp  /usr/share/doc/smbldap-tools-*/smb.conf  /etc/samba/smb.conf
設定smb.conf,這裡有不清楚的地方可以參考鳥哥的說明http://linux.vbird.org/
代碼: [選擇]
[root@home ~]# vim  /etc/samba/smb.conf ===============================================================================
##修改紅字部份##
[global]

workgroup = LDAP         
         
netbios name = home      

#min passwd length = 3      #密碼最小長度
         
ldap passwd sync = yes      #同步LDAP、NT、LM的密碼

Dos charset = CP950         

Unix charset = UTF-8            

logon home = \\%N\%U         

logon path = \\%N\%U\profiles      

passdb backend = ldapsam:"ldap://ldap1.split.com.tw/   ldap://ldap2.split.com.tw/"

ldap admin dn = cn=admin,dc=split,dc=com,dc=tw

ldap suffix = dc=split,dc=com,dc=tw            

ldap group suffix = ou=Groups,ou=Samba PDC      

ldap user suffix = ou=Users,ou=Samba PDC      
#smbldap-tools會增加許多與PDC有關的user和group,小弟是統一放進ou=Samba PDC,dc=split,dc=com,dc=tw裡面,LDAP要先建立好相對應的上一層,ou=Samba PDC。

delete group script = /usr/sbin/smbldap-groupdel "%g"     #約60行,取消註解

##約64行空白處新增##
ldap ssl = no               
   
smb ports = 139         

load printers = No   
#由於沒有要做印表機伺服器,以下的設定都先註解起來,經測試後如沒有註解掉當windows登入後會有問題

#約87行新增
[homes]
     comment   = Home Directories
     path          = /home/%U
     browsable = no
     read only   = no
     valid users = %S

[netlogon]
     path            = /home/sambPDC/netlogon/     #等等要自行建立資料夾
     browseable = No
     read only     = yes
     guest ok      = yes
#netlogon資料夾與前面的 logon script 有關,該程式放置在這裡
#以下其它設定可註解或刪除…
===============================================================================

設定完成後,檢查設定是否有錯誤及開啟PDC功能。
代碼: [選擇]
[root@home ~]# testparm Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[netlogon]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC
Press enter to see a dump of your service definitions
#以下省略#

建立netlogon目錄與logon.bat
代碼: [選擇]
[root@home ~]# mkdir  -p  /home/sambaPDC/netlogon
[root@home ~]# cd  /home/sambaPDC/netlogon
[root@ home netlogon]# vim  logon.bat
net time \\home /set /yes         #與samba伺服器對時
net use H: \\home\home         #連到自已的家目錄

將logon.bat轉成DOS的斷行格式
代碼: [選擇]
[root@ home netlogon]# yum  -y  install  unix2dos
[root@ home netlogon]# unix2dos  logon.bat
[root@ home netlogon]# cat  -A  logon.bat
net time \\home /set /yes^M$   
net use H: \\home\home^M$

為niko製作profiles目錄
代碼: [選擇]
[root@ home netlogon]# cd  /home/niko
[root@ home niko]# mkdir  proflies
[root@ home niko]# chown  niko:d10  proflies
[root@ home niko]# chmod  755  proflies

啟動samba與smbldap-tools設定
代碼: [選擇]
[root@ home ~]# /etc/init.d/nmb  restart
[root@ home ~]# /etc/init.d/smb  restart
[root@ home ~]# chkconfig  nmb  on
[root@ home ~]# chkconfig  smb  on

加入LDAP管理員的密碼至samba
代碼: [選擇]
[root@ home ~]# smbpasswd  -W Setting stored password for "cn=admin,dc=split,dc=com,dc=tw" in
secrets.tdb
New SMB password:               #輸入LDAP admin的密碼
Retype new SMB password:

查看SID
代碼: [選擇]
[root@ home ~]# net  rpc  getsid Storing SID S-1-5-21-861616483-343575355-114807000 for Domain LDAP in secrets.tdb

設定smbldap-tools script configuration
代碼: [選擇]
[root@ home ~]# perl  /usr/share/doc/smbldap-tools-*/configure.pl
以下內容非常的多,幸好每個要設定的項目都已經有解釋了,所以小弟也就不囉嗦... :)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--
       smbldap-tools script configuration
       -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Before starting, check
 . if your samba controller is up and running.
 . if the domain SID is defined (you can get it with the 'net getlocalsid')

 . you can leave the configuration using the Ctrl-c key combination
. empty value can be set with the "." character
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Looking for configuration files...

Samba Configuration File Path [/etc/samba/smb.conf] >   #Enter

The default directory in which the smbldap configuration files are stored is shown.
If you need to change this, enter the full directory path, then press enter to continue.
Smbldap-tools Configuration Directory Path [/etc/smbldap-tools] >  #Enter
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Let's start configuring the smbldap-tools scripts ...

. workgroup name: name of the domain Samba acts as a PDC for
  workgroup name [LDAP] >      #Enter
. netbios name: netbios name of the samba controller
  netbios name [home] >      #Enter
. logon drive: local path to which the home directory will be connected (for NT Workstations). Ex: 'H:'
  logon drive [H:] >            #Enter
. logon home: home directory location (for Win95/98 or NT Workstation).
  (use %U as username) Ex:'\\home\%U'
  logon home (press the "." character if you don't want homeDirectory) [\\%N\%U] >           #Enter
. logon path: directory where roaming profiles are stored. Ex:'\\home\profiles\%U'
  logon path (press the "." character if you don't want roaming profiles) [\\%N\%U\profiles] >  #Enter
. home directory prefix (use %U as username) [/home/%U] >   #Enter
. default users' homeDirectory mode [700] >       #Enter
. default user netlogon script (use %U as username) [logon.bat] >  #Enter
  default password validation time (time in days) [45] > 99999 
. ldap suffix [dc=split,dc=com,dc=tw] >       #Enter
. ldap group suffix [ou=Groups,ou=Samba PDC] >       #Enter
. ldap user suffix [ou=Users,ou=Samba PDC] >       #Enter
. ldap machine suffix [ou=Computers] >       #Enter
. Idmap suffix [ou=Idmap] >       #Enter
. sambaUnixIdPooldn: object where you want to store the next uidNumber
  and gidNumber available for new users and groups
  sambaUnixIdPooldn object (relative to ${suffix}) [sambaDomainName=LDAP] >      #Enter
. ldap master server: IP address or DNS name of the master (writable) ldap server
  ldap master server [ldap1.split.com.tw] >      #Enter
. ldap master port [389] >   #Enter
. ldap master bind dn [cn=admin,dc=split,dc=com,dc=tw] >    #Enter
. ldap master bind password [] >          #輸入LDAP admin的密碼
. ldap slave server: IP address or DNS name of the slave ldap server: can also be the master one
  ldap slave server [ldap1.split.com.tw] > ldap2.split.com.tw
. ldap slave port [389] >       #Enter
. ldap slave bind dn [cn=admin,dc=split,dc=com,dc=tw] >       #Enter
. ldap slave bind password [] >          #輸入LDAP admin的密碼(ldap2)
. ldap tls support (1/0)
  • > #Enter
    . SID for domain LDAP: SID of the domain (can be obtained with 'net getlocalsid home')
      SID for domain LDAP [S-1-5-21-861616483-343575355-114807000] >   #Enter
    . unix password encryption: encryption used for unix passwords
      unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA) [SSHA] > CRYPT
    . crypt salt format: If hash_encrypt is set to CRYPT, you may set
      a salt format. The default is "%s", but many systems will generate
      MD5 hashed passwords if you use "$1$%.8s"
      crypt salt format [%s] >$1$%.8s
    . default user gidNumber [513] >            #Enter
    . default computer gidNumber [515] >    #Enter
    . default login shell [/bin/bash] >       #Enter
    . default skeleton directory [/etc/skel] >    #Enter
    . default domain name to append to mail address [] >       #Enter
    -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    backup old configuration files:
      /etc/smbldap-tools/smbldap.conf->/etc/smbldap-tools/smbldap.conf.old
      /etc/smbldap-tools/smbldap_bind.conf->/etc/smbldap-tools/smbldap_bind.conf.old
    writing new configuration file:
      /etc/smbldap-tools/smbldap.conf done.
      /etc/smbldap-tools/smbldap_bind.conf done.

    如果中途發現輸入有錯誤,可以到/etc/smbldap-tools去修改smbldap.conf、smbldap_bind.conf這兩個檔案。


    把資訊寫到LDAP
    代碼: [選擇]
    [root@ home ~]# smbldap-populate Populating LDAP directory for domain LDAP (S-1-5-21-861616483-343575355-114807000)
    (using builtin directory structure)
    entry dc=split,dc=com,dc=tw already exist.
    adding new entry: ou=Users,ou=Samba PDC,dc=split,dc=com,dc=tw
    adding new entry: ou=Groups,ou=Samba PDC,dc=split,dc=com,dc=tw
    adding new entry: ou=Computers,dc=split,dc=com,dc=tw
    #中間省略#
    entry sambaDomainName=LDAP,dc=split,dc=com,dc=tw already exist. Updating it...

    Please provide a password for the domain root:
    Changing UNIX and samba passwords for root
    New password:                  #輸入domain root的密碼, windows用來加入LDAP網域用的
    Retype new password:   


    如圖,目前小弟的LDAP



    新增USER至LDAP
    小弟目前只加入NIKO這個帳號,另一個等script寫好後再來測試
    以NIKO為例子,以下為ldif檔的內容,檔名:niko.ldif
    ===============================================================================
    dn: cn=Niko 王大明,ou=People,dc=split,dc=com,dc=tw
    objectClass: posixAccount
    objectClass: top
    objectClass: person
    objectClass: inetOrgPerson
    objectClass: shadowAccount
    objectClass: sambaSamAccount
    cn: Niko 王大明
    uid: niko
    sn: 王
    givenName: 大明
    uidNumber: 1100
    gidNumber: 1000
    shadowLastChange: 15609     #可隨便設定,待會改password時就會自動更改
    shadowMax: 99999
    shadowWarning: 7
    loginShell: /bin/bash
    homeDirectory: /home/niko
    mail: niko@split.com.tw
    sambaAcctFlags: [U ]
    sambasid: S-1-5-21-861616483-343575355-114807000-1100
    sambaPrimaryGroupSID: S-1-5-21-861616483-343575355-114807000-513
    ===============================================================================
    sambasid、sambaPrimaryGroupSID,除了最後的 ”-“ ,前面號碼必須要與我們的home server那台機器的SID相同才行,至於最後那組號碼,sambasid可隨意設定但不可重複,這裡我們就使用與uidNumber相同即可,而sambaPrimaryGroupSID的最後一組號碼,就是“cn=Domain Users ,ou=Groups,ou=Samba PDC” 的群組碼。
    userPassword、sambaLMPassword、sambaNTPassword,這三個與密碼有關的屬性,等等我們會藉由smbldap-tools來做變更就可以了。

    匯入,小弟直接在"home" server上操作
    代碼: [選擇]
    [root@ home ~]# ldapmodify  -h  ldap1  -D  "cn=admin,dc=split,dc=com,dc=tw"  -W  -x  -a  -v  -f  niko.ldif ldap_initialize( ldap://ldap1 )
    Enter LDAP Password:         
    #以下就省略囉#

    設定niko密碼
    代碼: [選擇]
    [root@ home ~]# smbldap-passwd  niko Changing UNIX and samba passwords for niko
    New password:
    Retype new password:

    完成後,可以到phpldapadmin看看NIKO是不是已經把有關密碼的屬性都補齊了,然後檢查Samba PDC部份
    代碼: [選擇]
    [root@ home ~]# pdbedit  -Lv  niko ===============================================================================
    Unix username:        niko
    NT username:          niko
    Account Flags:        [U          ]
    User SID:             S-1-5-21-861616483-343575355-114807000-1100
    Primary Group SID:    S-1-5-21-861616483-343575355-114807000-513
    Full Name:            Niko 王大明
    Home Directory:       \\home\niko
    HomeDir Drive:        H:
    Logon Script:         logon.bat
    Profile Path:         \\home\niko\profiles
    Domain:               LDAP
    Account desc:         
    Workstations:         
    Munged dial:         
    Logon time:           0
    Logoff time:          never
    Kickoff time:         never
    Password last set:    Thu, 27 Sep 2012 23:16:36 CST
    Password can change:  Thu, 27 Sep 2012 23:16:36 CST
    Password must change: never
    Last bad password   : 0
    Bad password count  : 0
    Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
    ===============================================================================
    注意Home Directory、Profile Path這兩個部份,指向的位置是否正確。


    SELinux("home" server)

    samba_domain_controller --> on
    samba_enable_home_dirs --> on
    samba_export_all_rw --> on
    samba_share_nfs --> on
    use_samba_home_dirs --> on

    請檢查是否都有開啟;iptables小弟就不多做說明了... ;D


    設定windows XP Client

    小弟參考samba官網對win7的說明 :
    ===============================================================================
    NOTES: with Samba 3.3.2, 3.3.3 and 3.3.4
    Only for these versions, you have to change the NETLOGON parameters.
           HKLM\System\CCS\Services\Netlogon\Parameters
               DWORD  RequireSignOrSeal = 0
               DWORD  RequireStrongKey = 0
    For other versions, you must not change them.
    ===============================================================================
    而我的samba版本為3.5.10,乾脆也不修改試試,結果也是可以加入網域的



    輸入先前設定好的domain root名稱與密碼


    加入後需要重新開機


    接著我們就可以使用niko這個帳號來登入,登入成功後檢查是否為漫遊及有沒有吃到logon.bat




    接下來的重頭戲就是在桌面上隨便建test目錄,然後登出,再回到"home" server上看看niko的profiles下是否會有這個目錄存在。
    代碼: [選擇]
    [root@ home ~]# ls  -l  /home/niko/profiles/桌面 total 4
    drwxr-xr-x. 2 niko d10 4096 Sep 27 23:51 test


    設定windows 7 Client

    一樣根據Samba官網的說明 :
     
    Windows 7 Registry settings
    --------------------------------------------------------------------------------------------
    There are currently two registry settings required to be added on the Windows 7 client prior to joining a Samba Domain. These are :
    --------------------------------------------------------------------------------------------
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters
    DomainCompatibilityMode = 1 [ DWORD (32 bit) ]
    DNSNameResolutionRequired = 0 [ DWORD (32bit) ]
    --------------------------------------------------------------------------------------------
    Make sure to either reboot Windows 7 or restart the LanmanWorkstation service after setting these entries.

    Do not edit any other registry parameters (NETLOGON) that have been seen in the wild. If you have already modified your Windows 7 registry, please make sure to reset the keys to their default values.
    If you have changed the NETLOGON Parameters, make sure and turn them back to '1' as shown below:
    --------------------------------------------------------------------------------------------
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Netlogon\Parameters
               DWORD  RequireSignOrSeal = 1 [ DWORD (32 bit) ]
               DWORD  RequireStrongKey = 1 [ DWORD (32bit) ]
    --------------------------------------------------------------------------------------------

    所以,win 7要去修改
    DomainCompatibilityMode = 1 [ DWORD (32 bit) ]
    DNSNameResolutionRequired = 0 [ DWORD (32bit) ]
    這兩個機碼

    接下來的問題小弟也研究了很久,但總覺得並不是非常完美的做法,懇請各位大大們可否教導我有沒有更好的設定方式....

    加入網域時會發生


    有關WINS的說明 : http://zh.wikipedia.org/wiki/WINS

    要如何在我們的samba上設定小弟還沒研究出來,但是有另外兩種設定方式

    1.直接從DHCP下手,這樣就不需要一台一台的去設定

    DHCP server,指定wins (netbios) 伺服器 :
    在dhcpd.conf檔裡新增
    option netbios-name-servers  192.168.1.4;  ←我們的home server IP
                         
    2.手動在win7設定

    請在網卡上按右鍵 → 內容


    點選內容後,選擇右下方的進階


    到wins的分頁中,把我們的home server 的IP新增進去


    然後,就可以加入網域了,但是....


    samba官網的說明是 :
    ===============================================================================
    NOTES: Error message during joining to the Domain
    You will receive one warning about DNS domain name configuration after the join has succeeded:

       "Changing the Primary Domain DNS name of this computer to "" failed.
        The name will remain "MYDOM".  The error was:
        The specified domain either does not exist or could not be contacted"

    This warning can be ignored or silenced with setting other registry keys.
    There is a hotfix available from Microsoft to address this, see KB2171571: http://support.microsoft.com/kb/2171571
    ===============================================================================
    哈哈~~~不是我們的問題,所以小弟就懶得理它.....

    但是用win7登入後,個人家目錄下會多出一個profiles.V2的目錄,用來儲存win7的設定;小弟試過把profiles、profiles.V2都砍掉,重新建一個profiles,但....win7還是搞一個.V2出來,是唱反調嗎?! 這部份也還沒完全找出原因。

    大致上已經做好了我們整個環境,可用linux、win xp、win7登入,個人設定也都可以正確的寫入自己的家目錄中,但是還有一些小問題是小弟在測試時所遇到的

    WIN7問題

    1.使用LDAP登入時會變的很慢,網路上找到的方法是去修改smb.conf
    ===============================================================================
    [profiles]
           path = /home/%U/profiles
           read only = no
           create mask = 0600
           directory mask = 0700
           browseable = No
           guest ok = No
           profile acls = yes
           csc policy = disable

    [profiles.V2]
            copy = profiles
            browseable = no
    ===============================================================================
    但是似乎沒用,還是一樣很慢。


    2.在登入後,會跳出一個desktop.ini的檔案,內容是 :

    [.ShellClassInfo]
    LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21787

    #最後那組數字不一定

    雖然不影響操作,但一定有地方沒設定好,目前還找不到解決辦法。


    3.如果ldap1掛掉,win7的登入會變得非常慢,XP倒是不會影響很大


    Smbldap-tools問題

    正常來說使用wondows登入後,smbldap-tools會自動幫我們新增機器碼 (pc-name$) 到LDAP中,但是如果ldap1掛掉,就會無法去寫入LDAP,/etc/smbldap-tools/smbldap_bind.conf 有提到,you can specify two different configurations if you use a master ldap for writing access and a slave ldap server for reading access. By default, we will use the same DN (so it will work for standard Samba release)
    這個問題目前研究中....



    以上,雖然覺得不完美,但也算是一個可運作的samba PDC了,接下來的問題是,依照小弟的些微經驗來說,一般user都很喜歡把東西直接丟在Desktop上,哪怕有多分割一塊空間給使用者來存放,不過好像還是很愛丟在桌面....="=
    這時候"home" server就絕對不能掛掉,所以小弟想到了用HA+DRDB來重新架設,至於LDAP是否也可以?!
    看來小弟還有非常多的東西要學習了..... :P

13
NFS server的主要目的是開放LDAP user的家目錄以便統一管理,所以第一步要先做的就是把nfs server設定成LDAP client


NFS server (hostname:HONE ip:192.168.1.4)

1. 設定 LDAP client

先安裝套件
代碼: [選擇]
[root@home ~]# yum -y install openldap-clients nss-pam-ldapd

以下開始會牽扯到PAM,這部份小弟就不囉嗦了,鳥哥的網站說明的比較詳細.... ;D


接著就開始我們的手動設定.... ;)

代碼: [選擇]
[root@home ~]# vim /etc/openldap/ldap.conf#add
BASE dc=split,dc=com,dc=tw
URI ldap://ldap1.split.com.tw ldap://ldap2.split.com.tw     #因為有做兩台LDAP server(MirrorMode),目的就是其中一台掛點還有另一台可用


代碼: [選擇]
[root@home ~]# vim  /etc/nslcd.conf #add
uri ldap://ldap1.split.com.tw   ldap://ldap2.split.com.tw
base dc=split,dc=com,dc=tw
ssl no
tls_cacertdir /etc/openldap/cacerts


代碼: [選擇]
[root@home ~]# vim  /etc/pam_ldap.conf #約17行加註解 :
#host 127.0.0.1

#約20行修改 :
base dc=split,dc=com,dc=tw

#在最後面新增 :
uri ldap://ldap1.split.com.tw   ldap://ldap2.split.com.tw
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password crypt


代碼: [選擇]
[root@home ~]# vim  /etc/pam.d/system-auth #%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.

auth   required   pam_env.so
auth   sufficient   pam_fprintd.so
auth   sufficient   pam_unix.so nullok try_first_pass
auth   requisite   pam_succeed_if.so uid >= 500 quiet
auth   sufficient   pam_ldap.so use_first_pass                      #add
auth   required   pam_deny.so

account   required   pam_env.so
account   sufficient   pam_fprintd.so
account   sufficient   pam_unix.so nullok try_first_pass
account   [default=bad success=ok user_unknown=ignore]   pam_ldap.so                  #add
account   required   pam_permit.so

password   required   pam_cracklib.so try_first_pass retry=3 type=
password   sufficient   pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password   sufficient   pam_ldap.so use_authtok                            #add
password   required   pam_deny.so

session   optional   pam_env.so
session   sufficient   pam_fprintd.so
session   [success=1 default=ignore]   pam_succeed_if.so service in crond quiet use_uid
session   required   pam_unix.so
session   optional   pam_ldap.so                               #add


代碼: [選擇]
[root@home ~]# vim  /etc/nsswitch.conf passwd:       files ldap      # line 33: add
shadow:    files ldap      # add
group:       files ldap      # add

netgroup:       ldap         # line 57: change

automount:       files ldap      # line 63: change
aliases:         files ldap      # line 65: change


代碼: [選擇]
[root@home ~]# vim  /etc/sysconfig/authconfig USELDAPAUTH=yes      # line 13: change
USELDAP=yes            # line 21: change


開機時啟動nslcd (local LDAP name service daemon)
代碼: [選擇]
[root@home ~]# chkconfig  nslcd  on

代碼: [選擇]
[root@home ~]# vim  /etc/pam.d/password-auth
修改內容與 /etc/pam.d/system-auth 相同,請回到設定system-auth 的地方參考內容即可。
根據官方文件的說法:在Red Hat Enterprise Linux 6 (或以上),sshd 與其它遠端服務(例如 ftpd)的 PAM 模組包含在/etc/pam.d/password-auth 檔案裡,而不是/etc/pam.d/system-auth。


設定完成後請重開機,LDAP client的設定大致上就完成了,但是因為還沒建立家目錄,使用GNOME登入可能會有問題,如要檢查是否有成功抓到LDAP,可以到runlevel 3試試看 :
代碼: [選擇]
[root@home ~]# id  niko
uid=1100(niko) gid=1000(d10) groups=1000(d10),1002(d30)

or

代碼: [選擇]
[root@home ~]# finger  niko Login: niko                    Name: Niko 王大明
Directory: /home/niko                  Shell: /bin/bash
Never logged in.
No mail.
No Plan.


2.設定好LDAP client之後,接下來就可以開始建立並分享家目錄了
版面佔太多了,以niko為例子就好   :P

先把個人家目錄建立起來
代碼: [選擇]
[root@home ~]# mkdir  /home/niko
代碼: [選擇]
[root@home ~]# cp  -r  /etc/skel/.bash*  .gnome2/  .mozilla/  /home/niko/            #這裡不設定也沒關係

代碼: [選擇]
[root@home ~]# chown  -R  niko:d10  /home/niko/
代碼: [選擇]
[root@home ~]# chmod  700  home/niko/


設定NFS分享家目錄 : 這裡小弟就不多做說明了,詳細說明請看鳥哥

設定/etc/exports
代碼: [選擇]
[root@home ~]# vim  /etc/exports
/home   *(rw,sync,root_squash)


啟動
代碼: [選擇]
[root@home ~]# /etc/init.d/nfs  restart
代碼: [選擇]
[root@home ~]# chkconfig  nfs  on


client端設定autofs (hostname:client  ip:192.168.1.5) : (LDAP client的設定請參考上面的設定)

代碼: [選擇]
[root@client ~]# vim  /etc/auto.master #加入
/home   /etc/auto.home


代碼: [選擇]
[root@client ~]# vim  /etc/auto.home
*       -rw,bg     home:/home/&

刪除家目錄
代碼: [選擇]
[root@client ~]# rm  -rf  /home


啟動autofs
代碼: [選擇]
[root@client ~]#/etc/init.d/autofs  stop
代碼: [選擇]
[root@client ~]# /etc/init.d/autofs  start
代碼: [選擇]
[root@client ~]# chkconfig  autofs  on
完成後,可先用su指令來切換user測試看看是否能進入家目錄,
如果可成功進入,就可以用GNOME登入了。


postfix and dovecot (hostname:mail  ip:192.168.1.6) :只要把LDAP client和autofs home的部份設定好,postfix與dovecot依照基本的設定即可,mail server上記得要:
代碼: [選擇]
[root@mail ~]# touch  /var/spool/mail/niko
代碼: [選擇]
[root@mail ~]# chown  niko:mail  /var/spool/mail/niko
代碼: [選擇]
[root@mail ~]# chmod  660  /var/spool/mail/niko

完成.....小弟下一個目標是samba PDC與LDAP,這部份完成後小弟想把整個流程寫一個script(完了....這是我最害怕的 :'( ),未來如果有新增人員,只要寫寫資料就可以把所有的東西都建立好  ;D

14
不過好像會變成打廣告的樣子....對不起小弟來亂的.... :P
其實小弟想問有沒有大大願意割愛 "tcp/ip illustrated. vol.2(國際中文版)上/下" 這兩本的書....

15
LDAP 討論區 / 02.LDAP Replication 筆記
« 於: 2012-09-01 15:49 »
大家好,小弟已經把Replication的筆記整理好了,這部份的設定其實很簡單,但是有很多設定上的意思需要去理解它,為了這部份小弟在網路上爬了非常多的文獻,因此,還是老話一句,如有觀念或是解釋上有任何不對的地方,請各位大大們給予指教,謝謝!! :)


Replication

RFC 4533 概述了 LDAP Content Synchronization Operation,它是由 LDAP Sync 複製引擎在 OpenLDAP 中實現的,稱為 syncrepl。

syncrepl 構建為一個覆蓋(overlay),插入在 slapd 核心和後端資料庫之間。對樹的所有寫入由 syncrepl 引擎來跟蹤,不需要另一個單獨的服務。除了複製機制和角色之外,其概念與 slurpd 相似。

syncrepl 從伺服器中啟動,現在將其命名為消費者(consumer)。主要伺服器角色稱為提供者(provider)。在 syncrepl 中,消費者連接到提供者以更新樹。在最基本的 refreshOnly 模式中,消費者接收自上一次刷新以來的所有更改條目,請求 cookie 跟蹤上一次同步的更改,然後中斷連接。在下一次連接時,將 cookie 呈現給提供者,它僅發送自上一次同步之後更改的條目。值得注意的是,所有寫入的操作僅能在主伺服器(提供者)操作,無法在從伺服器(消費者)上直接操作。

另一個 syncrepl 模式為 refreshAndPersist,運作模式像 refreshOnly 一樣;但是不會中斷連接,消費者保持連接以接收任何更新。在最初刷新後發生的任何更改都會立即通過連接由提供者發送到消費者。也就是一台LDAP server同時是provider也是consumer(MirrorMode)。



Syncrepl :

1.設定provider  (ldap1 server)
代碼: [選擇]
[root@ldap1 ~]# vim /etc/openldap/slapd.conf
##新增紅字部份##

moduleload  syncprov.la                  ## 載入模組 ##
   
########################################################
# database definitions
########################################################


database      db
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin,dc=split,dc=com,dc=tw"
rootpw      {CRYPT}u/vHUak3FqFek


index  objectClass,entryCSN,entryUUID     eq

overlay  syncprov
syncprov-checkpoint  100  10
syncprov-sessionlog  100



overlay  syncprov : 啟用syncprov 覆蓋。必須針對資料庫配置覆蓋;因此,此設定必須位於 database 之後。

syncprov-checkpoint  100  10 : 告訴伺服器寫入次數達100次或每隔10分鐘將contextCSN的值儲存到硬碟中。contextCSN是cookie 的一部分,它可以幫助消費者找到自上一個複製週期之後的某個位置。(index   entryCSN     eq)

syncprov-sessionlog  100 : is the maximum number of session log entries the session log can record. When a session log is configured, it is automatically used for all LDAP Sync searches within the database.
Note that using the session log requires searching on the entryUUID attribute. Setting an eq index on this attribute will greatly benefit the performance of the session log on the provider. (index   entryUUID     eq)
(sorry~這部份小弟不知該如何解釋才恰當,所以直接PO上官方文件的說明)



2.設定ldap2
請參考http://phorum.study-area.org/index.php/topic,67535.0.html,基本的設定與ldap1相同即可

代碼: [選擇]
[root@ldap2 ~]# vim /etc/openldap/slapd.conf
##新增紅字部份##

moduleload  syncprov.la

database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=admin2,dc=split,dc=com,dc=tw" read
        by * none
   
########################################################
# database definitions
########################################################


database      db
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin2,dc=split,dc=com,dc=tw"     ##為了區別兩台server,小弟把rootdn拆開,密碼則是相同(password:redhat)
rootpw      {CRYPT}u/vHUak3FqFek


index  objectClass,entryCSN,entryUUID     eq


syncrepl        rid=123
                     provider=ldap://ldap1.split.com.tw
                     type=refreshOnly
                     interval=00:00:01:00
                     searchbase="dc=split,dc=com,dc=tw"
                     retry="60 +"
                     bindmethod=simple
                     binddn="cn=admin,dc=split,dc=com,dc=tw"
                     credentials=redhat



rid : 將此consumer標識給provider(介於1到999之間的唯一ID)

provider : provider的 LDAP URI

type : refreshOnly or refreshAndPersist

interval : 定期同步時間,格式為dd:hh:mm:ss

searchbase : 指向根節點的DN,以保持樹的完整性

retry : 如果在複製過程中發生錯誤,將會嘗試重新連結;
retry="60 10 300 3",意思是每60秒重試1次,重覆10次,如果還是無法連線,則每300秒重試1次,重覆3次後將停止重試。
retry="60 +",每60秒重試1次,"+"代表在成功之前不限定重試次數

bindmethod : 連接provider 時所用的認證方式(simple or sasl)

binddn : provider的rootdn

credentials : provider的rootpw (password)


其它額外設定 :
scope : sub、one 或 base 之一。它確定從 searchbase 開始,到樹下多深的資料將被複製。預設值為 sub,它涵蓋 searchbase 和所有子 searchbase。

filter : LDAP 搜索篩選器,例如 (objectClass=inetOrgPerson),用於控制複製哪些記錄。

attrs   : 將從所選條目中複製的屬性清單。

與 syncrepl 的其他選項一樣,這些選項以 key=value 的形式輸入

更詳細的設定和說明請參考官方文件(http://www.openldap.org/doc/admin24/slapdconfig.html#syncrepl)


設定完成後 (ldap1與ldap2) :
1.
代碼: [選擇]
rm -rf /etc/openldap/slapd.d/*

2.
代碼: [選擇]
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

3.
代碼: [選擇]
chown -R ldap:ldap /etc/openldap/slapd.d
4.
代碼: [選擇]
chown -R ldap:ldap /var/lib/ldap  ※第一次啟動slapd才要(ldap2)


完成之後我們可以在ldap2上看看有沒有ldap1的資料進來,也可在ldap1隨便新增個東西看看ldap2有沒有變更,這部份小弟就不在囉唆了,給新同學自己試試.... ;D




MirrorMode :
如果先照上面的方式設定好了,請先檢查雙方的資料是否一致,不然也可以先把ldap2的整個樹刪除

刪除整個樹
代碼: [選擇]
[root@ldap2 ~]# ldapdelete -D "cn=admin,dc=split,dc=com,dc=tw" -W -x -r -v "dc=split,dc=com,dc=tw"
先停止slapd
代碼: [選擇]
[root@ldap2 ~]# /etc/init.d/slapd stop



1.設定ldap1
代碼: [選擇]
[root@ldap1 ~]# vim /etc/openldap/slapd.conf

##新增紅字部份##

moduleload  syncprov.la
   

########################################################
# database definitions
########################################################


database      db
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin,dc=split,dc=com,dc=tw"
rootpw      {CRYPT}u/vHUak3FqFek


index  objectClass,entryCSN,entryUUID     eq


serverID 1

syncrepl         rid=123
                      provider=ldap://ldap2.split.com.tw
                      bindmethod=simple
                      binddn="cn=admin2,dc=split,dc=com,dc=tw"
                      credentials=redhat
                      searchbase="dc=split,dc=com,dc=tw"
                      schemachecking=on
                      type=refreshAndPersist
                      retry="60 +"

mirrormode on

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100




serverID : 每個mirror node的ID必須不同且是唯一的

rid : 雙方都必須相同

schemachecking : The schema checking can be enforced at the LDAP Sync consumer site by turning on the schemachecking parameter. If it is turned on, every replicated entry will be checked for its schema as the entry is stored into the replica content. Every entry in the replica should contain those attributes required by the schema definition. If it is turned off, entries will be stored without checking schema conformance. The default is off. (sorry~一樣不知該如何解釋才恰當 :P)

mirrormode on : 開起MirrorMode





2.設定ldap2
代碼: [選擇]
[root@ldap2 ~]# vim /etc/openldap/slapd.conf
##新增紅字部份##

moduleload  syncprov.la

database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=admin2,dc=split,dc=com,dc=tw" read
        by * none
   
########################################################
# database definitions
########################################################


database      db
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin2,dc=split,dc=com,dc=tw"
rootpw      {CRYPT}u/vHUak3FqFek


index  objectClass,entryCSN,entryUUID     eq


serverID 2

syncrepl         rid=123
                      provider=ldap://ldap1.split.com.tw
                      bindmethod=simple
                      binddn="cn=admin,dc=split,dc=com,dc=tw"
                      credentials=redhat
                      searchbase="dc=split,dc=com,dc=tw"
                      schemachecking=on
                      type=refreshAndPersist
                      retry="60 +"

mirrormode on

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100



設定完成後 (ldap1與ldap2) :
1.rm -rf /etc/openldap/slapd.d/*

2.slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

3.chown -R ldap:ldap /etc/openldap/slapd.d


兩台server都啟動後,先檢查ldap2上的資料有沒有回來,之後我們就可以試試先在ldap2上新增一個資料,然後到ldap1上把資料刪除,看看兩台server的資料是否都有一致

以上,就是一個簡單的Replication...... ;D

16
LDAP 討論區 / 01.LDAP server + phpldapadmin 筆記
« 於: 2012-08-28 17:27 »
各位好,這是小弟自學LDAP兩個多月來的一點心得,也因為現在新版(2.4.x)教學真的很少,所以把整理好的內容分享給大家,其實主要目的還是希望可以跟大大們討教個幾招... ;D

我分成三個部份『LDAP server + phpldapadmin』、『Replication』、『LDAP client + autofs home』(sorry~~postfix與samba PDC還沒開始研究 :P)

小弟是用VBOX架設整個環境,OS都使用CentOS6.2_x64,domain name為split.com.tw,網段為192.168.1.0/24,主機總共有6台,
DNS+DHCP(192.168.1.1)
LDAP1(192.168.1.2)       
LDAP2(192.168.1.3)        ##準備兩台是要來實作Replication
HOME(192.168.1.4)         ##要做home目錄的automount
CLIENT(192.168.1.5)       
MAIL(192.168.1.6)

DNS+DHCP這部份可以參考鳥哥來自行架設,mail server 目前還沒玩,暫時冷凍中

LDAP server + phpldapadmin架設心得 :


LDAP架構圖

                        split.com.tw
                        /                  \
                       /                     \
               People                      Group
                 /    \                       /    |    \
           niko    ping             D10  D20  D30
               

user分別就是niko和ping,group的部份D10是niko的主群組,D20是ping的主群組,另外D30則是兩位的附屬群組


樹的結構設定好後就開始安裝LDAP吧!!

小弟安裝的版本是openldap-2.4.23-26.el6

安裝與設定LDAP (主機 : LDAP1)

安裝LDAP
代碼: [選擇]
[root@ldap1 ~]# yum install openldap-servers openldap-clients
現在的/etc/openldap目錄裡預設已經沒有slapd.conf檔了,先去尋找檔案並且copy一份
代碼: [選擇]
[root@ldap1 ~]# find / | grep slapd.conf
找到檔案後
代碼: [選擇]
[root@ldap1 ~]# cp /usr/share/openldap-servers/slapd.conf.obsolete  /etc/openldap/slapd.conf
copy DB_CONFIG 到 /var/lib/ldap
同上,可先到"/usr/share/openldap-servers/" 找檔案,然後
代碼: [選擇]
[root@ldap1 ~]# cp /usr/share/openldap-servers/DB_CONFIG.example  /var/lib/ldap/DB_CONFIG(DB_CONFIG 檔案設定了 index 的快取數量,可調整效能的表現,在一開始建置時需要先行建立,並把它複製到 /var/lib/ldap (依照database的目錄來決定)

設定slapd.conf
代碼: [選擇]
[root@ldap1 ~]# vim /etc/openldap/slapd.conf
===================================================================================
include      /etc/openldap/schema/core.schema
include      /etc/openldap/schema/cosine.schema
include      /etc/openldap/schema/inetorgperson.schema
include      /etc/openldap/schema/nis.schema

allow bind_v2

pidfile      /var/run/openldap/slapd.pid
argsfile      /var/run/openldap/slapd.args

loglevel   256               ## 需額外設定rsyslog ##


TLSCACertificatePath /etc/openldap/certs
TLSCertificateFile "\"OpenLDAP Server\""
TLSCertificateKeyFile /etc/openldap/certs/password

access to attrs=userPassword      ## 限制 userPassword 只用於認證 ##
            by self write            ## 允許使用者變更自己的密碼 ##
            by anonymous auth         ## 匿名用戶需要認證 ##
            by * none               ## 任何人都無法存取 ##
 

access to *
   by * read

database config
access to *
   by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
   by * none

database monitor
access to *
   by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=admin,dc=split,dc=com,dc=tw" read            ## 修改成自己的rootdn ##
        by * none
#######################################################################
# database definitions
#######################################################################
database   bdb
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin,dc=split,dc=com,dc=tw"
rootpw      {CRYPT}u/vHUak3FqFek                               
directory   /var/lib/ldap

index objectClass                   eq
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
====================================================================================

將slapd 的log寫到/var/log/slapd
代碼: [選擇]
[root@ldap1 ~]# vim /etc/rsyslog.conf加入
local4.*            /var/log/slapd

完成後重新啟動rsyslog

rootpw 使用加密密碼 ( password : redhat )
代碼: [選擇]
[root@ldap1 ~]# slappasswd -h {CRYPT}
New password : 
Re-enter new password : 
{CRYPT}u/vHUak3FqFek
輸入兩次redhat後就會得到一組加密過後的亂碼


設定好後準備將slapd.conf 轉成 slapd.d 的格式

先清空 slapd.d 目錄裡的資料
代碼: [選擇]
[root@ldap1 ~]# rm -rf /etc/openldap/slapd.d/*
轉換成 slapd.d 格式
代碼: [選擇]
[root@ldap1 ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
『bdb_db_open: database "dc=split,dc=com,dc=tw": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
   backend_startup_one (type=bdb, suffix="dc=split,dc=com,dc=tw"): bi_db_open failed! (2) slap_startup failed (test would succeed   
   using the -u switch)』

因為還未建立資料,所以找不到id2entry.bdb而出現錯誤訊息,不過slapd.conf 的設定還是會匯入到slapd.d資料夾裡,暫時先不用理它


在啟動slapd時,要先修改/etc/openldap/slapd.d和/var/lib/ldap底下所有檔案的擁有者
代碼: [選擇]
[root@ldap1 ~]# chown -R ldap:ldap /etc/openldap/slapd.d
代碼: [選擇]
[root@ldap1 ~]# chown -R ldap:ldap /var/lib/ldap
完成後,我們就可以啟動slapd了
代碼: [選擇]
[root@ldap1 ~]# /etc/init.d/slapd start
[root@ldap1 ~]# chkconfig slapd on

日後如有更動slapd.conf,都必須清空 slapd.d 目錄、轉換 slapd.d 格式、變更slapd.d 擁有者


LDIF編寫與匯入資料

根節點

代碼: [選擇]
[root@ldap1 ~]# vim root.ldif# root node
dn: dc=split,dc=com,dc=tw
dc: split
objectclass: dcObject
objectclass: organizationalUnit
ou: split.com.tw

# People
dn: ou=People,dc=split,dc=com,dc=tw
ou: People
objectClass: organizationalUnit

# Group
dn: ou=Group,dc=split,dc=com,dc=tw
ou: Group
objectClass: organizationalUnit


User

代碼: [選擇]
[root@ldap1 ~]# vim user.ldif#王大明
dn: cn=Niko 王大明,ou=People,dc=split,dc=com,dc=tw
objectClass: posixAccount
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: shadowAccount
cn: Niko 王大明
uid: niko
userPassword: {CRYPT}UPE/FJwWxZXb2      
uidNumber: 1100                     ## uid = 1100 ##
gidNumber: 1000                     ## D10的gid ##
ou: People
loginShell: /bin/bash
homeDirectory: /home/niko
sn: 王
givenName: 大明
mail: niko@split.com.tw
telephoneNumber: 02-12345678

#李小偵
dn: cn=Ping 李小偵,ou=People,dc=split,dc=com,dc=tw
objectClass: posixAccount
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: shadowAccount
cn: Ping 李小偵
uid: ping
userPassword: {CRYPT}XkXkm/SO4Ytsk                     
uidNumber: 1101                     ## uid = 1101 ##
gidNumber: 1001                     ## D20的gid ##
ou: People
loginShell: /bin/bash
homeDirectory: /home/ping
sn: 李
givenName: 小偵
mail: ping@split.com.tw
telephoneNumber: 02-88882222


Group

代碼: [選擇]
[root@ldap1 ~]# vim group.ldif#d10
dn: cn=d10,ou=Group,dc=split,dc=com,dc=tw
cn: d10
objectClass: top
objectClass: posixGroup
memberUid: niko
gidNumber: 1000

#d20
dn: cn=d20,ou=Group,dc=split,dc=com,dc=tw
cn: d20
objectClass: top
objectClass: posixGroup
memberUid: ping
gidNumber: 1001

#d30
dn: cn=d30,ou=Group,dc=split,dc=com,dc=tw
cn: d30
objectClass: top
objectClass: posixGroup
memberUid: niko                                ##加入兩個user##
memberUid: ping
gidNumber: 1002


匯入LDIF檔

代碼: [選擇]
[root@ldap1 ~]# ldapadd -D "cn=admin,dc=split,dc=com,dc=tw" -W -x -a -f root.ldif
Enter LDAP Password:
adding new entry "dc=split,dc=com,dc=tw"

adding new entry "ou=People,dc=split,dc=com,dc=tw"

adding new entry "ou=Group,dc=split,dc=com,dc=tw"


[root@ldap1 ~]# ldapmodify -D "cn=admin,dc=split,dc=com,dc=tw" -W -x -a -f user.ldif
Enter LDAP Password:
adding new entry "cn=Niko 王大明,ou=People,dc=split,dc=com,dc=tw"

adding new entry "cn=Ping 李小偵,ou=People,dc=split,dc=com,dc=tw"


[root@ldap1 ~]# ldapmodify -D "cn=admin,dc=split,dc=com,dc=tw" -W -x -a -f group.ldif
Enter LDAP Password:
adding new entry "cn=d10,ou=Group,dc=split,dc=com,dc=tw"

adding new entry "cn=d20,ou=Group,dc=split,dc=com,dc=tw"

adding new entry "cn=d30,ou=Group,dc=split,dc=com,dc=tw"


檢查資料

代碼: [選擇]
[root@ldap1 ~]# ldapsearch -x -b "dc=split,dc=com,dc=tw"

安裝phpLDAPadmin

有兩種安裝方法,較簡單的方式是先安裝EPEL來源,直接使用yum安裝;另一種方法是到官網的Project Page (http://sourceforge.net/projects/phpldapadmin/ ) 下載壓縮包自行安裝

方法1. 使用yum安裝 (需先安裝好EPEL)

代碼: [選擇]
[root@ldap1 ~]# yum install -y phpldapadmin
設定config.php
代碼: [選擇]
[root@ldap1 ~]# vim /etc/phpldapadmin/config.php$servers->setValue('login','attr','dn');            ## line 397 : uncomment ##

// $servers->setValue('login','attr','uid');         ## line 398 : make it comment ##

設定httpd
代碼: [選擇]
[root@ldap1 ~]# vim /etc/httpd/conf.d/phpldapadmin.conf
#
#  Web-based tool for managing LDAP servers
#

Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs

<Directory /usr/share/phpldapadmin/htdocs>
  Order Deny,Allow
  Deny from all
  Allow from 127.0.0.1 192.168.1.0/24         ## IP address you allow ##
  Allow from ::1
</Directory>

開啟httpd
代碼: [選擇]
[root@ldap1 ~]# /etc/init.d/httpd start
[root@ldap1 ~]# chkconfig httpd on

完成.


方法2. 使用tgz檔安裝


先安裝php、php-ldap 套件
代碼: [選擇]
[root@ldap1 ~]# yum install -y php php-ldap
方法1不用安裝是因為yum已經把相依套件一併安裝上去了

請先至『http://sourceforge.net/projects/phpldapadmin/』下載tgz檔 (目前版本為1.2.2)

下載完成後,解壓縮
代碼: [選擇]
[root@ldap1 ~]# tar zxvf phpldapadmin-1.2.2.tgz

更改目錄名稱
代碼: [選擇]
[root@ldap1 ~]# mv phpldapadmin-1.2.2  phpldapadmin
移動phpldapadmin目錄到httpd的預設目錄下
代碼: [選擇]
[root@ldap1 ~]# mv phpldapadmin  /var/www/html/
切換至phpldapadmin的config目錄下
代碼: [選擇]
[root@ldap1 ~]# cd /var/www/html/phpldapadmin/config
把底下的config.php.example檔copy一份並更名為config.php
代碼: [選擇]
[root@ldap1 config]# cp config.php.example  config.php

如果phpldapadmin是連接本機的LDAP server 基本上就已經完成了,不用修改config.php都可以


下面還是來雞婆設定一下

修改config.php
代碼: [選擇]
[root@ldap1 ~]# vim /var/www/html/phpldapadmin/config/config.php

$servers->setValue('server','host','127.0.0.1');                                  ## line 293 (LDAP server 的 IP)##

$servers->setValue('server','port',389);                                             ## line 297 (port)##

$servers->setValue('server','base',array('dc=split,dc=com,dc=tw'));               ## line 302 應該不用說了吧.. ;D##

$servers->setValue('login','auth_type','cookie');                                       ## line 322 (Authentication information is stored in a cookie on the users browser) 這段小弟不知道該如何解釋比較好 :P##

$servers->setValue('login','bind_id','cn=admin,dc=split,dc=com,dc=tw');         ## line 332 (rootdn)##

$servers->setValue('login','bind_pass','redhat');                                       ## line 338 (password)##


完成.



最後打開瀏覽器,以小弟的為例,輸入ldap1.split.com.tw/ldapadmin就可以用web的方式去管理ldap
(如果是自行安裝的,請輸入您自行設定的目錄名稱,如:ldap1.split.com.tw/phpldapadmin)






注意事項 :
1.如有開啟SELinux,使用方法2安裝時需要注意一下,以免被阻擋無法瀏覽phpldapadmin

重新設定html目錄底下的SELinux type
代碼: [選擇]
[root@ldap1 ~]# restorecon -Rv /var/www/html/

2.登入phpldapadmin時,出現




根據官方解釋
This message is generated when you have a template that defines an objectClass, however, your LDAP schema does not know about the objectClass.
The 2nd line of this message will give you a hint as to which template, and which objectClass is the offending entry.
You can either:
○   Remove the template,
○   Remove the offending objectClass (shown in bold) from the template (if you are not sure which template, the template   
        description is displayed on the 2nd line - look for a template that has a <description> tag with that description), OR
○   Define the missing objectClass to your LDAP server's schema (you'll need to follow your LDAP server's instructions for this), OR
○   set config:appearance:hide_template_warning (PLA 1.2.0.3+) to suppress these warnings


使用EPEL來源安裝 :
代碼: [選擇]
[root@ldap1 ~]# vim /etc/phpldapadmin/config.php
使用tgz檔安裝
代碼: [選擇]
[root@ldap1 ~]# vim /var/www/html/phpldapadmin/config/config.php

在config.php裡的最後面加入

$config->custom->appearance['hide_template_warning'] = true

小弟測試如果隨便亂插phpldapadmin會出現問題,只有放在最後才正常...奇怪...... ???


以上,就是小弟架設的ldap server,如有漏掉什麼或是哪邊觀念不正確都希望大大們給予指教,下一篇的Replication(包含基本的Syncrepl與Mirror mode),等小弟把筆記整理好後再貼上來請大大們指教,謝謝!! :D

17
雜七雜八 / 亞洲超級光纖跳過台灣
« 於: 2012-08-25 21:00 »
雖然這是前幾天的新聞了,但小弟今天才看到.... :P
http://www.ettoday.net/news/20120823/92280.htm


18
LDAP 討論區 / 關於LDAP使用GNOME登入
« 於: 2012-08-04 23:15 »
大家好,又是小弟我...學習LDAP大約一個多月了,終於架設了一台簡單的LDAP server,當然三子大的筆記幫了我很多忙,
但是小弟發現如果client端要使用圖形介面登入的話還需要設定第7個檔案,其中6個檔包括/etc/openldap/ldap.conf、/etc/nslcd.conf、/etc/pam_ldap.conf、/etc/pam.d/system-auth、/etc/nsswitch.conf、/etc/sysconfig/authconfig
第7個檔就是要設定/etc/pam.d/password-auth,否則要用GNOME登入的話會驗證失敗

vim /etc/pam.d/password-auth
代碼: [選擇]
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_ldap.so use_first_pass     #<========== add
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so     #<========== add
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok     #<========== add
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     optional      pam_ldap.so     #<========== add
session     required      pam_unix.so

以上,又是小弟一點點的小心得  :P

19
LDAP 討論區 / 有關LDAP 2.4版後的syncrepl
« 於: 2012-07-07 18:09 »
各位大大好!小弟研讀LDAP系統管理這本書讀到第5章後就完全卡關,已經搞了4天還是搞不定,所以才想發文請教各位大大....
我使用的版本是openldap-servers-2.4.19-15,但是書上所教的slurpd在2.4後的版本完全被取消了,谷歌了很久,找到syncreplc和MirrorMode,想先試試MirrorMode,參考http://phorum.study-area.org/index.php/topic,53465.0.html以及官方文件http://phorum.study-area.org/index.php/topic,53465.0.html,但都完全不行,搞了兩天,換另一個syncreplc試試吧...結果....也是搞了兩天....

先說小弟的環境,總共有三台,OS都是RHEL6
一台是DNS+DHCP(192.168.1.1),這台很正常
ldap1(192.168.1.2),主要ldap server
ldap2(192.168.1.3),打算用這台來做副的

log都沒有錯誤訊息(我使用loglevel 296,rsyslog也都有設定好),
server啟動也都是正常,我把ldap1建立好的LDAP資料匯入到ldap2上也都沒問題,使用ldapsearch去查詢兩台的資料也都一模一樣,但是我建立好一個LDAP檔,使用ldapmodify去新增一筆人員的資料,ldap1正常,但是ldap2就是沒有新增的資料,用netstat去查看,兩台也沒有連線,iptables也都沒開,selinux暫時都使用Permissive,以上...就是我的ldap2不會去抓ldap1的資料 :'(



ldap1:
代碼: [選擇]
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema

allow bind_v2

loglevel 296
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

moduleload syncprov.la    ##網路上找了很多文章,有些有設定有些沒有,也不知道到底要不要設定所以先寫上去

#######################################################################
# ldbm and/or bdb database definitions
#######################################################################

database bdb
suffix "dc=example,dc=com"
checkpoint 1024 15
rootdn "cn=admin,dc=example,dc=com"
rootpw 123456

directory /var/lib/ldap

index objectClass,entryCSN,entryUUID                       eq
index cn,sn,mail eq,sub
index departmentNumber eq

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100

ldap2:
代碼: [選擇]
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema

allow bind_v2

loglevel 296
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

#######################################################################
# ldbm and/or bdb database definitions
#######################################################################

database        bdb
suffix          "dc=example,dc=com"
checkpoint      1024 15
rootdn          "cn=admin,dc=example,dc=com"
rootpw          123456

directory /var/lib/ldap

index objectClass,entryCSN,entryUUID                       eq
index cn,sn,mail                        eq,sub
index departmentNumber                  eq

syncrepl rid=001
                provider=ldap://ldap1.example.com
                type=refreshOnly
                interval=00:00:01:00
                searchbase="dc=example,dc=com"
                filter="(objectClass=organizationalPerson)"
                scope=sub
                schemachecking=off
                bindmethod=simple
                binddn="cn=admin,dc=example,dc=com"
                credentials=123456

以上是這兩台的設定檔,請各位大大幫我看看是哪裡有設定錯誤或少了什麼
感謝!!!

20
依照慣例要先把自己的三圍貼上,不對...是我的環境... :P
OS為RHEL6.0,ldap-server的版本是2.4.19-15

小弟初學LDAP,參考O'REILLY的LDAP系統管理以及Steven大的LDAP入門,自己做了一棵非常簡單的小樹準備加入

slapd.conf設定
代碼: [選擇]
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema

allow bind_v2

loglevel 296
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

access to *
by * read

database bdb

suffiix "dc=example,dc=com,dc=tw"

checkpoint 1024 15

rootdn "cn=admin,dc=example,dc=com,dc=tw"
rootpw {SSHA}hm8uE/ZQAbq0HVJvTxZIo8VE4MZyoVbl

directory /var/lib/ldap

index objectClass,departmentNumber eq
index cn,sn,mail eq,sub

LDIF檔
代碼: [選擇]
# root dn
dn: dc=example,dc=com,dc=tw
dc: example
objectClass: dcObject
objectClass: organizationalUnit
ou: example Dot com Dot tw

# people ou
dn: ou=people,dc=example,dc=com,dc=tw
ou: people
objectClass: organizationalUnit

但是出現了這個問題
代碼: [選擇]
slapadd -v -l /tmp/root.ldif
slapadd: line 1: database #1 (dc=my-domain,dc=com) not configured to hold "dc=example,dc=com,dc=tw"; no database configured for that naming context

參考http://phorum.vbird.org/viewtopic.php?f=2&t=30838&start=0以及搜尋了一下google,始終解決不了這個問題

後來終於在 /etc/openldap/slapd.d/cn=config/olcDatabase={1}bdb.ldif 裡找到了
代碼: [選擇]
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com

olcRootDN不知是否有影響所以我一並改成slapd.conf裡面的設定.....

再重新加入一次沒想到就成功了,也因此我的小小樹完成了
代碼: [選擇]
ldapsearch -x -b "dc=example,dc=com,dc=tw"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com,dc=tw> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# example.com.tw
dn: dc=example,dc=com,dc=tw
dc: example
objectClass: dcObject
objectClass: organizationalUnit
ou: example Dot com Dot tw

# people, example.com.tw
dn: ou=people,dc=example,dc=com,dc=tw
ou: people
objectClass: organizationalUnit

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

想請問大大們為什麼會這樣子.....

21
雜七雜八 / 咱們的Linus Torvalds怒了....="=
« 於: 2012-06-21 20:44 »
NVIDIA~FxxK YOU...

http://youtu.be/IVpOyKCNZYw

22
RHCE已經準備好幾個月了,連D3都犧牲掉  :'(

就是為了明天的考試,不過還是很緊張....

然後...netman大,欠你的正妹照下星期補給你...但是只能拿到個生活照吧....

如果有我在內的合照應該沒人想看...哈哈!!!

23
各位大大們好啊!! 這個問題我不太清楚到底該怎麼問比較好,所以直接PO上我的設定

以下是我自行設定的DNS資訊

$TTL 600
@      IN   SOA   dns1.example.com. root.mail1.example.com. ( 2012040701 3H 15M 1W 1D )
@      IN   NS   dns1.example.com.
dns1      IN   A   192.168.1.1

@               IN      MX  10      mail1.example.com.
mail1      IN   A       192.168.1.2
www      IN   CNAME       mail1.example.com.
ww2             IN      CNAME       mail1.example.com.
userpc      IN   A       192.168.1.3

我的網域是example.com(192.168.1.0/24),基本上一切都非常非常的正常(mail server、web server等)......

小弟這次想請教如果今天我要設定一個NFS server或是寫一個iptables或其它服務來規範整個exmaple.com,

如NFS:

/mnt/nfs-storage    *.example.com(ro,no_root_squash,async)

或是iptables:

iptables -A INPUT -s example.com -j ACCEPT


要如何設定才可以讓它們能夠正確知道 example.com = 192.168.1.0/24


以上,是從DNS下手還是需要再設定什麼東東  ???

謝謝!!!!



24
小弟年後面試了兩家公司!!!第一家是醫院的資訊部門,第二家是設計類型的公司,

先說說我面試的過程

醫院:
一進去就是先來個考試,大概就是LINUX操作和電腦基本認知。
而面試官給我的感覺像是大哥哥類型 ???,也都是聊一些我的個性、工作經驗等等;
因為考卷裡有一題是問虛擬化技術和軟體,小弟不知道該如何寫起(其實是英文菜,會說不會寫 :P),就跟面試官說我可不可以用講的給你聽,他居然說"沒關係,這不是重點,不用講", :o~揪甘心ㄟ~~~~

工作內容是要負責維護約1000台電腦(windows為主)、server約70台(linux為主)以及維護週邊設備(印表機那些阿不拉渣的東西),未來還需要控管機房的溫濕度等等...每年還有ISO認證什麼的(sorry~小弟剛踏入mis才沒多久的時間,還不是很了解 :P)

基本上面試內容大約70%談正事,30%拉低賽,時間約40分鐘


設計類型的公司:
當然也是先來個考試摟!!不過拿考卷給我的小姐長的還不賴 ;D,也是一些LINUX基本操作和電腦基本認知。
這家公司的面試官就像朋友在聊天一樣,一開始是在討論考卷上的題目(因為題目是用說故事的方式,讓我搞不太懂該怎麼寫),說一些linux與windows怎麼樣怎麼樣的,其中也說到selinux(我碰到的工程師怎麼都不太喜歡它啊?? 小弟是還滿愛的! ;D);這家公司約70%都是使用ubuntu,server也是用ubuntu比較多(數量小弟忘了問 :'(),其中還談到薪水部份,我約略提出那個價錢後,他說"蛤?!這樣喔~我幫你說說看再提高一點", :o~揪甘心ㄟ~~~~

工作內容也是負責維護公司內的電腦,以及重新編譯、測試套件等等的(雖然是ubuntu但都是linux kernel嘛!! :D)

面試內容大約30%談正事,70%拉低賽,時間約60分鐘


先謝謝各位看完這麼長一串拉低賽的文章,其實小弟我只是想請教各位大大,如果有幸能進入其中一家公司工作,對於未來的工作經驗哪一家比較好啊?! 或者應該是說能夠學到的東西比較多?!
雖然設計類型的公司讓我的印象比較好,但是醫院這麼多的電腦也讓我流口水了....

25
學園裡好像沒有專門討論書籍的地方?! 如果有發錯地方請見諒!!
小弟對於資料庫算是個半新手,雖然以前在學校有學過SQL server,但是..... :-\
因為接觸到linux後想要重新來學習mysql
不知道各位前輩曾經看過哪些好書可供小弟參考...
另外關於"SQL學習手冊" 與 "SQL學習手冊深入淺出 PHP 與 MySQL"這兩本書的建議是?!

26
Linux 討論版 / 請益iptables的一個小小疑問
« 於: 2011-12-29 18:49 »
最近在檢查server的防火牆,看到前同事寫的iptables,INPUT chain的policy定義為DROP,
但是我發現允許連線到server的來源是公司的某些網址?!
我知道可以使用字串的方式來阻擋網站,如-m string --algo bm --string "facebook.com" -j DROP
使用網址來進入這就讓小弟不是很了解,而iptables過濾的方式又如何?!

27
這篇應該算是小弟一個小小的抱怨文吧?!  :P
當初就是抱著轉行的打算進了沒有人罩的補習班學習Linux,也有幸遇到一位很棒的老師
目前是在一家遊戲公司作part time吸取經驗
但總覺得有個不對的地方,怎麼都沒有聽到考試的消息???
雖然當初老師是有問我要不要先考RHCA,可惜小弟心藏還沒有那麼強,想先考RHCSA讓自己有點信心
不過這一等就等了快兩個月去了.....雖然有空時還會繼續溫習,但是就很卡卡  :-\

頁: [1]