winbind+samba

 

首先向這篇文章的作者道歉,因爲標題的字符個數有限,因此將名稱縮短了一下,原名爲:

Linux學習筆記之通過Winbind將Linux加入到Windows 域

 

以下爲正文:

 

2007.10.25 09:07 作者:一縷清風 | 評論:0 | 閱讀:1508


===================Winbind簡介=====================


Winbind 是一款 Samba 組件,在 CentOS 系統下,他被包含在了 samba-common 包中。 Winbind 在Linux上實現了微軟的RPC調用、可插式驗證模塊和名字服務切換,通過 samba 接口與 Windows 域控獲得聯繫,可以使NT域用戶能在Linux主機上以Linux用戶身份進行操作。通過設定 Linux 服務器的 nss 配置,我們可以讓系統通過 Winbind 程序來解析用戶信息。


====================NSS簡介=======================


NSS 是 Sun 公司開發用於定義系統中配置文件查找順序的工具。他的配置文件在 /etc/nsswitch.conf 。通過他我們可以定義系統在登錄時通過 Winbind 來獲取用戶信息,而不只是本地配置文件:/etc/passwd 。


以下是可能出現在 /etc/nsswitch.conf 中的項目:


aliases 郵件別名;


passwd 系統用戶;


group 用戶組;


shadow 隱蔽口令;


hosts 主機名和I P地址;


networks 網絡名和號;


protocols 網絡協議;


services 端口號和服務名稱;


ethers 以太網號;


rpc 遠程進程調用的名稱和號


netgroup 網內組


在本文中,我們需要修改的是:


passwd 系統用戶;


group 用戶組;


您需要將這兩項修改爲:


passwd: files winbind


group: files winbind


個別參考資料將 shadow 也添加了 winbind 參數,我覺得沒有必要。


files 表示將從本地文件讀取用戶、組信息,而 winbind 參數則表示經過 winbind 從域讀取用戶信息。


=================安裝 Samba 配置 Winbind=================


1.通過 yum 安裝 samba


[root@localhost etc]# yum install samba samba-common


Setting up Install Process


Setting up repositories


update 100% |=========================| 951 B 00:00


base 100% |=========================| 1.1 kB 00:00


addons 100% |=========================| 951 B 00:00


extras 100% |=========================| 1.1 kB 00:00


Reading repository metadata in from local files


Parsing package install arguments


Resolving Dependencies


–> Populating transaction set with selected packages. Please wait.


—> Downloading header for samba-common to pack into transaction set.


samba-common-3.0.10-1.4E. 100% |=========================| 38 kB 00:01


—> Package samba-common.i386 0:3.0.10-1.4E.12.2 set to be updated


—> Downloading header for samba to pack into transaction set.


samba-3.0.10-1.4E.12.2.i3 100% |=========================| 101 kB 00:02


—> Package samba.i386 0:3.0.10-1.4E.12.2 set to be updated


–> Running transaction check


Dependencies Resolved


=============================================================================


Package Arch Version Repository Size


=============================================================================


Installing:


samba i386 3.0.10-1.4E.12.2 update 13 M


samba-common i386 3.0.10-1.4E.12.2 update 5.0 M


Transaction Summary


=============================================================================


Install 2 Package(s)


Update 0 Package(s)


Remove 0 Package(s)


Total download size: 18 M


Is this ok [y/N]: y


2.檢查 Winbind 庫文件。


確保系統 lib 目錄下已經包含 libnss_winbind.so 庫文件。


[root@localhost etc]# ls /usr/lib | grep winbind


libnss_winbind.so


[root@localhost etc]#


3.配置 Samba


打開 samba 配置文件,/etc/samba/smb.conf 。


vi /etc/samba/smb.conf


我們對 [global] 標籤下的內容進行配置:


workgroup = ABC #你的域名 比如完整域名爲:linuxblog.cn ,則 ABC 寫 LINUXBLOG。


wins support = yes #開啓 wins 服務器支持。


wins server = 192.168.0.1 192.168.0.1 #這裏填寫你的域控服務器地址,中間以空格分隔。


wins proxy = yes


security = ADS #關於 security level 的詳細資料你可以查看 Samba 官方資料。這個選項我見過使用 Domain 的,也見過使用 AD 的。我使用 ADS也是成功的,暫時未搞懂他們的區別。


添加以下內容:


acl compatibility = win2k


idmap uid = 16777216-33554431 #idmap uid 和 idmap gid是設置winbind把win200x域用戶、組map成本地用戶、組所使用的ID號範圍,如果你的用戶很多,可以加大這兩個值之間的差。


idmap gid = 16777216-33554431


password server = 192.168.0.14 192.168.0.13 192.168.0.23 #解析用戶密碼的服務器,自然是 DC


map to guest = bad user


guest ok = no


realm = CN.MOBINEX.COM # realm 有域的含義,可能是指定完整域名。


encrypt psswords=cyes


winbind use default domain = yes


template homedir = /home/%D/%U 指定用戶目錄格式 /home/域名/用戶名 請手動創建域名目錄,並且將其設置爲 777。不然域用戶無法正常登入主機。


