2,479 瀏覽數

samba-winbind

samba(winbind)

Step 0 : 前言

Linux 下的 samba(File server) 身份驗證可以轉給 Windows NT/AD 網域來幫我們驗證,那 Linux 其他的服務(如:telnet , ssh , X Window , FTP , SMPT , POP3 , IMAP , Apache , Proxy)也可以將他轉給 Windows NT/AD 網域來幫我們做驗證身份嗎??有的 "winbind",什麼是 winbind,它是由 samba 套件所提供的. winbind 是一個獨立 daman ,它主要是能讓系統能取得 NT/AD 網域內使用者帳號來當做 Linux 的身份驗證.
winbind 是依據 Microsoft RPC calls 應用在 Linux 系統上.再配合 PAM(Pluggable Authentication Modules) 以及 NSS(Name Service Switch),所實做出來的.所以他的架構如下:
winbind10

Step 1: 安裝

[root@benjr ~]#rpm -ivh samba-common-3....i386.rpm
[root@benjr ~]#rpm -ivh samba-client-3....i386.rpm
[root@benjr ~]#rpm -ivh samba-3.....i386.rpm
[root@benjr ~]#rpm -ivh redhat-config-samba-...i386.rpm

這邊主要是用 samba 3.X 版,而 winbind 主要是由 samba-common-3….i386.rpm 所提供,但是使用 winbind 時還需要 samba 的功能,所以 samba 相關套件也要安裝.

Step 2: samba 加入 Windows 網域的設定

我們假設已經有一個 Windows AD 網域 SUN.COM 的存在了
由於 winbind 要取得 Windows NT / AD 網域的資料,所以要得到 windows 的信賴,方法就是將 Linux 主機加入 Windows 的網域內.方法可以參考下面連結:
samba(Join Domain) 這邊談到 samba 2.x 與 samba 3.x 加入 Domain 的方法

Step 3 :NSS 的設定檔

Linux 系統採用 NSS(Name Service Switch)的設定來決定帳號取得的來源.因為我們會用到 winbind 所以必須在/etc/nsswitch 中加入 winbind 的帳號取得模式.

[root@benjr ~]#vi /etc/nsswitch
...............略.................................
passwd:      files  winbind
shadow:      files
group:         files  winbind

這邊主要是加入 winbind 的支援.
系統會依據這個設定檔來決定載入哪些模組 files 會載入 /lib/libnss_files.so ,此時系統就會依據 /etc/passwd , /etc/shadow , /etc/group 這些檔案來做查詢,如果找不到適當的使用者資料時,系統會再依據 /etc/nsswitch 的設定檔來決定載入下一個模組,也就是 /lib/libnss_winbind.so,此時 winbind 會去和 windows NT/AD 網域做身份確認.來決定使用者能否登入系統.
此時本機端就可以使用 NT/AD 網域的使用者登入
但是用這些 NT/AD 網域的使用者登入時後你會發現家目錄都沒有自動建立,所以可以用下面的方式來建立.

[root@benjr ~]#vi /etc/pam.d/system-auth
----------------------------------------------------------------------------------------
session required /lib/security/$ISA/pam_mkhomedir.so skel=/etc/skel umask=0022

還要新增 /home/SUN 的目錄,因為有關 Domain user 皆是存放在 /home/SUN 目錄下

[root@benjr ~]# mkdir /home/SUN

Step 4: Winbind 設定檔

winbind 與 samba 使用同一個設定檔,也就是 /etc/samba/smb.conf

[root@benjr ~]#vi /etc/samba/smb.conf
------------------------------------------------------------------------ 
#use uids from 10000 to 20000 for domain users
idmap uid = 10000-20000
#use gids from 10000 to 20000 for domain groups
idmap gid = 10000-20000
#separate domain and username with '+' ,like DOMAIN+username
winbind separator = +
#Users without a domain component
winbind use default domain = yes
#allow enumeration of winbind users and groups
winbind enum users = no
winbind enum groups = no
#give winbind users a real shell and home directory (only needed if they have telnet access)
template homedir = /home/%D%U
template shell =/bin/bash
#cache user and group information before querying Windows NT server again
winbind cache time = 300

重新啟動服務

[root@benjr ~]#service winbind restart

檢查一下 Winbind 是否順利取得 NT/AD 網域內的帳號

[root@benjr ~]#wbinfo -u
Administrator
Guest
TsInternetUser
Krbtgt
user1
user2
HOST/unsvr01
NTSVR$

可以看到 Windows 網域中的使用者了,其中的 user1,user2 是我自己在 NT/AD 網域中加入的,等一下就可以用這些使用者帳號來登入 Linux server.而 HOST/unsvr01 與 NTSVR$ 都是電腦名稱. 
說明:
idmap uid = 10000-20000
idmap gid = 10000-20000
由 NT/AD 網域得到的使用者 uid/gid 範圍為 10000-20000

[root@benjr ~]#getent passwd
................略.................
user1:x:500:500::/home/user1:/bin/bash
user2:x:501:501::/home/user2:/bin/bash
SUN\Administrator:x:10000:10000:Administrator:/home/SUN/administrator:/bin/false
SUN\Guest:x:10001:10000:Guest:/home/SUN/guest:/bin/false
SUN\krbtgt:x:10002:10000:krbtgt:/home/SUN/krbtgt:/bin/false
SUN\user1:x:10003:10000:user1:/home/SUN/user1:/bin/false
SUN\user2:x:10005:10000:user2:/home/SUN/user2:/bin/false 

可以看到使用者的 uid 由 10000 開始起跳,而 gid 也是由 10000 開始起跳(相同網域的使用者會相同的 gid)
winbind separator = +
剛才可以看到使用者為 SUN\winuser1 ,預設使用 "\ "來連結網域與使用者成為使用者名稱,你也可以使用其他符號來連結.

[root@benjr ~]#getent passwd
................略.................
SUN+user2:x:10005:10000:user2:/home/SUN/user2:/bin/false  

符號由 "\" 變成 "+"
winbind use default domain = yes
使用者名稱預設使用 "\ "來連結網域與使用者,但是如果你不需使用網域名稱來辨識時,就直接把使用者當成使用者名稱.

[root@benjr ~]#getent passwd
................略.................
user2:x:10005:10000:user2:/home/SUN/winuser2:/bin/false  

可以看到使用者名稱不再包括網域名稱了
template homedir = /home/%D/%U
使用者登入時使用的家目錄,%D表示為網域 %U表示為使用者.
template shell =/bin/bash
使用者登入的時要使用的 shell

[root@benjr ~]#getent passwd
................略.................
SUN\user2:x:10005:10000:winuser2:/home/SUN/winuser2:/bin/bash  

可以看到 user2 的家目錄為 /home/SUN/user2,但這目錄不一定存在,你必須自己建立,而 user2 的 shell 使用 /bin/bash.
winbind cache time = 300
預設 winbind 每 300 秒,去快取 NT/AD 網域的使用者資料
winbind enum users = no
在使用指令 #getent passwd 是否要將 NT/AD 網域的使用者也列出.預設是 yes
winbind enum groups = no
在使用指令 #getent group 是否要將 NT/AD 網域的群組也列出.預設是 yes

5 個網友的想法 “samba-winbind

  1. 自動參照通知: services | Benjr.tw

  2. 自動參照通知: RHEL5 – Samba | Benjr.tw

  3. 自動參照通知: samba-ACL | Benjr.tw

  4. 自動參照通知: samba | Benjr.tw

  5. 自動參照通知: samba-ADS Security Mode | Benjr.tw

發表迴響