從Windows到Linux遷移之文件服務器(Samba和AD完美結合)
經過在網上查找好多資料,現在終於搞定了Samba的用戶管理由AD 域控制器來執行,也就是說把samba 服務器加入到AD 域中,使之成為AD中的member server,這樣就可以逐步把Windows的文件服務器向linux的(samba)文件服務器進行遷移,(我的目的就是要把WIN往linux上面遷移!呵呵,這樣就是提高服務器的安全性和穩定性,在前期我做過使用desktop OS也換成linux,但是對我來說是可以的,而對大多數非專業人員、或者說企業內部人員,這是很難做到,所以最終可以在資金和安全方面考慮,把企業裡面的服務器換成linux OS,這樣是可以做到的,當然,有人也會說,把AD也換成Samba,不過我還沒有去試過,以後再去試,再說,現在大多數企業環境還是離不開回win吧,呵呵,所以我認為把Samba加入到域是最好的一種方式,以後可以把ISA換成squid,exchange換成sendmail或是qmail等,最終還是要用AD來實現全網統一用戶管理,所以我們要走的路還很長!在chinaunix 上面的已經有高手這樣做到了,看來我要加油)
Samba有兩種方法來動態增加系統用戶帳號
一、添加用戶腳本
使用添加用戶腳本可能是兩種方法裡面最簡單的一種,因為它只需要一個配置選項。
添加用戶腳本這個Samba配置選項可以在/etc/samba/smb.conf文件的[global]項裡使用。
下面是一個示例:
# if you only want the accounts created but do not want the users to have a real
# login shell or their own home directory on the server, use something like this:
# add user script = /usr/sbin/useradd -g smbusers -s /bin/false -d /dev/null -M %u
# if you want to the domain users to have a real login shell and a home directory
# on the server, use something like this instead:
add user script = /usr/sbin/useradd -g smbusers -s /bin/bash %u
對一個連接用戶,如果他成功通過身份認證,並且帳戶在/etc/passwd裡並不存在,添加用戶腳本將為其創建一個系統帳戶。除非被配置成其他的目錄名,用戶主目錄將被創建成/home/<username>。
二、使用Windbind
詳情參看 《Samba有兩種方法來動態增加系統用戶帳號》
我的實際例:可以參看 http://romexp.blog.163.com/blog/static/3610065200762614516829
1. 實現環境
Fedora 7 + Squid 2.6 + Samba 3.0 + Krb5
2. 軟件包安裝
Samba及Krb5均通過yum安裝最新版本。
3. Kerberos配置
Win2003系統默認通過Kerberos做身份驗證,Kerberos驗證需要安裝Krb5軟件包。配置文件及測試都很簡單。Krb5的配置文件為/etc/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 = TEST.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes
[realms]
TEST.COM = {
kdc = 192.168.1.200:88
admin_server = 192.168.1.200:749
default_domain = TEST.COM
}
[domain_realm]
.test.com = TEST.COM
test.com = TEST.COM
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
我使用winbind方法同步AD帳號:
samba.conf配置如下:
[global]:
workgroup = TEST
netbios name = fedora
server string = Samba Server
security = domain
password server = win2k3.test.com
preferred master = no
domain master = no
domain logons = no
idmap uid = 15000-20000
idmap gid = 15000-20000
winbind enum groups = yes
winbind enum users = yes
註:此二行表示為是否在linux下添加AD帳號,只有加了此二行,在使用getent passwd和gentent group才能顯示AD上面的帳號和組
winbind separator = \
winbind use default domain = yes //注意:不要這項就會顯示為AD賬號為 LIONKING/user1,LIONKING/group1 ,用了這個就只顯示user1 group1
template homedir = /homes/%D/%U 註: 此處為homes而不是home,我在此處就走了很多彎路,當然也可以自己設定在/home/%D/%U
template shell = /bin/bash
[homes]
comment = User's Home Directories
path = /homes/%D/%U 和上面 template homedir的值一樣
browseable = no
valid users = %U
特別注意:此二處為一定要是%U,而不能使用%S ,%U 需要的客戶端用戶名即登錄用戶名,而%S是 當前共享名
writable = yes
這些設置的一個簡單的說明如下:
- idmap uid - 指定一個uid範圍,該範圍內的uid被用來映射UNIX用戶到windows用戶SID,而且要確保這個id範圍內沒有被本地或者NIS用戶佔用,winbind啟動以後,也不能在該ID範圍內添加用戶。
- idmap gid - 指定一個gid範圍,該範圍內的gid被用來映射UNIX用戶到windows的組SID,而且要確保這個id範圍內沒有被本地或者NIS組佔用,winbind啟動以後,也不能在該ID範圍內添加新組。
- winbind enum groups和winbind enum users - 指定winbind是否在系統上創建域的組/用戶,一般情況下都要設置為yes,除非你處於某種原因希望關閉該功能。
- template homedir - 用來指定為域用戶產生主目錄。上面的示例中使用了變量替換,將使得winbind把用戶主目錄設置為/homes/MYDOMAIN/username。
需要注意的是如果希望特定域或者所有域用戶在samba目錄有主目錄,那麼管理員必須手工創建,雖然template homedir控制samba在哪裡尋找域用戶的主目錄,但是不會自動創建,所以要自己手動創建,並設定權限。
然後,管理員需要手工編輯/etc/nsswitch.conf文件,這樣winbind能實現使用域上的用戶。在紅帽知識庫中有其他文章討論該問題。 http://www.redhat.com.cn/kbase/4760.php
使用 net rpc join -S win2k3.test.com -U administrator 把linux主機加入到域中
重新啟動samba
service smb restart
同時winbind也要重新啟動。
service winbind restart
確認Samba主機帳號在AD中正確註冊
root# wbinfo –t
checking the trust secret via RPC calls succeeded
說明主機信任已成功建立
使用wbinfo -u 可以列出AD中註冊的帳號信息。Wbinfo –g可以返回AD中的組信息。
配製NSS
Nss為Name Service Switch,控制帳號的驗證。編輯/etc/nsswitch.conf,如下
passwd: files winbind
group: files winbind
檢查PDC用戶(組)轉換為本地用戶(組)UID和GIU情況:
getent passwd
顯示將PDC用戶轉換成系統用戶的GID情況,顯示最後類似如下信息:
getent group
此時可以看到AD帳號已經加到linux的系統用戶列表中 uid和gid
總結:到目前為止,現在可以用AD的用戶進行samba ,並且home目錄也都可以訪問自己的家目錄了!比如:現在我在AD上新增user2 ,並設定
了password,能後需要在linux下面 mkdir /home/TEST/user2 再使用
# chown 'TEST\user2':'TEST\domain users' /home/TEST/user2 改變目錄所有者,就可以登錄使用了。
要設定share folds 就可以使用以下代碼:
[user2' Directory]
comment = user2's Directory
path = /homes/TEST/user2
;browseable = no
valid users = TEST/user2
writable = yes
create mode = 0777
directory mode = 0777 這二種方式還是需要合用chown 來改變目錄所有者才可以,還要研究!
以上為我使用 samba的winbind來對AD和samba的完美整合,使用用戶腳本方式,我還沒有去研究測試,我是在借鑒別人很多技術分享才得以成功的,當然可能還會有很多紕漏,還請大家多多指正,這也是我要把服務器逐步換為linux OS的第一步!請關注我的blog ( http://romexp.blog.163.com)後續還會有我的第二步。
我的MSN: rome_xp@msn.com
=================================================================================
以下是網友找到的: 批量添加域帳號的文件夾shell腳本
[root@linux2 ~]# vi mknthome.awk
#!/bin/awk
BEGIN {
FS = 「:」
uidmin = 16777000
uidmax = 33550000
}
{
if ($3 >= uidmin && $3 <= uidmax ) {
print 「\nmake directory 「 $6 「\nchown 「 $3 「.」 $4 「 「 S6
system ( 「mkdir -p 「 $6 「 ;chown 「 $3 「.」 $4 「 「 $6 )
}
}
(2) 開始建立家目錄了
[root@linux2 ~]# getent passwd | awk -f mknthome.awk
原文出處: 從Windows到Linux遷移之文件服務器(Samba和AD完美結合) - 深呼吸只為你的日誌 - 網易博客