template shell = /bin/bash #指定登入用戶使用的 shell


4. 配置 Kerbers


vi /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 = 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


}


最簡單的配置方法,就是將 EXAMPLE.COM 全部替換成你的域名(大小寫需要保持一致),必要的地方寫上IP:


[logging]


default = FILE:/var/log/krb5libs.log


kdc = FILE:/var/log/krb5kdc.log


admin_server = FILE:/var/log/kadmind.log


[libdefaults]


default_realm = LINUXBLOG.CN


dns_lookup_realm = false


dns_lookup_kdc = false


[realms]


LINUXBLOG.CN = {


kdc = 172.16.89.3:88


admin_server = 172.16.89.3:749


default_domain = linuxblog.cn


}


[domain_realm]


.example.com = LINUXBLOG.CN


example.com = LINUXBLOG.CN


[kdc]


profile = /var/kerberos/krb5kdc/kdc.conf


[appdefaults]


pam = {


debug = false


ticket_lifetime = 36000


renew_lifetime = 36000


forwardable = true


krb4_convert = false


}


5.加域


在加域之前,一定要將 samba 服務以及 winbind 服務重新啓動一下,以便能夠加載配置好的參數。


[root@localhost init.d]# service smb restart


Shutting down SMB services: [FAILED]


Shutting down NMB services: [FAILED]


Starting SMB services: [ OK ]


Starting NMB services: [ OK ]


[root@localhost init.d]# service winbind restart


Shutting down Winbind services: [FAILED]


Starting Winbind services: [ OK ]


(1) 使用 net join 命令加域


net rpc join -S PDC -U Administrator


這只是一個大致的格式,PDC 爲域名:LINUXBLOG。net join 的用法很多地方都可以找到,我感興趣的是另外一款小工具。


(2) 使用 authconfig 將機器加域


執行 authconfig 命令,可以看到如下界面:


 


選擇使用 Winbind,使用 MD5 口令,使用 Kerberos,使用 SMB 驗證,使用 Winbind 驗證。
 
按下一步查看kerberos設置:
 
查看 Winbind 設置,選擇加入域,輸入帳號密碼,按確定。
 
最後點擊 Join Domain。
提示你保存配置文件,我們選擇“是”。
 
提示輸入管理員用戶名以及密碼:
 
完成加域之後會返回上一層界面,我們點擊OK。這時系統會自動重啓 Winbind 服務。
 
這時就可以看到域用戶的信息了,比如:
[root@localhost init.d]# id Administrator
uid=16777216(administrator) gid=16777216(Domain Users) groups=16777216(Domain Users),16777217,16777218,16777219(Domain Admins),16777220(Enterprise Admins),16777221(Schema Admins),16777222(Group Policy Creator Owners)
當然也可以使用 wbinfo -g (查看組信息) 以及 wbinfo -u (查看用戶信息) 命令。
[root@localhost init.d]# wbinfo -g
BUILTIN\System Operators
BUILTIN\Replicators
BUILTIN\Guests
BUILTIN\Power Users
BUILTIN\Print Operators
BUILTIN\Administrators
BUILTIN\Account Operators
BUILTIN\Backup Operators
BUILTIN\Users
Domain Computers
Domain Controllers
Schema Admins
Enterprise Admins
Domain Admins
Domain Users
Domain Guests
Group Policy Creator Owners
DnsUpdateProxy
====================配置 PAM=======================
很久以前的 Linux 程序,都有自己的用戶驗證系統。這種模式在需要換驗證系統的時候就會變的很麻煩,你需要修改程序的源代碼。甚至某些程序需要改變很多架構。
比如 ssh 默認是讀取本地的 passwd 文件來判斷用戶信息的,但是要讓他通過 samba 來獲取用戶信息,我們怎麼做呢?修改 sshd 的源代碼?顯然這是一個很繁瑣的方式。
PAM 解決了這個問題。衆多應用程序都提供了和 PAM 的接口。如此一來應用程序便可以不管用戶驗證方式,而交給 PAM 處理,即 sshd 只認識 PAM 不認識 Winbind,當然可以不認識 passwd 。而具體如何驗證,這交給 PAM 去控制了。我們通過修改 PAM 的配置文件達到改變驗證模式的目的。
你可以通過 深入Linux PAM 體系結構 一文來詳細瞭解 PAM 的配置文件以及工作模式。
我們通過編輯 /etc/pam.d/sshd 文件來改變 sshd 的用戶驗證模式,典型的配置文件如下:
auth sufficient /lib/security/pam_winbind.so
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account sufficient /lib/security/pam_winbind.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_limits.so
session required /lib/security/pam_mkhomedir.so
session optional /lib/security/pam_console.so
關於配置文件,很多地方都可以找到,或許各個版本有些不同。其實最重要的也就是加入 pam_winbind.so 模塊驗證方式。
好了,現在你可以通過 ssh 登錄域用戶了。記住!一定要手動創建 /home/域名 且權限爲777。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章