從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文件的項里使用。
下面是一個示例:
# 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,配置如下
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
ticket_lifetime = 24h
forwardable = yes
TEST.COM = {
kdc = 192.168.1.200:88
admin_server = 192.168.1.200:749
default_domain = TEST.COM
}
.test.com = TEST.COM
test.com = TEST.COM
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
我使用winbind方法同步AD帳號:
samba.conf配置如下:
:
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
template homedir = /homes/%D/%U 註:此處為homes而不是home,我在此處就走了很多彎路,當然也可以自己設定在/home/%D/%U
template shell = /bin/bash
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 separator - 指定一個字元作為分隔符,winbind將使用該分隔符來用戶或組名。使用該配置將使得域用戶表示為 "MYDOMAIN+username",域組被表示為"MYDOMAIN+Domain Users"
- 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 就可以使用以下代碼:
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
具體的可以查看我的 http://romexp.blog.163.com/blog/static/36100652007629115755400/
[ 本帖最後由 romexp 於 2007-7-29 16:51 編輯 ]
《解決方案》
用AD做有它的好處,不過如果就單單隻用一個AD功能,那就有一些浪費了。
Sendmail用AD驗證身份沒試過,可能有一定的難度。LDAP也是不錯的選擇。
《解決方案》
回復 #2 szkingrose 的帖子
是啊。我去研究啊。呵呵,,看到有人能做了,所以還是要試試呢
《解決方案》
有不有人用過不使用winbind,而使用net user script自動加用戶和主目錄啊,我查看了好多資料,也沒有找到啊。。。鬱悶ing
add user script 總是不能自動加入user和home目錄
所以現在只有用winbind了
:em02: :em02: :em02: :em02:
《解決方案》
最近正好也在研究這個東東。和樓主的獲得的結果差不多,但我有幾個疑問沒搞明白。
問題1:我用wbinfo -u中 AD的帳號為什麼登錄不了linux系統呢?反之,我用linux下的帳號為什麼不能登錄window呢
問題2:我可以用net rpc join 繼續添加其它AD伺服器,但是我的wbinfo -u/-g還是顯示第一個被添加的AD伺服器的數據。。有沒有辦法在原有基礎上追加新的AD伺服器的數據啊?
[ 本帖最後由 lzl8146 於 2007-8-2 23:33 編輯 ]
《解決方案》
原帖由 lzl8146 於 2007-8-2 23:29 發表 http://bbs.chinaunix.net/images/common/back.gif
最近正好也在研究這個東東。和樓主的獲得的結果差不多,但我有幾個疑問沒搞明白。
問題1:我用wbinfo -u中 AD的帳號為什麼登錄不了linux系統呢?反之,我用linux下的帳號為什麼不能登錄window呢
問題2:我 ...
對於第一個問題:AD帳號不能登入linux,你要查看 getent passwd /getent group 看AD帳號是否在linux passwd上面創建了,如果沒有的話就要檢查一下winbind的設定了,對於你說的反之,可以就沒有必要了吧,,呵,要不就一個一個在AD上建立linux帳號了,(實現是沒有必要)
對於第二個問題:net rpc join 繼續添加其它AD伺服器,你要先刪除/etc/samba/secrets.tdb ,你可以試下,(我覺得你這個功能也是不太現實,怎麼會讓一台member 伺服器 成為二個AD域的伺服器呢?呵呵)
《解決方案》
謝謝romexp的回復。。
第一個問題,AD帳號通過getent passwd查看時已經存在了。是DOMAIN+AD帳號的形式,我用DOMAIN+AD登錄時不能登錄linux,有可能是什麼原因?
第二個問題,我想知道lmember 伺服器(或者說成員伺服器),在域環境下它的作用?我一直認為只是成員機器而已。據我了解,一個大的網路應該存在多個域控制器(裝有AD的機器),比如不同的分公司,而有台linux需要提供一些服務,這二個域控制器所管轄的機器都要用到,這個時候難道不要把這台linux主機分別加入到這二個域中去嗎?還是所在域控制器這一級進行處理?
謝謝您的關注
《解決方案》
回復 #7 lzl8146 的帖子
NO1 :查看你linux的share 目錄的許可權設定,要要真正能瀏覽到linux上的文件要三方面的許可權設定:1、AD用戶能在linux上登陸,(你已經做到了),2、使用chmod和chown更改linux上面的許可權,3、firewall的設定是否正確
NO2:總公司和分公司之間是域林之間的關係,一般是信息關係,我沒有做過測試,但是在原理上,如果linux已經成為一個伺服器的成員伺服器,而且二個域之間是根域與子域的關係(或是信息關係),應該是可以,不過要測試喲,你測試下,再說吧
《解決方案》
請問我把valid users 設為某個ad的用戶時,就可以登陸,但如果valid users或valid groups 為ad組時組裡的成員就怎樣都登陸不了,為什麼呢???
在線等~~~~~
《解決方案》
原帖由 chenny123 於 2007-8-6 18:15 發表 http://bbs.chinaunix.net/images/common/back.gif
請問我把valid users 設為某個ad的用戶時,就可以登陸,但如果valid users或valid groups 為ad組時組裡的成員就怎樣都登陸不了,為什麼呢???
在線等~~~~~
看看這裡的說明吧,http://romexp.blog.163.com/blog/static/36100652007730299312
或者對你會有幫助