samab集成AD驗證 磁盤配額
這是我工作的實例, 每個步驟我都做過測試. 我碰到的問題, 我都會羅列出來, 有的并未解決, 歡迎各位高手多多指點.1. 測試環(huán)境:DC&DNS:Windows Server 2003 sp2 企業(yè)版
這是我工作的實例, 每個步驟我都做過測試. 我碰到的問題, 我都會羅列出來, 有的并未解決, 歡迎各位高手多多指點.
1. 測試環(huán)境:
DC&DNS:Windows Server 2003 sp2 企業(yè)版. 計算機名為:hq-dc-01.resoft.css.com.cn ip :10.168.168.226
客戶機:Red Hat Enterprise Linux ES5.4 hostname為sharefile ip: 10.168.165.250
域名:resoft.css.com.cn
2. 試驗?zāi)康?將Linux 加入到Windows 域, 并實現(xiàn)Windows 域帳戶登陸Linux 服務(wù)器.
3. 準備工作:
a. 在一臺機器上安裝Windows Server 2003 ,并升級為DC, 同時集成DNS 服務(wù).
b.Linux的準備工作也很簡單, 主要是檢查以下幾個包是否被安裝:
samba-3.0.23c-2
samba-common-3.0.23c-2
samba-client-3.0.23c-2 //samba的相關(guān)包
krb5-libs-1.5-17
krb5-workstation-1.5-17
krb5-devel-1.5-17
pam_krb5-2.2.11-1 //kerberos相關(guān)的軟件包
主要就用到這些包, 由于各Linux 發(fā)行版本的不同, 包的版本或許會有差異.
4. 配置步驟:
a. 修改ip 和dns 我就不做介紹了. 但是要注意防火墻(iptables)和SELinux.
你可以把iptables 規(guī)則清空, 并禁用SELinux.
清空iptables 規(guī)則命令如下:
iptables -F
禁用SELinux 方式如下:
vi /etc/selinux/config
將其中的 SELINUX=enforcing
改成 SELINUX=disable
b. 修改/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]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com:88
admin_server = kerberos.example.com:749
default_domain = example.com
,}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
其中需要我們修改的地方很少, 以我的例子為例, 修改后的文件如下:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = RESOFT.CSS.COM.CN //改成你的域名
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
RESOFT.CSS.COM.CN = { //改成你的域名
kdc = 10.168.168.226:88 //改成你DC 的FQDN 或者是IP , 兩者沒什么區(qū)別 admin_server = 10.168.168.226:749
default_domain = resoft.css.com.cn //改成你的域名,注意和上面的不同.(大小寫) }
[domain_realm]
.resoft.css.com.cn = RESOFT.CSS.COM.CN
resoft.css.com.cn = RESOFT.CSS.COM.CN //接著改
[kdc]
profile = /var/kerberos/krb5kdc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
,修改完畢后運行下面的命令查看kerberos 文件是否有誤:
kinit
其中administrator 是域管理員賬戶, RESOFT.CSS.COM.CN 是你的域名.
回車鍵后, 會提示你輸入密碼, 如果沒有什么錯誤. 在你輸入密碼回車后, 會自動返回到Linux 命令提示符下.
在這里要注意的小問題就是Linux 本地的時間要和DC 的時間差問題, 我們都知道, 在DC 上的策略中, 時間差允許的范圍是5分鐘, 所以, 在運行上述的命令前, 最好先同步下Linux 和DC 的時間:
ntpdate 192.168.255.1
或者直接更改系統(tǒng)時間
date -s 年/月/日 時:分:秒
c. 這一步是最主要的步驟了,就是修改/etc/samba/smb.conf配置文件.samba 的主配置文件選項很多, 在加上各版本中默認的選項都有所差異, 在這里我就不列舉典型的smb.conf 文件了, 我只把我的smb.conf 文件帖出來, 以供各位參考:
[global]
workgroup = SHAREFILE //需要加入的域的netbios 名, 注意是域的netbios 名, 要大寫
netbios name = Linux //本機器的netbios 名, 有的版本沒有這一項會沒有這個, 要手動添加
server string = Samba Server //對該服務(wù)器的描述
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 = RESOFT.CSS.COM.CN //增加這一行, 注意這里是域名.
password server = hq-dc-01.resoft.css.com.cn //這里是DC 的FQDN, 也可以寫ip, 但是有時候會出問題, 建議寫FQDN
encrypt passwords = yes //加密在網(wǎng)絡(luò)上傳輸?shù)挠脩裘艽a
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 //有人說是自動創(chuàng)建用 getent passwd[group]看到的 用戶和組的信息. 具體有什么用, 我也說不清楚
[homes]
comment = Home Directories
browseable = no
writable = yes
create mode = 0777
directory mode = 0777 //創(chuàng)建的文件和目錄的默認權(quán)限
path = /home/D/U //用戶主目錄的相關(guān)設(shè)置
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
以上紅色的部分都是要修改的, 其余的都保持默認就行. 好了,修改完成后, 保存退出. 然后用下面的命令測試 smb.conf 是否有誤:
testparm
顯示的結(jié)果如下

:
在這里注意兩個地方就行, 一個是 Loaded services file OK. //說明你的配置文件沒有錯 還有一個就是:Server role:ROLE_DOMAIN_MEMBER //說明你的服務(wù)器已經(jīng)是域的
" 準" 成員了.
好了, 做了這些測試后, 先把smb 和winbind 兩個服務(wù)開啟成隨系統(tǒng)自動啟動:
chkconfig smb on
chkconfig winbind on
然后重啟samba 服務(wù):
service smb restart //寫到這里, 我想起一點好玩的事來, 在fedora 9中(其他版本我不知道),
smb 和nmb 服務(wù)是分開的, 也就是說你用這條命令只能重啟動smb, 不能重 啟nmb, 你還要打service nmb restart才行.....
然后就可以加入域了:
,net ads join -W RESOFT.CSS.COM.CN -S dc -U administrator
然后會要求你輸如管理員的password, 輸入后, 正常情況下會提示加入域成功.

在這里我插一句, 有時候用net ads join 會不好使, 這時候就試試net rpc join –S RESOFT.CSS.COM.CN –U administrator 這種方式.
到這里, 我們就已經(jīng)把samba 服務(wù)器加入到域里了, 這時, 在DC 上,computers 這個OU 里就應(yīng)該可以看到你的samba 服務(wù)器了

.
這時, 我們重啟winbind 服務(wù):
service winbind restart
重啟完成后,我們就可以用下面的幾條命令來進行測試了:
wbinfo -t //測試該samba 服務(wù)器與域的信任關(guān)系

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


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

.

到這里呢, 我們的samba 服務(wù)器就成功的加入到域里了,但是呢, 卻還不能實現(xiàn)域賬戶在Linux 終端上的登陸. 想要實現(xiàn)這個目的, 其實也很簡單,只需要修改下面幾個文件就可以了: /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
修改完畢后, 根據(jù)上面smb.conf 文件的配置, 我們就可以實現(xiàn)用戶的登陸了,不過還有一點要說明, 就是在用戶登陸前,必須手動創(chuàng)建他們的登陸主目錄, 并且賦予他們完全控制的權(quán)限. 比如, 我想讓administrator 用戶登陸Linux, 實現(xiàn)步驟如下:
cd /home
mkdir RESOFT
cd RESOFT
mkdir administrator
chown administrator administrator //在home 目錄下創(chuàng)建RESOFT 域目錄, 并在該目錄下創(chuàng)建
要登陸用戶administrator 的目錄,更改目錄權(quán)限.
這樣在終端上就可以實現(xiàn)域用戶賬戶的登陸了.
還有就是用戶登陸Linux 平臺后, 權(quán)限控制的問題. 默認情況下, 這種方式登陸到Linux 平臺的用戶只有對自己主目錄有完全控制權(quán)限, 其余的文件均為只讀.
可以通過下面的方法來實現(xiàn)對域用戶權(quán)限的控制:
1. 更改/etc/nsswitch.conf文件.
passwd: winbind files
shadow: files winbind
group: winbind files
細心的朋友也許已經(jīng)注意到了這個文件與上面那個文件的不同. 就是shadow 的查找順序. 為什么這么改, 呵呵,先賣個關(guān)子, 接著往下看.
2. 然后先把winbind 服務(wù)停掉.
建立與要登陸Linux 的域用戶賬戶的同名Linux 賬戶.
3. 重啟winbind 服務(wù). 用域賬戶登陸. 這時會發(fā)現(xiàn), 登陸后域用戶的登陸點不是在/home/D/U下了, 而是在/home/U下. 為什么呢?
這是因為nsswitch.conf 文件影響的結(jié)果. 就是域用戶在輸入自己的登陸名時,Linux 系統(tǒng)并不認為是域用戶, 而認為該用戶是一個本地用戶, 而shadow 項的設(shè)置, 是先去DC 進行密碼的查詢. 于是就造成了一種假象, 就是域用戶用自己的用戶名和密碼登陸了Linux. 所以其登陸目錄為/home/U.
既然,Linux 認為該登陸用戶是一個本地用戶, 那么我們就可以很方便的對他賦予權(quán)限了. 但是, 如果要登陸Linux 的用戶非常多, 那么作為管理員, 我們的工作量會非常大, 這也是我下面要提出的用LDAP 想法的原因
,1. 自動創(chuàng)建用戶目錄
細心的朋友可能發(fā)現(xiàn)從開篇一直到現(xiàn)在除了操作方式不一定以外,所做的事情和<
新建立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
更改文件權(quán)限設(shè)置:
# chmod 700 /home/mkhome.sh
這個腳本接受兩個參數(shù),一個是用戶名,一個是組名。然后給這個用戶創(chuàng)建目錄,并分配權(quán)限,然后再給分配一下用戶空間。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 //執(zhí)行創(chuàng)建目錄的操作。
這段配置中最帥的就是這個mkhome.sh 的存在。因為這個腳本的執(zhí)行者是root, 所以我們腳本的權(quán)限設(shè)
,置700即可。再往下我們將繼續(xù)探索它的神奇魔力。寫完這段保存一下,重啟smb:service smb restart。這樣,在一臺xp 的機器上,用域用戶登陸,然后訪問2.168.1.246,是不是看到了一個以你登陸的域用戶名命名的一個文件夾呢?沒錯,就是它!你現(xiàn)在可以試下刪寫文件了。
7. 設(shè)置磁盤配額
因為磁盤配額只能在一塊單獨的分區(qū)上啟用,所以筆者專門添加了一塊分區(qū)掛載到home 目錄下,這點要注意。
編輯fstab
[root@filesrv1 ~]#vi /etc/fstab
/dev/hdb1 /home ext3 defaults,usrquota,grpquota 選擇分區(qū),將defaults 選項改為:“defaults,usrquota,grpquota”(針對用戶和組做磁盤配額)或“defaults,usrquota"(針對用戶做磁盤配額 )或"defaults,grpquota" (針對組做磁盤配額)
重新掛載文件系統(tǒng):
[root@filesrv1 ~]#mount –o remount /home
創(chuàng)建配額文件
[root@filesrv1 ~]#quotacheck –cmug /home
啟動配額
[root@filesrv1 ~]#quotaon -av
配額設(shè)置
[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 :磁盤文件數(shù)量軟限制;hard :磁盤文件數(shù)量硬限制) 查看磁盤配額情況
[root@filesrv1 home]#quota -u administrator
分析:使用磁盤限額有一點不爽的地方就是它不是默認給所有的用戶設(shè)置限額。也就是說,如果你想給哪個用戶啟用磁盤限額,你必須先建立那個用戶,然后再針對那個用戶進行限制??墒窃谟蚶?,我們所有的用戶已經(jīng)建立好了?怎么一個一個的給進行磁盤限額呢?還好edquota 提供了這么一個特性,就是你可以以一個用戶為模板,把配置復制給新用戶,這樣就簡單了,如果要手動給用戶分配限額的話,這樣就可以搞定:wbinfo –u|xargs|edquota -p administrator –u 。這樣我們就把administrator 這個用戶的配額情況”分發(fā)”給了所有用戶!還記得我們的mkhome.sh 嗎?是的,就是它,里面有這第一句edquota -p administrator -u $user,這句話的意思就是以administrator 為模板給用戶設(shè)置磁盤限額。這樣寫在腳本里,不但省去了手工執(zhí)行,新添加用戶也不怕了?
8. 域用戶登陸自動掛載自己的共享文件夾
嘿嘿,能做到這步,已經(jīng)很不容易了,如果你做到了,那么恭喜你,因為終點就在眼前了。到這一步,你已經(jīng)成功完成了samba 通過ad 域進行驗證,并給驗證用戶分配500M 的固定空間,現(xiàn)在就讓我們一鼓作氣,將這個優(yōu)雅的高難度動作畫個完美的句號吧?
我們知道windows 有個“映射網(wǎng)絡(luò)驅(qū)動器”的功能。今天用到的東東就是它。其實原理很簡單,就是我們寫個批處理,這個批處理的功能是獲得登陸用戶的用戶名,然后去連接共享。而用戶登陸的時候就自動執(zhí)行這個批處理。是不是很好玩呢?
,這個操作在域服務(wù)器上進行。在服務(wù)器上有個路徑C:WINDOWSSYSVOLsysvolrainbird.netscripts,把你想要域用戶登陸執(zhí)行的腳本放在這個文件里就可以了
終結(jié):在操作中幾個點要注意
如果沒有驗證用戶及samba 配置文件沒有寫對可能導致smb 和winbind 服務(wù)無法重啟 在建共享目錄時候一定要注意新建目錄的用戶權(quán)限和組權(quán)限。