除了前面提到的幾個資訊之外,在這裡我們也來談談如何讓你的 Samba 作更多的事情!
包括將 Windows 使用者的家目錄放到 Samba 上頭呢!^_^
前面介紹的內容都是屬於 Peer/Peer 的連線狀況,也就是 Samba 伺服器與 Windows 用戶端其實是平等地位的啦!
所以 Windows 用戶端需要知道 Samba 伺服器內的帳號密碼資料後,才能夠順利的使用 Samba 的資源。
不過,這樣的方式在較大型一些的區域網路環境可能就會有點困擾,例如學校的環境。
舉例來說,如果你有一個電腦教室裡面有 50 部 Windows XP Pro. 的個人電腦,由於電腦教室大家都會使用,
因此裡面這 50 部個人電腦有使用還原精靈,也就是每次電腦重新開機後整個作業系統就會還原成原本的樣子。
但我們知道使用者總是需要有個人家目錄吧?他們總不希望這次的工作在重新開機後就失去了~
所以我們可以利用一部主機來讓他們儲存資料啊!那就是 Primary Domain Controller (PDC) 主機囉。
其實 Samba PDC 的作用很簡單,就是讓 Samba PDC 成為整個區域網路的領域管理員 (domain controller),
然後讓 Windows 主機加入這個領域,未來使用者利用 Windows 登入時,Windows 會前往 PDC 伺服器取得使用者的帳號密碼,
同時 PDC 還會傳送使用者的重要資料到那部 Windows 個人電腦上,而 Windows 電腦上的使用者登出時,
該使用者修改過的資料也會回傳給 PDC ,如此一來不管這個使用者在哪一部個人電腦上面登入,
他都能夠取得正確的個人資料!很棒的作用吧!
PDC 是個很複雜的環境,他可以達到的功能相當的多,而且密碼的驗證也不必在同一部 PDC 主機上面,
不過這裡我們不談那麼複雜的東西,只是做一個簡單的練習,因此底下的這部 PDC 使用自己的密碼來進行驗證,
並且也管理自己所分享出去的資源囉!整個基本的設定流程應該是這樣的:
- 設定好 PDC 主機的 TCP/IP 與 Windows 主機的網路,這個你應該已知如何處理了;
- 設定 PDC 的角色定位,因為 PDC 管理自己的密碼,所以 security = user
- PDC 最好擁有整個網域的名稱解析權力,亦即成為主要的名稱解析器;
- 需有 netlogon 資源分享,提供 windows 2000/XP pro. 用戶端的登入之用;
- 由於 Windows 需讀入個人設定檔,預設目錄為 profile,Linux 系統需預先設定此目錄;
- 增加 PDC 上的使用者帳號以及機器代碼 (machine account) 等等
- 在 Windows 2000/XP pro. 個人電腦上設定成為 PDC 的用戶端。
底下咱們就來依序處理處理先!
0. 設定 lmhosts 或 /etc/hosts 對應 Netbios 與 IP
由於我們的 Samba 即將成為整個網域的名稱解析者,因此你最好將整個網域的 NetBIOS name 與 IP
的對應寫入此這個檔案當中。當然啦,如果你的網域 IP 的取得為 DHCP ,那這個檔案就不要寫了吧!
以我們這個案例為例,這個檔案的內容應該是:
[root@linux ~]# vi /etc/samba/lmhosts 127.0.0.1 localhost 192.168.1.254 vbirdserver 192.168.1.21 vbirdcpu2 192.168.1.11 vbirdcpu1
|
1. 設定 smb.conf 成為具有 PDC 的能力
假設我們要讓 PDC 用戶端登入時可以取得他自己的家目錄,那麼需要這樣處理:
[root@linux ~]# vi /etc/samba/smb.conf [global] workgroup = vbirdhouse netbios name = vbirdserver server string = This is vbird's samba server unix charset = utf8 display charset = utf8 dos charset = cp950 log file = /var/log/samba/%m.log max log size = 50 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 dns proxy = no template shell = /bin/false winbind use default domain = no security = user encrypt passwords = yes smb passwd file = /etc/samba/smbpasswd printcap name = cups load printers = yes printing = cups
# 與 PDC 有關的一些設定值: # 底下幾個設定值處理成為本區域網路內的主要名稱解析器 preferred master = yes domain master = yes local master = yes wins support = yes # 作業系統 (OS) 等級越高才能成為主網域的控制者,一般 NT 為 32, # Windows 2000 為 64 ,所以這裡我們設定高一點,但不可超過 255 os level = 200 # 底下則是設定能否利用 PDC 登入,且登入需要進行哪些動作: domain logons = yes logon drive = K: <==登入後家目錄掛載成 Windows 哪一槽 logon script = startup.bat <==每個使用者登入後會自動執行的程式 time server = yes <==自動調整 Windows 時間與 Samba 同步 admin users = root <==預設的管理員帳號!預設為 root # 因為鳥哥不喜歡在 Samba 當中使用 root ,所以這裡你也可以指定成其他帳號。
# 這個在指定登入者能夠進行的工作,裡面主要是具有許多執行程式: [netlogon] <==與前面的 logon script 有關,該程式放置在這裡 comment = Network Logon Service path = /home/samba/netlogon <==你要自己主動建立此目錄 writable = no write list = root follow symlinks = yes guest ok = yes
[homes] comment = Home directories browseable = no writable = yes valid users = %S create mode = 0664 directory mode = 0775 [temp] comment = Temporary file space path = /tmp read only = no public = yes
[root@linux ~]# testparm [root@linux ~]# /etc/init.d/smb restart
|
上面的設定有幾個地方比較有趣一點:
- time server:要使 Samba 與 Windows 主機的時間同步,使用這個項目;
- logon script:當使用者以 Windows 用戶端登入後,Samba 可以提供一支批次檔,
讓使用者去設定好他們自己的目錄配置。整個配置的內容記錄在 startup.bat 當中。
你要注意的是,這個 startup.bat 檔名可以隨意更改,不過他必須要放置到 [netlogon] 所指定的目錄內;
- logon drive:那麼這個家目錄要掛載到那個分割槽?
在 Windows 底下大多以 C, D, E... 做為磁碟的代號,你這裡可以指定一下家目錄要放置成為那個磁碟代號;
- admin users:指定這個 Samba PDC 的管理員身份。
- [netlogon]:指定利用網路登入時首先去查詢的目錄資源。
2. 建立所需要的目錄與檔案
先來建立 [netlogon] 內所需要的資料好了,那就是一個目錄:
[root@linux ~]# mkdir -p /home/samba/netlogon
|
接下來我們還得要建立允許使用者執行的檔案,就是那個 startup.bat 才行!
注意一下,我們這裡假設使用者家目錄為 K 槽,而 Samba 額外分享的 temp 則為 L 槽,
那你可以這樣做:
[root@linux ~]# vi /home/samba/netlogon/startup.bat net time \\vbirdserver /set /yes net use K: /home net use L: \\vbirdserver\temp # 這個檔案的格式為:net use [device:] [directory]
# 再將該檔案轉成 DOS 的斷行格式才行!因為是提供給 Windows 系統嘛! [root@linux ~]# unix2dos /home/samba/netlogon/startup.bat [root@linux ~]# cat -A /home/samba/netlogon/startup.bat net time \\vbirdserver /set /yes^M$ net use K: /home^M$ net use L: \\vbirdserver\temp^M$ # 瞧見嗎?會多出個奇怪的 ^M 符號,那就是 Windows 斷行字元。
|
3. 建立使用者
在 Samba 裡面建立使用者就是利用 smbpasswd 這個指令而已,我們已經建立過,所以這裡不再說明。
但是由於我們需要 root 這個帳號來管理 PDC 與 Windows 用戶端之間連線建立時所需要的權限,
所以你必須要建立起這個使用者才行。建立的方法很簡單,直接這樣做吧:
[root@linux ~]# smbpasswd -a root
|
另外,我們都知道 Windows XP pro. 的使用者設定檔會被放置到『 C:\Documents and Settings\使用者帳號 』目錄中,
在該目錄底下會有類似桌面、我的最愛、應用程式設定、啟動、我的文件夾啊等等的,
這些東西會放置到 Samba PDC 的哪裡去備份啊?其實是放置到:
目錄下的,該目錄預設會被主動的建立起來,不過偶而會有一些權限錯誤的問題~傷腦筋~
所以你可以預先處理該目錄,以 chmod 或 chown 來改變成該使用者可以存取的權限。
另外,為了避免困擾,對於新增的使用者而言,你可以這樣做:
[root@linux ~]# mkdir /etc/skel/profile
|
那以後新增的使用者都有可以存放來自 Windows 的特殊設定檔目錄喔!比較好管理囉~
當然啦,使用 useradd 新增使用者後,記得也要使用 smbpasswd -a username 來讓該使用者可以使用 Samba 喔!
4. 建立機器碼帳號
由於 PDC 會針對 Windows 用戶端的主機名稱 (NetBIOS name) 進行主機帳號檢查,
所以我們也要為用戶端的主機名稱進行帳號的設定。咦!啥是主機帳號?
一般使用者帳號是英文或數字,
主機帳號則在該帳號最後面加上一個錢字號『$』即可!
舉例來說, vbirdcpu2 這部主機可設定的帳號名稱為 vbirdcpu2$。
而我們知道要使用 smbpasswd 增加的使用者必須要在 /etc/passwd 當中,
因此要建立這個帳號你就得要這樣做:
[root@linux ~]# useradd -M -s /sbin/nologin -d /dev/null vbirdcpu2$ [root@linux ~]# useradd -M -s /sbin/nologin -d /dev/null vbirdcpu1$
|
會增加 -M -s -d 等參數的原因是因為不想要讓這個帳號具有可以登入的權限,
因此將這個主機帳號設定的比較怪一點~ ^_^~接下來讓 Samba 知道這個帳號是主機帳號,
所以你應該要這樣做:
[root@linux ~]# smbpasswd -a -m vbirdcpu1$ [root@linux ~]# smbpasswd -a -m vbirdcpu2$
|
這樣便加入主機帳號囉!而我們的 Samba PDC 也就可以透過『主機帳號』來判斷 Windows 用戶端能否連上來,
若連接上 PDC 與 Windows 用戶端後,接下來一般使用者帳號就可以在 windows 用戶端登入了!
5. Windows XP Pro. 用戶端的連線與登入
好了,關於 SAMBA 的 PDC 作法我們就談到這裡,還有更多的資訊您可以前往這個章節最後面的參考資料所列出的網址去查閱,
因為還有很多的作法吶!事實上,鳥哥覺得在一個網域當中,如果有多部的 Windows NT 主機,例如 Windows 2000/XP pro.
這一類的比較穩定的個人使用桌面版本時,使用 PDC 就很有用了!因為 Windows 2000/XP pro.
也是一個多人的作業系統,不像 Windows 98 是單人的作業系統。所以,當使用 Windows 2000/XP pro.
而無法登入 PDC 時,您是無法使用 Windows 2000/XP pro. 上面的任何的資訊的。
但是在 Windows 98 上面若無法正確的登入,您仍然具有該電腦的主控權喔!
另外,設定 Windows 用戶端之前,請先確認你的 Windows 是什麼版本?
上述的動作對於 Windows XP 家用版 (Home) 是沒有作用的!請先確認才行喔!
通常我們在設定 SAMBA 的時候,如果是以 Workgroup 的方式來進行 smb.conf
的設定時,幾乎很容易就可以設定成功了!並沒有什麼很困難的步驟。不過,萬一還是無法成功的設定起來,
請務必察看登錄檔,也就是在 /var/log/samba 裡面的資料!在這裡面的資料當中,您會發現:咦!
怎麼這麼多檔案啊!因為我們在 smb.conf 裡面設定了:
log file = /var/log/samba/%m.log
那個 %m 是指 Client 的 NetBIOS Name 的意思,所以,當有個 vbirdcpu2 的主機來登入我們的 vbirdserver
主機時,那麼登入的資訊就會被紀錄在 /var/log/samba/vbirdcpu2.log 檔案喔!而如果萬一來源 IP
並沒有 Netbios name 的時候,那麼很可能是一些錯誤訊息,這些錯誤訊息就會被紀錄到 log.smbd, log.nmbd
裡面去了!所以,如果您要察看某部電腦連上您的 SAMBA 主機發生了什麼問題時,特別要留意這個登錄檔的形式喔!
另外,如果您的 SAMBA 明明已經啟動完成了,卻偏偏老是無法成功,又無法查出問題時,建議先關閉 Samba
一陣子,再重新啟動:
在我的案例當中,確實有幾次是因為 PID 與 NetBIOS 的問題,導致整個 SAMBA 怪怪的~所以完整的關閉之後,
經過一陣子的短暫時間,再重新啟動,應該就可以恢復正常了!
還有,萬一您在進行寫入的動作時,老是發現『您沒有相關寫入的權限!』,不要懷疑,幾乎可以確定是
Permission 的問題,也就是 Linux 的權限與 SAMBA 開放的權限並不相符合!無論如何,您必須要瞭解能不能寫入
Linux 磁碟,看的是 PID 的權限與 Linxu 檔案系統是否吻合,而那個 smb.conf 裡面設定的相關權限只是在
SAMBA 運作過程當中『預計』要給使用者的權限而已,並不能取代真正的 Linux 權限喔!所以,萬一真的發現該問題存在,
請登入 Linux 系統,查驗一下該對應的目錄的 permission 吧! ^_^
想像一個案例,如果你是學校的網管人員,有個兼任老師向您申請帳號,主要是要在很多班級內取得同學的專題資料。
因為該老師是兼任的,您或許擔心一不小心該教師就將同學的辛苦資料給銷毀,倒不是教師們故意的,
而是很多時候....不熟嘛!這個時候如果你將該老師加入同學的群組,然後偏偏同學們所在的目錄是群組可寫入的話,
那麼該教師就能夠擁有可讀寫的權限了,也就容易造成一些莫名的災難~
那該怎麼辦?其實可以透過 ACL 來管理某個目錄的單一使用者權限啦!所以說,
權限的管理不必透過 smb.conf 的設定,只要透過 ACL 來管理就能夠達到你所需要的目的了。
關於 ACL 的說明我們在前面的
認識網路安全當中已經提過了,
這裡不再囉唆,請自行前往查閱吶! ^_^