彙集samab集成AD驗證+磁碟配額

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

彙集samab集成AD驗證+磁碟配額

小弟搞了幾天samab集成AD驗證+磁碟配額,在網上找了很多前輩的文章和帖子,覺得寫的個有千秋。做起來也遇到了不少問題。

小弟不才,把各位前輩的文章總結了一下,中間夾雜了一下我自己在實施過程中遇到的問題。希望大家不要拍磚。同時也是為這個論壇做點自己的貢獻。畢竟在這裡吸取了許多養分。

進入正題:


1.測試環境:
DC&DNS:Windows Server 2003 sp2 企業版. 計算機名為:hq-dc-01.test.com    ip:10.168.168.226
客戶機:Red Hat Enterprise Linux ES5.4    hostname為sharefile  ip: 10.168.165.250
域名:test.com
2.試驗目的:將Linux加入到Windows域,並實現Windows域帳戶登陸Linux伺服器.
3.準備工作:
   a.在一台機器上安裝Windows Server 2003 ,並升級為DC,同時集成DNS服務.
   b.Linux的準備工作也很簡單,主要是檢查以下幾個包是否被安裝:
     samba-3.0.23c-2
     samba-common-3.0.23c-2
     samba-client-3.0.23c-2     //samba的相關包
     krb5-libs-1.5-17
     krb5-workstation-1.5-17
     krb5-devel-1.5-17
     pam_krb5-2.2.11-1          //kerberos相關的軟體包
   主要就用到這些包,由於各Linux發行版本的不同,包的版本或許會有差異.
4.配置步驟:
a.修改ip和dns我就不做介紹了.但是要注意防火牆(iptables)和SELinux.
  你可以把iptables規則清空,並禁用SELinux.
  清空iptables規則命令如下:
   iptables -F
  禁用SELinux方式如下:
  vi /etc/selinux/config
  將其中的  SELINUX=enforcing
  改成      SELINUX=disable  
b.修改/etc/krb5.conf文件,該文件是kerberos的配置文件。
   典型的krb5.conf文件如下:

     
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false

EXAMPLE.COM = {
  kdc = kerberos.example.com:88
  admin_server = kerberos.example.com:749
  default_domain = example.com
}

.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM

profile = /var/kerberos/krb5kdc/kdc.conf

pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
}

其中需要我們修改的地方很少,以我的例子為例,修改後的文件如下:


default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

default_realm = TEST.COM        //改成你的域名
dns_lookup_realm = false
dns_lookup_kdc = false

TEST.COM = {                     //改成你的域名
  kdc = 10.168.168.226:88            //改成你DC的FQDN或者是IP,兩者沒什麼區別
  admin_server = 10.168.168.226:749
  default_domain = test.com       //改成你的域名,注意和上面的不同.(大小寫)
}

.test.com = TEST.COM         
test.com = TEST.COM            //接著改

profile = /var/kerberos/krb5kdc/kdc.conf

pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
}
修改完畢后運行下面的命令查看kerberos文件是否有誤:
    kinit administrator@TEST.COM
其中administrator是域管理員賬戶, TEST.COM 是你的域名.
   回車鍵后,會提示你輸入密碼,如果沒有什麼錯誤.在你輸入密碼回車后,會自動返回到Linux命令提示符下.
   在這裡要注意的小問題就是Linux本地的時間要和DC的時間差問題,我們都知道,在DC上的策略中,時間差允許的範圍是5分鐘,所以,在運行上述的命令前,最好先同步下Linux和DC的時間:
ntpdate 192.168.255.1
或者直接更改系統時間
date -s 年/月/日 時:分:秒

c.這一步是最主要的步驟了,就是修改/etc/samba/smb.conf配置文件.samba的主配置文件選項很多,在加上各版本中默認的選項都有所差異,在這裡我就不列舉典型的smb.conf文件了,我只把我的smb.conf文件帖出來,以供各位參考:
   

   workgroup = SHAREFILE                    //需要加入的域的netbios名,注意是域的netbios名,要大寫
   netbios name = Linux                   //本機器的netbios名,有的版本沒有這一項會沒有這個,
                                            要手動添加
   server string = Samba Server            //對該伺服器的描述
   printcap name = /etc/printcap
   load printers = yes
   cups options = raw
   log file = /var/log/samba/%m.log
   max log size = 50
   security = ads                     //ads驗證方式必須有realm項
   realm = TEST.COM                 //增加這一行,注意這裡是域名.
   password server = hq-dc-01.test.com           //這裡是DC的FQDN,也可以寫ip,但是有時候會出問題,建議寫FQDN
   encrypt passwords = yes                 //加密在網路上傳輸的用戶密碼
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
   dns proxy = no

   winbind separator = /                  //用戶的域名和用戶名之間的間隔,用什麼隨你心情
   idmap uid = 1000000-2000000         
   idmap gid = 1000000-2000000            //域用戶映射成Linux本地用戶時所有的uid和gid範圍.
   template home = /home/%D/%U            //與home文件夾中定義的作用相同.兩者定義一個就行
   template shell = /bin/bash             //用戶登陸后所使用的shell
   winbind use default domain = yes       //用戶登陸使用默認的域
   winbind enum users = yes
   winbind enum groups = yes              //有人說是自動創建用 getent passwd看到的
                                            用戶和組的信息.具體有什麼用,我也說不清楚         
                                       

   comment = Home Directories
   browseable = no
   writable = yes
   create mode = 0777
   directory mode = 0777   //創建的文件和目錄的默認許可權
   path = /home/%D/%U     //用戶主目錄的相關設置

   comment = All Printers
   path = /var/spool/samba
   browseable = no
   guest ok = no
   writable = no
   printable = yes

