Samba經過ad域進行認證並限制空間大小

本文實現了 samba 服務被訪問的時候經過 windows 域服務器進行用戶名和密碼驗證 ; 認證經過的用戶能夠自動分配 500M 的共享空間 ; 在用戶經過 windows 域登錄系統的時候能夠自動把這塊空間映射成一塊硬盤。
環境說明:
文件服務器用的 Centos5.3 ,域控用的 Win2k3 sp2 Domain rainbird.net
Centos5.3:
Name:Filesrv
IP:192.168.1.245
Dns:192.168.1.241
Samba: 3.0.33 -3.7.el5
Win2k3:
Name:ad1
Ip:192.168.1.241
Dns:192.168.1.241
Ok,let’s move!
由於是服務器配置,因此本文的操做都是在字符界面下直接編輯文件。固然爲了提升工做效率其中一部分配置是能夠在圖形界面下配的。前提是你必須是 redhat/centos 系統。若是是的話,能夠參考我上一篇文章 << linux加入windows域之完美方案 >> 來作 J
1.samba 服務器軟件需求
krb5-workstation- 1.2.7 -19
pam_krb5-1.70-1
krb5-devel-1.2.7-19
krb5-libs-1.2.7-19
samba-3.0.5-2
[root@filesrv CentOS]# rpm -qa|grep krb5
krb5-auth-dialog-0.7-1
krb5-libs- 1.6.1 -25.el5
krb5-devel- 1.6.1 -25.el5
pam_krb5- 2.2.14 -1
krb5-workstation- 1.6.1 -25.el5
[root@filesrv CentOS]# rpm -qa|grep samba
samba-swat- 3.0.28 -0.el5.8
samba-common- 3.0.28 -0.el5.8
samba-client- 3.0.28 -0.el5.8
samba- 3.0.28 -0.el5.8
 
若是 centos 在安裝的時候沒有取消默認選中的 」Base」, krb5 的包是默認所有安裝
若是沒有選擇安裝 samba 能夠這樣安裝
[root@filesrv CentOS]# rpm -ivh xinetd- 2.3.14 -10.el5.i386.rpm
[root@filesrv CentOS]# rpm -ivh --aid samba*.rpm

2.
配置 kerberos( 關鍵 )
下面配置參數讓 Kerberos 進程知道處理活動目錄服務器,對 /etc/krb5.conf 作適當的修改,修改時須要注意的是 Kerberos 是大小寫敏感的。
這是個人 krb5.conf 配置文件:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
ticket_lifetime = 24000
default_realm =
RAINBIRD.NET // 默認域名
dns_lookup_realm = false
dns_lookup_kdc = false

[realms]
RAINBIRD.NET = {
kdc = 192.168.1.241:88 // 域服務器 ip
# admin_server = kerberos.example.com:749
default_domain = RAINBIRD.NET
}

[domain_realm]
. rainbird.net = RAINBIRD.NET
rainbird.net = RAINBIRD.NET


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

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

3.
測試 kerberos
kinit administrator@RAINBIRD.NET
kinit
命令將測試服務器間的通訊, administrator 爲域內存在的用戶, RAINBIRD.NET 是你的活動目錄的域名,必須大寫。
正確操做的提示 :
[root@filesrv~]# kinit administrator@RAINBIRD.NET                            
Password for administrator@RAINBIRD.NET: ( 正確輸入密碼後直接返回 )
[root@filesrv~]#

可能遇到的幾個常見錯誤 :
域名錯誤:
kinit(v5): Cannot find KDC for requested realm while getting initial credentials.
密碼錯誤,驗證失敗:
kinit(v5): Preauthentication failed while getting initial credentials.
用戶不存在 :
kinit(v5): Client not found in Kerberos database while getting initial credentia                                                                                                                      
時間不一致 :
kinit(v5): Clock skew too great while getting initial credentials
4. 修改 /etc/nsswitch.conf
passwd: files winbind
shadow: files winbind
group: files winbind

5.
配置 samba
修改 /etc/samba/smb.conf 以下幾行
workgroup = RAINBIRD
server string = Filesrv
password server = AD1.RAINBIRD.NET // 域服務器 , 能夠用 ip 也能夠用域名
realm = RAINBIRD.NET // 活動目錄服務器域名
security = ads // 採用活動目錄認證方式
idmap uid = 16777216-33554431
idmap gid = 16777216-33554431
template shell = /sbin/nologin
template homedir = /home/%U
winbind use default domain = true
winbind offline logon = true
winbind enum groups = yes
winbind enum users = yes
winbind separator = /
 
紅色部分是要修改的,藍色部分是要新增的。建議直接把已經存在的註釋掉,把這裏列出來的東西,直接放進去,這樣在一塊方便查找。
咱們如今把 samba 服務器加入 windows 域。
[root@filesrv1 samba]# net ads join -U administrator@RAINBIRD.NET
administrator@RAINBIRD.NET's password:
Using short domain name -- RAINBIRD
Joined 'FILESRV1' to realm 'RAINBIRD.NET'
提示是 」Joined」 ~
 
