本文實作了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
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 [email protected]
kinit 指令将測試伺服器間的通信,administrator為域記憶體在的使用者, RAINBIRD.NET 是你的活動目錄的域名,必須大寫。
正确操作的提示:
[root@filesrv~]# kinit [email protected]
Password for [email protected]: (正确輸入密碼後直接傳回)
[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 [email protected]
[email protected]'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 測試的時候提示如下:
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
net use P: \\192.168.1.246\%USERNAME%
這個檔案的權限要設定成everyone讀取。不然後域使用者登陸的時候會報錯的喲。這樣還不算完。再配置一下。打開“active directory 使用者和計算機”找到users,多選你要配置設定空間的使用者,如圖,選擇屬性。
找到“配置檔案”選中“登陸腳本”,在後面的框裡輸入“share.cmd”
這樣,被選中的使用者下次再登陸的時候就被“強制”執行這樣腳本。當然這個政策不知道要多長時間才能分發下去。如果你現在就想讓它生效,那麼:gpupdate /force!
域使用者登陸以後在我的電腦就會看到這塊共享盤
就是FileSrv那個了。輕按兩下打開,就像操作本地硬碟一樣友善。
可以添加修改檔案。至于空間是不是限定了500M,那就自己試一下吧J(或者去linux quota查詢也可以喲~~)
Samba的故事到這裡就講完了。再下一步就是samba群集了。Move on ,Let’s go!
相關連結:
linux加入windows域之完美方案