以上紅色的部分都是要修改的,其餘的都保持默認就行.好了,修改完成後,保存退出.然後用下面的命令測試 smb.conf是否有誤:
   testparm
顯示的結果如下:


在這裡注意兩個地方就行,一個是  Loaded services file OK.      //說明你的配置文件沒有錯
                       還有一個就是:Server role:ROLE_DOMAIN_MEMBER  //說明你的伺服器已經是域的
                                                               "准"成員了.
好了,做了這些測試后,先把smb和winbind兩個服務開啟成隨系統自動啟動:
   chkconfig smb on
   chkconfig winbind on
然後重啟samba服務:
    service smb restart      //寫到這裡,我想起一點好玩的事來, 在fedora 9中(其他版本我不知道),
                               smb和nmb服務是分開的,也就是說你用這條命令只能重啟動smb,不能重
                               啟nmb,你還要打service nmb restart才行.....

然後就可以加入域了:
  net ads join -W TEST.COM  -S dc  -U administrator
然後會要求你輸如管理員的password,輸入后,正常情況下會提示加入域成功.
  

在這裡我插一句,有時候用net ads join 會不好使,這時候就試試net rpc join –S TEST.COM –U administrator 這種方式.

到這裡,我們就已經把samba伺服器加入到域里了,這時,在DC上,computers這個OU里就應該可以看到你的samba伺服器了.

這時,我們重啟winbind服務:
service winbind restart
重啟完成後,我們就可以用下面的幾條命令來進行測試了:
   wbinfo -t                 //測試該samba伺服器與域的信任關係


  wbinfo -u                  // 查看域用戶的映射信息


  wbinfo -g


  有時候會出現這樣的錯誤信息,解決辦法如下:
  先停掉winbind和smb服務:
  service smb stop
  service winbind stop
  然後刪除下面兩個目錄里的.tdb文件:         /etc/samba   和   /var/cache/samba
                                           據我理解,這些應該是在加入域過程中,產生的一些緩存
  文件,但是有時候這些緩存會造成一些錯誤信息,就象我們剛才看到的那樣,刪除后,重啟服務,讓他重新
  生成就行了.
  fedora9 會稍有不同,目錄我記不太清楚了,好像是 /var/lib/samba  你可以用命令搜索下:
  find / -name *.tdb
  刪除完成後,重新啟動 smb服務.
  service smb start
  在次運行加入域的命令:
  net ads join -W 域名 -S DCFQDN  -U administrator
如果上面的不行 可以用 net rpc join –S DCFQDN –U administrator
  重啟動winbind服務.
   service winbind start
  然後在用命令查看信息就OK了.




  到這裡呢,我們的samba伺服器就成功的加入到域里了,但是呢,卻還不能實現域賬戶在Linux終端上的登陸.想要實現這個目的,其實也很簡單,只需要修改下面幾個文件就可以了:
   /etc/nsswitch.conf           //修改這個文件,影響Linux查找用戶,組,和他們密碼的行為
   修改項如下:
    passwd:    winbind files
    shadow:    winbind files
    group:     winbind files
   /etc/pam.d/sysconfig-auth    //讓pam認證支持以winbind為源進行用戶的查找和匹對.
    修改項如下:
    auth        sufficient    /lib/security/pam_winbind.so          //增加這一行
    auth        required      /lib/security/$ISA/pam_env.so
    auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
    auth        required      /lib/security/$ISA/pam_deny.so
    auth        sufficient      /lib/security/pam_winbind.so

    account     sufficient    /lib/security/pam_winbind.so       //增加這一行,注意這兩行的位置
    account     required      /lib/security/$ISA/pam_unix.so
    account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
    account     required      /lib/security/$ISA/pam_permit.so
    password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
    password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
    password    required      /lib/security/$ISA/pam_deny.so
    session     required      /lib/security/$ISA/pam_limits.so
    session     required      /lib/security/$ISA/pam_unix.so

  修改完畢后,根據上面smb.conf文件的配置,我們就可以實現用戶的登陸了,不過還有一點要說明,就是在用戶登陸前,必須手動創建他們的登陸主目錄,並且賦予他們完全控制的許可權.
    比如,我想讓administrator用戶登陸Linux,實現步驟如下:
    cd /home
    mkdir RESOFT
    cd RESOFT
    mkdir administrator
    chown administrator administrator      //在home目錄下創建RESOFT域目錄,並在該目錄下創建
                                             要登陸用戶administrator的目錄,更改目錄許可權.
    這樣在終端上就可以實現域用戶賬戶的登陸了.

     還有就是用戶登陸Linux平台後,許可權控制的問題.默認情況下,這種方式登陸到Linux平台的用戶只有對自己主目錄有完全控制許可權,其餘的文件均為只讀.
     可以通過下面的方法來實現對域用戶許可權的控制:
     1.更改/etc/nsswitch.conf文件.
     passwd:    winbind files
     shadow:    files winbind
     group:     winbind files