加入失敗可能的緣由 :
      兩臺機器的時間不一致!
從新啓動服務
service smb restart
service winbind restart
設定服務開機自動啓動
chkconfig smb on
chkconfig winbind on
我們去 Windows 2003 服務器上檢查一下:打開活動目錄用戶和計算機,查看其中的條目,若是成功的話,就能夠看到你的 Linux 服務器。
這裏樣你能夠用 wbinfo 作一些測試
驗證 Samba 主機已成功加入 AD
[root@filesrv samba]# wbinfo -t
checking the trust secret via RPC calls succeeded
說明主機信任已成功創建
使用 wbinfo –u 能夠列出 AD 中註冊的賬號信息
[root@filesrv samba]# wbinfo -u
administrator
guest
support_388945a0
krbtgt
rainbird
rainbow
a
a1
a2
root
a3
a4
a5
a6
a7
a8
a9
a10
Wbinfo –g 能夠返回 AD 中的組信息
[root@filesrv samba]# wbinfo -g
domain computers
domain controllers
schema admins
enterprise admins
domain admins
domain users
domain guests
group policy creator owners
dnsupdateproxy
 
可能的錯誤
若是你 wbinfo –t 測試的時候提示以下:
[root@filesrv samba]# wbinfo -t
checking the trust secret via RPC calls failed
error code was  (0x0)
Could not check secret
說明你 winbind 服務沒起動,重啓一下就 OK
固然了有必要說一下, winbind 若是提示啓動成功但沒有啓動的話,有多是由於你沒有加入到域,因此嚴格按本文的操做步驟來作,你不會錯過 J
 
6. 自動建立用戶目錄
細心的朋友可能發現從開篇一直到如今除了操做方式不必定之外,所作的事情和 << linux加入windows域之完美方案 >> 沒有太大的區別。嗯,筆者不置能否,估且這麼理解吧。但願有點小細節您注意到了,在 smb.conf 中,有一句 template shell = /sbin/nologin 。是的, samba 服務器,咱們只但願他提供 samba 服務,不但願有用戶登錄。在上一篇文章中解決用戶登錄時主目錄不存在的問題,用的是 pam_mkhomedir.so 這個東東。在文件共享這塊,筆者意外的發現,這個文件,對於經過 samba 訪問過來的請求不會建立主目錄!這可如何是好?這就是腳本 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
      這個腳本接受兩個參數,一個是用戶名,一個是組名。而後給這個用戶建立目錄,並分配權限,而後再給分配一下用戶空間。 Ok, 回頭看一下 smb.conf 文件。
[homes]
        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, 是否是看到了一個以你登錄的域用戶名命名的一個文件夾呢?沒錯,就是它!你如今能夠試下刪寫文件了。怎麼有問題?有問題就本身檢查一下,爲何吧 J
7. 設置磁盤配額
      由於磁盤配額只能在一塊單獨的分區上啓用,因此筆者專門添加了一塊分區掛載到 home 目錄下,這點要注意。
編輯 fstab
[root@filesrv1 ~]#vi /etc/fstab
/dev/hdb1               /home               ext3    defaults,usrquota,grpquota
    
選擇分區,將defaults選項改成:「defaults,usrquota,grpquota」(針對用戶和組作磁盤配額)或「defaults,usrquota"(針對用戶作磁盤配額 )或"defaults,grpquota"(針對組作磁盤配額)
從新掛載文件系統:
[root@filesrv1 ~]#mount –o remount  /home
建立配額文件
[root@filesrv1 ~]#quotacheck –cmug  /home
啓動配額
[root@filesrv1 ~]#quotaon -av
配額設置
[root@filesrv1 ~]# 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:磁盤文件數量硬限制)
查看磁盤配額狀況
[root@filesrv1 home]#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,把你想要域用戶登錄執行的腳本放在這個文件裏就能夠了。
Share.cmd裏面的內容是:
@echo off
if exist P: net use P: /del /y
       這個文件的權限要設置成everyone讀取。否則後域用戶登錄的時候會報錯的喲。這樣還不算完。再配置一下。打開「active directory 用戶和計算機」找到users,多選你要分配空間的用戶,如圖,選擇屬性。
找到「配置文件」選中「登錄腳本」,在後面的框裏輸入「share.cmd
這樣,被選中的用戶下次再登錄的時候就被「強制」執行這樣腳本。固然這個策略不知道要多長時間才能分發下去。若是你如今就想讓它生效,那麼:gpupdate /force!
域用戶登錄之後在個人電腦就會看到這塊共享盤
就是FileSrv那個了。雙擊打開,就像操做本地硬盤同樣方便。
能夠添加修改文件。至於空間是否是限定了500M,那就本身試一下吧J(或者去linux quota查詢也能夠喲~~)
       Samba的故事到這裏就講完了。再下一步就是samba羣集了。Move on ,Let’s go!
 
 
相關連接:
相關文章
相關標籤/搜索