細心的朋友也許已經注意到了這個文件與上面那個文件的不同.就是shadow的查找順序.為什麼這麼改,呵呵,先賣個關子,接著往下看.
     2.然後先把winbind 服務停掉.
     建立與要登陸Linux的域用戶賬戶的同名Linux賬戶.
     3.重啟winbind服務.用域賬戶登陸.這時會發現,登陸后域用戶的登陸點不是在/home/%D/%U下了,而是在/home/%U下.為什麼呢?
     這是因為nsswitch.conf文件影響的結果.就是域用戶在輸入自己的登陸名時,Linux系統並不認為是域用戶,而認為該用戶是一個本地用戶,而shadow項的設置,是先去DC進行密碼的查詢.於是就造成了一種假象,就是域用戶用自己的用戶名和密碼登陸了Linux.所以其登陸目錄為/home/%U.
     既然,Linux認為該登陸用戶是一個本地用戶,那麼我們就可以很方便的對他賦予許可權了.
     但是,如果要登陸Linux的用戶非常多,那麼作為管理員,我們的工作量會非常大,這也是我下面要提出的用LDAP想法的原因



1.自動創建用戶目錄

細心的朋友可能發現從開篇一直到現在除了操作方式不一定以外,所做的事情和<<linux加入windows域之完美方案>>沒有太大的區別。嗯,筆者不置可否,估且這麼理解吧。希望有點小細節您注意到了,在smb.conf中,有一句template shell = /sbin/nologin。是的,samba伺服器,我們只希望他提供samba服務,不希望有用戶登陸。在上一篇文章中解決用戶登陸時主目錄不存在的問題,用的是pam_mkhomedir.so這個東東。在文件共享這塊,筆者意外的發現,這個文件,對於通過samba訪問過來的請求不會創建主目錄!這可如何是好?這就是腳本mkhome.sh存在的原因。

新建立mkhome.sh腳本:
#vi /root/mkhome.sh

#!/bin/bash
user=$1
group=$2
home=/home/$1

if [ ! -d $home ] ; then
mkdir -p $home
chown $user $home
chgrp $group $home
chmod 700 $home
edquota -p administrator -u $user
fi


更改文件許可權設置:
# chmod 700 /home/mkhome.sh

這個腳本接受兩個參數,一個是用戶名,一個是組名。然後給這個用戶創建目錄,並分配許可權,然後再給分配一下用戶空間。Ok,回頭看一下smb.conf文件。


        comment = Home Directories
        path = /home/%U                           //共享的目錄
        valid users = rainbird.net/%U               //認證的用戶,前面必須加rainbird.net喲
        read only = No
        browseable = No
root preexec = /root/mkhome.sh %U %G     //執行創建目錄的操作。

這段配置中最帥的就是這個mkhome.sh的存在。因為這個腳本的執行者是root,所以我們腳本的許可權設置700即可。再往下我們將繼續探索它的神奇魔力。寫完這段保存一下,重啟smb:service smb restart。這樣,在一台xp的機器上,用域用戶登陸,然後訪問\\192.168.1.246,是不是看到了一個以你登陸的域用戶名命名的一個文件夾呢?沒錯,就是它!你現在可以試下刪寫文件了。
7.設置磁碟配額
        因為磁碟配額只能在一塊單獨的分區上啟用,所以筆者專門添加了一塊分區掛載到home目錄下,這點要注意。
編輯fstab
#vi /etc/fstab
/dev/hdb1               /home               ext3    defaults,usrquota,grpquota
     選擇分區,將defaults選項改為:「defaults,usrquota,grpquota」(針對用戶和組做磁碟配額)或「defaults,usrquota"(針對用戶做磁碟配額 )或"defaults,grpquota"(針對組做磁碟配額)
重新掛載文件系統:
#mount –o remount  /home
創建配額文件
#quotacheck –cmug  /home
啟動配額
#quotaon -av
配額設置
# edquota -u administrator
Disk quotas for user administrator (uid 16777216):
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
      /dev/sdb1    0   500000   512000              10       0       0     
(其中:blocks,已用磁碟空間;soft,磁碟空間軟限制,hard:磁碟空間硬限制;
        inodes: 已寫多少個文件;soft:磁碟文件數量軟限制;hard:磁碟文件數量硬限制)
查看磁碟配額情況
#quota -u administrator

分析:使用磁碟限額有一點不爽的地方就是它不是默認給所有的用戶設置限額。也就是說,如果你想給哪個用戶啟用磁碟限額,你必須先建立那個用戶,然後再針對那個用戶進行限制。可是在域里,我們所有的用戶已經建立好了?怎麼一個一個的給進行磁碟限額呢?還好edquota提供了這麼一個特性,就是你可以以一個用戶為模板,把配置複製給新用戶,這樣就簡單了,如果要手動給用戶分配限額的話,這樣就可以搞定:wbinfo –u|xargs|edquota -p administrator –u。這樣我們就把administrator這個用戶的配額情況」分發」給了所有用戶!還記得我們的mkhome.sh嗎?是的,就是它,裡面有這第一句edquota -p administrator -u $user,這句話的意思就是以administrator為模板給用戶設置磁碟限額。這樣寫在腳本里,不但省去了手工執行,新添加用戶也不怕了J
8.域用戶登陸自動掛載自己的共享文件夾
        嘿嘿,能做到這步,已經很不容易了,如果你做到了,那麼恭喜你,因為終點就在眼前了。到這一步,你已經成功完成了samba通過ad域進行驗證,並給驗證用戶分配500M的固定空間,現在就讓我們一鼓作氣,將這個優雅的高難度動作畫個完美的句號吧J
        我們知道windows有個「映射網路驅動器」的功能。今天用到的東東就是它。其實原理很簡單,就是我們寫個批處理,這個批處理的功能是獲得登陸用戶的用戶名,然後去連接共享。而用戶登陸的時候就自動執行這個批處理。是不是很好玩呢?
        這個操作在域伺服器上進行。在伺服器上有個路徑C:\WINDOWS\SYSVOL\sysvol\rainbird.net\scripts,把你想要域用戶登陸執行的腳本放在這個文件里就可以了


終結:在操作中幾個點要注意
如果沒有驗證用戶及samba配置文件沒有寫對可能導致smb和winbind服務重啟,請認真檢查配置文件
在建共享目錄時候一定要注意新建目錄的用戶許可權和組許可權。
《解決方案》

上面正文多數為轉載前輩。有些細節為自己添加。望大家勿拍磚!
《解決方案》

收藏了,這個帖子講得非常詳細了。不過我還遇到一個問題,windows中的administrator用戶如何映射成linux中的root用戶,使得許可權問題能夠平穩的過渡?
《解決方案》

本帖最後由 smallfish 於 2010-06-13 14:30 編輯

樓主寫的不錯,我目前也在RHEL5上做SAMBA ,不過遇到問題,我的winbind服務起不來,我samba的版本是3.4.8,不知道樓主版本多少?

錯誤信息是:

wbinfo -t
checking the trust secret via RPC calls failed
error code was  (0x0)
Could not check secret

但是發現一個問題,我把smb.conf里security=user后,winbind服務可以起來,但是錯誤還是一樣。
《解決方案》

樓主寫的不錯,我目前也在RHEL5上做SAMBA ,不過遇到問題,我的winbind服務起不來,我samba的版本是3.4.8,不 ...
smallfish 發表於 2010-06-13 10:04 http://bbs.chinaunix.net/images/common/back.gif


    你的這個問題我以前也遇到過,用share和user都可以,但是一用ads,winbind就無法啟動。可能和samba的版本有關係。


我的這個環境是千錘百鍊出來的。。呵呵。。試過很多環節。


現在我遇到一個新問題,我的AD剛剛遷移到windows 2008 R2上。原來好好的終端在訪問samba的時候發現出現一個錯誤「管道的另一端上沒有任何進程」


在國外的網站上查了相關資料,說這是samba版本的問題,我用的是samba是3.0.33。。說要3.4。看你說的這個故障感覺挺怕。

對了,你有3.4的rpm包嗎?能給地址或者聯繫我嗎?
《解決方案》

不好意思,我才看到這個消息。
一般我都不用RPM的,這個也不是RPM,軟體都是在官網下載的,你可以搜索一下。

謝謝




[火星人 ] 彙集samab集成AD驗證+磁碟配額已經有486次圍觀

http://coctec.com/docs/service/show-post-16038.html