SAMBA

samba是一個神奇的東西,本來在我看來這是一個文件共享服務(wù),到官網(wǎng)去一查,查出了大麻煩

Samba是用于Linux和Unix的標(biāo)準(zhǔn)Windows互操作性程序套件。
?
Samba是根據(jù)GNU通用公共許可證許可的自由軟件,Samba項目是Software Freedom Conservancy的成員。
?
自1992年以來,Samba便為使用SMB / CIFS協(xié)議的所有客戶端(包括所有版本的DOS和Windows,OS / 2,Linux等)提供安全,穩(wěn)定和快速的文件和打印服務(wù)。
?
Samba是將Linux / Unix服務(wù)器和桌面無縫集成到Active Directory環(huán)境中的重要組件。它既可以充當(dāng)域控制器,也可以充當(dāng)常規(guī)域成員

看到這里還沒有什么,再來看看用戶手冊

User Documentation

呵呵,全是和AD DC相關(guān)的,我那個去,本著\color{rgb(255,0,0)}{沒事找事} 的原則,我照著做了一遍,這才知道平時使用samba來共享一下文件是多么的幸福...

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

  • 先來說說文件共享

  • Centos 提供的rpm包

Red Hat Enterprise Linux / CentOS / Scientific Linux Version 7 and 8
Sambarpm軟件包僅支持將Samba作為域成員和NT4 PDC或BDC。 Red Hat不提供用于將Samba作為AD DC運行的軟件包??梢允褂闷渌绞絹戆惭b:

  • 編譯安裝Samba. For details, see Build Samba from Source.
  • 從可信來源使用帶有AD支持的第三方軟件包。

  • 安裝

yum insall samba
Setting up Samba as a Standalone Server

先看一個官方的配置文件。

[global]
        map to guest = Bad User

        log file = /var/log/samba/%m
        log level = 1

[guest]
        # This share allows anonymous (guest) access
        # without authentication!
        path = /srv/samba/guest/
        read only = no
        guest ok = yes

[demo]
        # This share requires authentication to access
        path = /srv/samba/demo/
        read only = no

創(chuàng)建目錄
# mkdir -p /srv/samba/guest/
# mkdir -p /srv/samba/demo/
啟動服務(wù)
systemctl start nmb.service
systemctl start smb.service
這時你就會發(fā)現(xiàn)共享可以訪問了,

samba1.png

只是demo打不開,而且guest文件夾中也沒有寫權(quán)限

我們不是在上面寫了read only = no嗎?
這就是共享文件系統(tǒng)中都有的問題: \color{rgb(255,0,0)}{最終的權(quán)限=共享設(shè)置的權(quán)限 and 文件系統(tǒng)本身的權(quán)限}

[root@localhost ~]# ll -d /srv/samba/guest/
drwxr-xr-x. 2 root root 6 Oct 21 00:08 /srv/samba/guest/
[root@localhost ~]# chmod o+w /srv/samba/guest/
[root@localhost ~]# ll -d /srv/samba/guest/
drwxr-xrwx. 2 root root 6 Oct 21 00:08 /srv/samba/guest/

這樣就OK了,guest 文件就有了寫入的權(quán)限了(簡單粗暴,生產(chǎn)中不要這么做)
為什么demo文件夾不能訪問?
這是配置中沒有 guest ok = yes

是不是覺得好簡單,呵呵,怎么可能有這么簡單的東西
以上搞定了一個共享,有了信心,下面好好來說說,打擊一下

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

samba的基本架構(gòu)

  • nmb
    NetBIOS名稱服務(wù)器為客戶端提供基于IP的NetBIOS命名服務(wù)
    開啟該服務(wù)后,和windows通信可以基于netbios名進行,只要開啟了nmb服務(wù)在windows的網(wǎng)絡(luò)中就能發(fā)現(xiàn)這個服務(wù)器
  • smb
    UNIX的Windows AD和SMB / CIFS文件服務(wù)器
  • winbind-----加域后提供名稱解析服務(wù)
    名稱服務(wù)守護進程,用于從NT服務(wù)器解析名稱
    當(dāng)加域后,可用于從Windows NT服務(wù)器解析用戶和組信息。該服務(wù)還可以通過關(guān)聯(lián)的PAM模塊提供身份驗證服務(wù)。應(yīng)當(dāng)注意,由于域控制器已經(jīng)執(zhí)行了訪問控制,因此帳戶模塊僅執(zhí)行g(shù)etpwnam()來驗證系統(tǒng)是否可以為用戶獲取uid。
/etc/nsswitch.conf
passwd:         files winbind
"用戶名的解析,先/etc/passwd文件,后使用winbind"
group:          files winbind
"組名的解析,先passwd文件,后使用winbind"
hosts:          files dns wins
"主機名的解析,/etc/hosts  --> dns  --> wins服務(wù)器"
  • smb.conf 配置文件
    整個Samba套件的配置文件

  • 用戶

samba的用戶,有兩點要求

  • \color{rgb(200,0,255)}{用戶必須是本地的系統(tǒng)用戶}
  • \color{rgb(200,0,200)}{用戶須加入到samba的用戶中,才可以使用}
    \color{rgb(0,200,200)}{注意:加入samba用戶數(shù)據(jù)庫后,用戶的samba密碼是可以由samba獨立管理 的}
    那這里你就要說了,上面不是沒有將用戶加入到samba中嗎?怎么能訪問呢?

這是由于系統(tǒng)的默認(rèn)配置
Default: guest account = nobody 默認(rèn)將guest訪問,映射到系統(tǒng)nobody用戶的訪問
和我們設(shè)定的
map to guest = Bad User 使用無效密碼的用戶登錄將被拒絕,除非用戶名不存在,在這種情況下,它將被視為訪客登錄并映射到 guest account
共同作用的結(jié)果

所以上面的設(shè)定,是非常不安全的,除了自己玩玩,不建議使用,至少不能給寫權(quán)限,但要是每次訪問都要輸入密碼,這又會在工作中造成困難,特別是多個共享,又有不同的權(quán)限時,很多的用戶都是記不住密碼的,這時域就是一個好選擇了

  • 用戶加入到samba用戶

[root@localhost ~]# rpm -ql samba-common-tools |less
/usr/bin/pdbedit
/usr/bin/smbpasswd
/usr/bin/testparm # 配置文件語法測試工具
...

pdbedit:

pdbedit:添加用戶帳戶,刪除用戶帳戶,修改用戶帳戶,列出用戶帳戶,導(dǎo)入用戶帳戶。
-a: 添加一個用戶到samba用戶數(shù)據(jù)庫中,一般要同 -u 一起使用,例如:
?? pdbedit -a -u tom
??new password:
??retype new password
??加入時,會詢問加入用戶在samba中的密碼
-x|--delete:
??從數(shù)據(jù)庫中刪除帳戶。它需要使用-u指定的用戶名。
??Example: pdbedit -x -u bob
-L: 查看用戶,可以和-v一同使用查看更多信息
??pdbedit -L [-v]
-D: 可以指定,用戶家目錄映射到windows系統(tǒng)中的驅(qū)動器號。
??如將tom的家目錄 /home/tom 映射到我的電腦中的 H:
??pdbedit -u tom -D "H:"
-S|--script script:
??添加或修改用戶帳戶時可以使用。它將指定用戶的登錄腳本路徑。
??Example:-S "\\\\BERSERKER\\netlogon\\sorce.bat"
-p|--profile profile:
??它將指定用戶的配置文件目錄。
??Example:-p "\\\\BERSERKER\\netlogon"

[root@localhost ~]# pdbedit -L -u tom
tom:1003:
[root@localhost ~]# pdbedit -u tom -D "H:"
Unix username:        tom
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-2884529151-173602647-2571866911-1000
Primary Group SID:    S-1-5-21-2884529151-173602647-2571866911-513
Full Name:            
Home Directory:       \\localhost\tom
HomeDir Drive:        H:
Logon Script:         
Profile Path:         \\localhost\tom\profile
Domain:               LOCALHOST
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          Wed, 06 Feb 2036 23:06:39 CST
Kickoff time:         Wed, 06 Feb 2036 23:06:39 CST
Password last set:    Mon, 21 Oct 2019 18:27:28 CST
Password can change:  Mon, 21 Oct 2019 18:27:28 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

smbpasswd --- 修改用戶的SMB密碼

smbpasswd [username]
??類似于系統(tǒng)中passwd的smb密碼工具

\color{rgb(0,0,200)}{用戶這塊有這兩個命令基本就可以進行一些簡單的授權(quán)了}


  • 配置

這是一個大的話題。
smbd -b | grep "CONFIGFILE"
命令可得到smb.conf配置文件的路徑
smb.conf(5) 官方參考,也就是man smb.conf
這個文檔很好,內(nèi)容也非常多,一次看完要把人搞瘋,還好我們一般用到的并不多
我們來看一個小一點的,Centos rpm安裝包,安裝后提供了/etc/samba/smb.conf.example參考說明文件
...........
是不是很長,如果是官方的smb.conf就更要瘋掉了,這個示例雖然不全,但基本夠日常使用了。

這個文件中:
  • 使用“#”開頭和“;”開頭的都是注釋
  • 整個配置文件分為兩個部分
    • [global]
      全局配置部分
      這中間包括了nmb,smb,winbind的相關(guān)設(shè)置
      包括samba工作模式,是獨立服務(wù)器、域成員、域控、打印服務(wù)器等等
    • [Share Definitions]
      共享設(shè)置部分
  • 可以使用內(nèi)置變量
變量 說明
%U 會話用戶名(客戶端所需的用戶名,不一定與他們獲得的用戶名相同)。
%G %U的主要組名稱。
%h 運行Samba的Internet主機名。hostname
%m 客戶端計算機的NetBIOS名稱(非常有用)。
%L 服務(wù)器的NetBIOS名稱。
%M 客戶端計算機的Internet名稱。hostname
%d 當(dāng)前服務(wù)器進程的進程ID。
%I 客戶端計算機的IP地址。
%J 客戶端計算機的IP地址,用下劃線代替冒號/點。
%i 客戶端連接到的本地IP地址
%j 客戶端連接到的本地IP地址,用下劃線代替冒號/點。
%T 當(dāng)前日期和時間。
%t 當(dāng)前日期和時間,以不帶冒號分割的最小格式顯示。(YYYYYmmdd_HHMMSS)
%D 當(dāng)前用戶的域或工作組的名稱。
%w Winbind分隔符。
%$(envvar) 環(huán)境變量envar的值。
%S 當(dāng)前服務(wù)的名稱(如果有)。當(dāng)前服務(wù)名替換為%S。這在[homes]部分很有用。
%P 當(dāng)前服務(wù)的根目錄(如果有)。
%u 當(dāng)前服務(wù)的用戶名(如果有)。
%g %u的主要組名稱。
%H %u給出的用戶的主目錄。
%N NIS主目錄服務(wù)器的名稱。這是從您的NIS auto.map條目獲得的。如果尚未使用--with-automount選項編譯Samba,則此值將與%L相同
%p 服務(wù)主目錄的路徑,該路徑是從NIS auto.map條目獲得的。 NIS auto.map條目分為%N:%p。
%a 遠(yuǎn)程計算機的體系結(jié)構(gòu)。它目前可以識別Samba(Samba),Linux CIFS文件系統(tǒng)(CIFSFS),OS / 2,(OS2),Mac OS X(OSX),Windows for Workgroups(WfWg),Windows 9x / ME(Win95),Windows NT( WinNT),Windows 2000(Win2K),Windows XP(WinXP),Windows XP 64位(WinXP64),Windows 2003(包括2003R2)(Win2K3)和Windows Vista(Vista)。其他任何東西都將被稱為未知。
%R 協(xié)議協(xié)商后選定的協(xié)議級別。它可以是CORE,COREPLUS,LANMAN1,LANMAN2,NT1,SMB2_02,SMB2_10,SMB2_22,SMB2_24,SMB3_00,SMB3_02,SMB3_10,SMB3_11或SMB2_FF之一。

下面一個一個的說:

  • 日志
    log file = /var/log/samba/log.%m
    max log size = 50
  • 認(rèn)證
    • security =

      • AUTO(Default)
      • USER #因為這是最常見的設(shè)置,用于獨立文件服務(wù)器或DC。guest將失效
      • DOMAIN #在這種模式下,Samba將充當(dāng)Windows 域的成員
      • ADS #在這種模式下,Samba將充當(dāng)ADS域中的域成員。
    • map to guest = Never

      • Never (Default) # 拒絕無效密碼的用戶登錄請求。
      • Bad User # 使用無效密碼的用戶登錄將被拒絕,除非用戶名不存在,
        ?????在這種情況下,它將被視為訪客登錄并映射到訪客帳戶。
    • guest account = nobody(Default) # 默認(rèn)訪客帳戶映射到nobody用戶

  • netbios
    workgroup = WORKGROUP # 工作組,客戶端查詢時服務(wù)器將顯示在哪個工作組中。
    netbios name = MYCentos # NetBIOS名稱,最大長度為15個字符。
  • 本地數(shù)據(jù)庫(存儲用戶信息以及可能的組信息。)
    passdb backend = tdbsam
    • smbpasswd - 純文本passdb后端。不要使用
    • tdbsam - 使用TDB數(shù)據(jù)庫存儲后端。(Default)
    • ldapsam - 基于LDAP的passdb后端。

  • 共享部分
    • [home] # 共享名,但它會被 %S 所重寫(替代)
    • comment = Home Directories # 注解信息
    • valid users = %S, %D%w%S # 設(shè)置有效的用戶
    • browseable = No #設(shè)置沒有權(quán)限的人 能不能瀏覽
    • read only = No # 只讀
    • guest ok = yes # 允許來賓訪問,
    • write list = USER1, USER2, @USER... # read only=no,列表的用戶、組都將有寫權(quán)限
    • read list = # 與write list 相反
    • directory mask = 0755 (Default) # 默認(rèn)只有文件屬主能修改刪除
    • hosts allow = # none (Default) # 主機白名單,例如:
      • hosts allow = 150.203. EXCEPT 150.203.6.66 # 允許150.203.0.0網(wǎng)段,除了150.203.6.66
      • hosts allow = 150.203.15.0/255.255.255.0 # 網(wǎng)段
      • hosts allow = lapland, arvidsjaur # 幾個主機
      • hosts allow = @foonet # 允許NIS網(wǎng)絡(luò)組“ foonet”中的主機
      • hosts allow = 150.203.5. myhost.mynet.edu.au
    • hosts deny = # none (Default) # 主機黑名單

OK,有了這些配置,也就可以配置一個獨立的samba文件服務(wù)器了

=============================
看了這么多的配置,是不是很頭疼,來,來,來,說點高興的 sambaGUI
https://www.samba.org/samba/GUI/
這個頁面提供了許多samba相關(guān)的圖形程序

http://www.webmin.com/tgz.html
這個是一個功能非常多的系統(tǒng)管理界面
Webmin是用于Unix的系統(tǒng)管理的基于Web的界面,使用任何的Web瀏覽器,您都可以設(shè)置用戶帳戶,Apache,DNS,文件共享等等。 Webmin解除了手動編輯Unix配置文件(如/etc/passwd)的需要,使您可以從控制臺或遠(yuǎn)程管理系統(tǒng),是不是很強大,給兩張圖給有需要的參考

webmin1.png

samba2.png

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

是不是一下就覺得世界變得美好了,呵呵...

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

  • printers 打印機的共享

首先要安裝CUPS來管理和驅(qū)動打印機

yum install cups
vim /etc/cups/cupsd.conf
-------------------------------------
Listen localhost:631
改為自己要監(jiān)聽的地址,如:
Listen 192.168.2.10:631

<Location />                                                                                                          
  Order Deny, ALlow
  Deny From All                                                                                        
  Allow From 192.168.2.*                                                                                              
</Location> 
<Location /admin>                                                                                                     
  Order Deny, ALlow
  Deny From All                                                                                        
  Allow From 192.168.2.99                                                                                                    
</Location>
啟動服務(wù)
systemctl start cups.service

添加打印機

http://ip:631

編輯:smb.conf

[global]
        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
        map to guest = bad user      #匿名登錄
[printers]
        comment = All Printers
        path = /var/tmp
        printable = Yes
        create mask = 0600
        browseable = No
        read only = yes
        guest ok =yes

測試

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

注意:整個過程中都要考慮selinux、firewalld的權(quán)限問題

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

  • 編譯安裝,使用AD DC

  • 編譯安裝 需要的包

Red Hat Enterprise Linux 7 / CentOS 7 / Scientific Linux 7
Install the following packages to build Samba as an Active Directory (AD) domain controller (DC) on a minimal Red Hat Enterprise Linux 7, CentOS 7, or Scientific Linux 7 installation:

yum install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \
       libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \
       perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \
       python2-crypto gnutls-devel libattr-devel keyutils-libs-devel \
       libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \
       pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel \
       lmdb-devel jansson-devel gpgme-devel pygpgme libarchive-devel

為您的系統(tǒng)安裝Python 3.x開發(fā)包(例如python3-devel,python36-devel或python3-dev)

yum install python36-devel python36-dns lmdb-devel

過程都是跟著## User Documentation的說明在做:

  1. Setting up Samba as an Active Directory Domain Controller
  • Samba作為AD DC支持:
    • 集成的LDAP服務(wù)器作為AD后端。
    • Heimdal Kerberos密鑰分發(fā)中心(KDC)。
  • 安裝前的準(zhǔn)備工作:
    • 為您的AD DC選擇一個的主機名。
    • 選擇一個DNS,(為您的AD林選擇一個DNS域。該名稱還將用作AD Kerberos領(lǐng)域。)
    • 在DC上使用靜態(tài)IP地址。
    • 禁用諸如resolvconf之類的工具,這些工具會自動更新/etc/resolv.conf DNS解析器配置文件。
    • 確認(rèn)沒有Samba進程正在運行。
      ps ax | egrep "samba|smbd|nmbd|winbindd"
    • 確認(rèn)DC上的/ etc / hosts文件正確將標(biāo)準(zhǔn)域名(FQDN)和簡短的主機名解析為DC的LAN IP地址。例如:
      127.0.0.1 localhost localhost.localdomain
      10.99.0.1 DC1.samdom.example.com DC1
    • 如果之前安裝過samba
      • 刪除 smb.conf 文件
        smbd -b | grep "CONFIGFILE"
        ?CONFIGFILE: /usr/local/samba/etc/samba/smb.conf
      • 從下面文件夾中,刪除 *.tdb*.ldb 文件
        smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
        ?LOCKDIR: /usr/local/samba/var/lock/
        ?STATEDIR: /usr/local/samba/var/locks/
        ?CACHEDIR: /usr/local/samba/var/cache/
        ?PRIVATE_DIR: /usr/local/samba/private/
    • 刪除 /etc/krb5.conf 文件
      rm /etc/krb5.conf

從干凈的環(huán)境來開始,有助于防止混淆,并確保任何以前的Samba安裝中的文件都不會與新的域DC安裝混在一起。

  • 開始安裝:
$ wget https://download.samba.org/pub/samba/stable/samba-x.y.z.tar.gz
$ tar -zxf samba-x.y.z.tar.gz
$ cd samba-x.y.z/
$ ./configure
$ make
$ sudo make install 
----
建議使用 ./configure --help 來查看一下 --enable/--disable and --with/--without options的參數(shù)
自己加上systemd相關(guān)的,可以生成systemd的服務(wù)腳本,安裝在/usr/local/samba/lib/systemd/system/下,
cp 到/etc/systemd/system/下就可使用

不要忘記了PATH
export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH
接著:
samba-tool domain provision --use-rfc2307 --interactive
這個有很多的參數(shù),可以直接安官方的做

`# samba-tool domain provision --use-rfc2307 --interactive
Realm [SAMDOM.EXAMPLE.COM]: SAMDOM.EXAMPLE.COM
Domain [SAMDOM]: SAMDOM
Server Role (dc, member, standalone) [dc]: dc
DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: SAMBA_INTERNAL
DNS forwarder IP address (write 'none' to disable forwarding) [10.99.0.1]: 8.8.8.8
Administrator password: Passw0rd
Retype password: Passw0rd
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=samdom,DC=example,DC=com
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=samdom,DC=example,DC=com
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: DC1
NetBIOS Domain: SAMDOM
DNS Domain: samdom.example.com
DOMAIN SID: S-1-5-21-2614513918-2685075268-614796884

我的執(zhí)行和這個有點不一樣,顯示了一大堆的python執(zhí)行,最后的SID出現(xiàn)就好。
這里注意,使用的DNS backend 是SAMBA_INTERNAL這個samba內(nèi)建的dns。官方建議的:BIND9_DLZSAMBA_INTERNAL
下面繼續(xù)說內(nèi)建的:

  • 編輯/etc/resolv.conf文件,設(shè)置dns服務(wù)器為自己

search samdom.example.com
nameserver 10.99.0.1

  • 配置Kerberos

cp /usr/local/samba/private/krb5.conf /etc/krb5.conf

  • 創(chuàng)建 systemd 腳本

vim /etc/systemd/system/samba.service
[Unit]
Description=Samba Active Directory Domain Controller
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/samba/sbin/samba -D
PIDFile=/usr/local/samba/var/run/samba.pid
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

systemctl daemon-reload

  • 啟動 samba
    systemd start samba

驗證

  • 驗證文件服務(wù)
$ smbclient -L localhost -U%
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]

        Sharename       Type      Comment
        ---------       ----      -------
        netlogon        Disk      
        sysvol          Disk      
        IPC$            IPC       IPC Service (Samba x.y.z)
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
=================================================
"身份驗證":要驗證身份驗證,使用域管理員帳戶連接到netlogon共享:
$ smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password: 
Domain=[SAMDOM] OS=[Unix] Server=[Samba x.y.z]
 .                                   D        0  Tue Nov  1 08:40:00 2016
 ..                                  D        0  Tue Nov  1 08:40:00 2016

               49386 blocks of size 524288. 42093 blocks available
  • 驗證DNS服務(wù)
$ host -t A dc1.samdom.example.com.
dc1.samdom.example.com has address 10.99.0.1
$ host -t SRV _ldap._tcp.samdom.example.com.
_ldap._tcp.samdom.example.com has SRV record 0 100 389 dc1.samdom.example.com.
$ host -t SRV _kerberos._udp.samdom.example.com.
_kerberos._udp.samdom.example.com has SRV record 0 100 88 dc1.samdom.example.com.
  • 驗證Kerberos
$ kinit administrator
Password for administrator@SAMDOM.EXAMPLE.COM:
==================================================
$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@SAMDOM.EXAMPLE.COM

Valid starting       Expires              Service principal
01.11.2016 08:45:00  12.11.2016 18:45:00  krbtgt/SAMDOM.EXAMPLE.COM@SAMDOM.EXAMPLE.COM
    renew until 02.11.2016 08:44:59

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

如果以上的沒有問題,那就可以試試加

最后可以提一下的是:
可以從Windows管理Active Directory(AD),使用Microsoft遠(yuǎn)程服務(wù)器管理工??具(RSAT)。
Installing RSAT

好了,域這個東西太復(fù)雜了,有時間慢慢看。

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

更多擴展閱讀

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

  • linux加入windows AD 進行身份驗證
    這是一篇 TechNet雜志 上2008.12月的文章,非常好

Authenticate and Integrate Linux with Active Directory
Windows 身份驗證
?
Windows 推出集成網(wǎng)絡(luò)身份驗證和單一登錄系統(tǒng)至今已有一段時間了。在 Windows 2000 之前,Windows NT 域控制器 (DC) 使用 NT LAN Manager (NTLM) 協(xié)議為 Windows 客戶端提供身份驗證服務(wù)。雖然 NTLM 不像當(dāng)初想象的那樣安全,但它還是非常有用的,因為它完美地解決了需要在網(wǎng)絡(luò)上跨多個服務(wù)器維護重復(fù)用戶帳戶的問題。
?
自 Windows 2000 開始,Microsoft 便從 NTLM 移到了 Active Directory 及其集成 Kerberos 身份驗證服務(wù)。與 NTLM 相比,Kerberos 更安全,而且更適合調(diào)整。此外,Kerberos 更是 Linux 和 UNIX 系統(tǒng)早已采納的行業(yè)標(biāo)準(zhǔn),從而為這些平臺打開了與 Windows 集成的大門。
?
Linux 身份驗證
?
Linux(以及在其上面運行的 GNU 工具和庫)當(dāng)初并不是以單一身份驗證機制的設(shè)計理念進行構(gòu)建的。因此,Linux 應(yīng)用程序開發(fā)人員就逐漸養(yǎng)成了一種習(xí)慣,即創(chuàng)建他們自己的身份驗證方案。他們設(shè)法通過在 /etc/passwd(包含 Linux 用戶憑據(jù)的傳統(tǒng)文本文件)中查詢名稱和密碼哈希,或者提供截然不同(和個別)的機制,來實現(xiàn)這一目標(biāo)。
?
由此產(chǎn)生了很多身份驗證機制,以至于無法對其進行管理。1995 年,Sun 提出了稱為“可插入身份驗證模塊”(Pluggable Authentication Modules, PAM) 的機制。PAM 提供了一組所有應(yīng)用程序開發(fā)人員都可以使用的通用身份驗證 API,以及管理員配置的后端,允許多種“可插入”身份驗證方案。通過使用 PAM API 進行身份驗證以及使用 Name Server Switch (NSS) API 來查詢用戶信息,Linux 應(yīng)用程序開發(fā)人員可以少編寫一些代碼,并且 Linux 管理員可從同一個地方配置和管理身份驗證過程。
?
大多數(shù) Linux 發(fā)布版本都會隨附多個 PAM 身份驗證模塊,其中包括支持對 LDAP 目錄進行身份驗證和使用 Kerberos 進行身份驗證的模塊。您可以使用這些模塊對 Active Directory 進行身份驗證,但這其中存在一些明顯的限制。稍后,我將在本文中討論這些限制。
?

Samba 和 Winbind
?
Samba 是一種開放源代碼項目,旨在在 Windows 與 Linux 環(huán)境之間提供集成。Samba 包含的組件使 Linux 計算機有權(quán)訪問 Windows 文件和打印服務(wù),同時還提供了基于 Linux 的服務(wù)來模擬 Windows NT 4.0 DC。使用 Samba 客戶端組件,Linux 計算機便可利用 Windows NT 和 Active Directory DC 所提供的 Windows 身份驗證服務(wù)。
?
Samba 在這個項目中對我們來說最有趣的一部分叫做 Winbind。Winbind 是在 Samba 客戶端上運行的后臺程序(在 Windows 中稱為服務(wù)),它的作用是充當(dāng)在 Linux 計算機上運行的 PAM 和 NSS 與在 DC 上運行的 Active Directory 之間通信的代理。具體來說,Winbind 使用 Kerberos 來對 Active Directory 和 LDAP 進行身份驗證,以檢索用戶和組信息。Winbind 還提供其他服務(wù),如使用類似于 Active Directory 中 DCLOCATOR 的算法來查找 DC 的功能,以及通過使用 RPC 與 DC 進行通信來重置 Active Directory 密碼的功能。
?
Winbind 解決了多個僅使用 Kerberos 和 PAM 無法解決的問題。具體來說,Winbind 并不是將 DC 進行硬編碼以便按照 PAM Kerberos 模塊的方式進行身份驗證,而是以類似于 Microsoft DC LOCATOR 模塊運行的方式通過搜索 DNS 定位程序記錄來選擇 DC。
?
三種身份驗證策略
?
假設(shè) Linux 計算機上提供了 LDAP、Kerberos 和 Winbind 三種身份驗證,我們可以采用三種不同的實現(xiàn)策略允許 Linux 計算機使用 Active Directory 來進行身份驗證。
?
使用 LDAP 身份驗證使用 Active Directory 進行身份驗證的最簡單但成效最低的方法是,將 PAM 配置為使用 LDAP 身份驗證,如圖 1 所示。雖然 Active Directory 屬于 LDAPv3 服務(wù),但 Windows 客戶端使用 Kerberos(回退到 NTLM)而不是 LDAP 進行身份驗證。
?
LDAP 身份驗證(稱為 LDAP 綁定)通過網(wǎng)絡(luò)以明文形式傳遞用戶名和密碼。對于大多數(shù)用途來說,這不僅不安全,而且也是無法接受的。

圖1 使用 LDAP 對 Active Directory 進行身份驗證

降低以明文形式傳遞憑據(jù)的風(fēng)險的唯一方法是使用類似于 SSL 的協(xié)議加密客戶端與 Active Directory 進行通信所使用的通道。這絕對可行,但會增加在 DC 和 Linux 計算機上管理 SSL 證書的負(fù)擔(dān)。此外,使用 PAM LDAP 模塊并不支持更改已重置的或過期的密碼。
?
使用 LDAP 和 Kerberos 利用 Active Directory 進行 Linux 身份驗證的另一種策略是,將 PAM 配置為使用 Kerberos 身份驗證,以及將 NSS 配置為使用 LDAP 查找用戶和組信息,如圖 2 所示。此方案的優(yōu)點是,它相對來說比較安全,而且它利用的是 Linux 的“內(nèi)置”功能。但是它不利用 Active Directory DC 發(fā)布的 DNS 服務(wù)位置 (SRV) 記錄,所以您會被迫挑選一組特定的 DC 來進行身份驗證。對于管理即將過期的 Active Directory 密碼或是直至最近的適當(dāng)組成員身份查詢,它提供的方法也不是很直觀。
圖 2 使用 LDAP 和 Kerberos 對 Active Directory 進行身份驗證

使用 Winbind 使用 Active Directory 進行 Linux 身份驗證的第三種方法是,將 PAM 和 NSS 配置為調(diào)用 Winbind 后臺程序。Winbind 將使用 LDAP、Kerberos 或 RPC(使用其中最合適的一個),將不同的 PAM 和 NSS 請求轉(zhuǎn)換為相應(yīng)的 Active Directory 調(diào)用。圖 3 說明了這一策略。
圖 3 使用 Winbind 對 Active Directory 進行身份驗證

我們的實施計劃
?
由于與 Active Directory 的集成的增強,我選擇在 Red Hat Enterprise Linux 5 (RHEL5) 上使用 Winbind 來進行我的 Linux 與 Active Directory 集成項目。RHEL5 是最新的商用 Red Hat Linux 發(fā)布版本,而且它在企業(yè)數(shù)據(jù)中心中相當(dāng)受歡迎。
?
使 RHEL5 對 Active Directory 進行身份驗證基本上需要下列五個不同的步驟:
?

  • 查找并下載適當(dāng)?shù)?Samba 以及其他依存組件。
  • 構(gòu)建 Samba。
  • 安裝并配置 Samba。
  • 配置 Linux,特別是 PAM 和 NSS。
  • 配置 Active Directory。
    本文的下面幾節(jié)將詳細(xì)介紹這些步驟。
    ?
    查找適當(dāng)?shù)能浖?br> ?
    Linux 與 Windows 之間最大的區(qū)別之一是,Linux 由一個小型操作系統(tǒng)內(nèi)核和大型的可單獨下載和安裝的組件集構(gòu)成。這雖然可以創(chuàng)建為某些任務(wù)而進行優(yōu)化的特定 Linux 配置,但也會使服務(wù)器的配置和管理變得極為復(fù)雜。不同的發(fā)布版本處理這種情況的方式也不一樣。Red Hat(及其非商用版 Fedora)使用 Red Hat Package Manager (RPM) 來安裝和管理這些組件。
    ?
    適用于 Red Hat 的 Linux 組件包含兩種形式。RPM 文件包含針對組件版本、Linux 發(fā)布版本和 CPU 體系結(jié)構(gòu)的特定組合而預(yù)先編譯和構(gòu)建的二進制文件。因此,您可以下載和安裝二進制文件,例如,針對在 Intel x86 體系結(jié)構(gòu) CPU 上運行的 Fedora 版本 10 構(gòu)建的通用 UNIX 打印系統(tǒng) (Common UNIX Printing System, CUPS) 的 1.3.8-5 版本。假如有十多種不同的 CPU 體系結(jié)構(gòu)、100 多個 Linux 發(fā)布版本,還有上千個程序包和版本,則要選擇的二進制 RPM 的數(shù)量之多便可想而知。
    ?
    另一方面,源 RPM 文件包含給定程序包的實際源代碼。但您需要自己下載和安裝源、配置構(gòu)建選項,以及編譯和鏈接二進制文件。構(gòu)建您自己的操作系統(tǒng)組件這一想法使習(xí)慣于 Microsoft 在 Windows 安裝 CD 上提供什么就安裝什么的 Windows 用戶十分畏怯,但是程序包管理器可使整個過程相當(dāng)輕松,而且非??煽?。Samba 小組發(fā)布更新和安全修補程序的速度驚人,僅在 2008 年七、八月兩個月內(nèi),就發(fā)布了四個版本的 Samba 3.2,總共包含 100 多個錯誤和安全修補程序。對于此項目,我下載了最新的 Samba 穩(wěn)定版本 3.0.31 版的源。
    ?
    為什么要下載 Samba 源,而不下載預(yù)先編譯的二進制文件集呢?當(dāng)然,我剛開始也嘗試過這么做,但在調(diào)試器上花了數(shù)小時之后,我發(fā)現(xiàn)下載的二進制文件并不是使用支持 Active Directory 身份驗證的正確選項構(gòu)建而成的。具體來說,在 Active Directory 中支持 Linux ID 映射的代碼在默認(rèn)版本中被關(guān)閉了,因此我必須使用適當(dāng)?shù)臉?gòu)建選項重建 Samba。稍后,我將在本文中詳細(xì)討論 ID 映射。
    ?
    雖然 Linux 原本是小型內(nèi)核,但 Red Hat Enterprise 發(fā)布版本預(yù)先安裝了許多程序包。這通常會使生活變得更輕松,因為您從完全正常運行的操作系統(tǒng)開始著手,但預(yù)先安裝的程序包有時會與您以后想要安裝的軟件發(fā)生沖突。
    ?
    我在安裝 Red Hat 時,因為想要使用較新的版本,所以并沒有包含 Samba(通常會默認(rèn)安裝 Samba)。但是,較新版本的 Samba 要求已安裝的幾個其他庫和實用工具也要使用新版本。這類的依賴問題非常煩人,不過,使用 RPM 就可以輕松解決。
    ?
    承載二進制 RPM 程序包的網(wǎng)站很多。我使用的網(wǎng)站(勿庸置疑,是我找到的第一個網(wǎng)站)稱為 PBONE,網(wǎng)址為 rpm.pbone.net。該網(wǎng)站提供了搜索程序包的簡便方法,并且具有我的 CPU 體系結(jié)構(gòu) (i386) 和操作系統(tǒng)發(fā)布版本 (Red Hat Enterprise Linux 5/Fedora 7&8) 所需的所有二進制文件。
    ?
    我必須下載和更新圖 4 中列出的程序包來構(gòu)建和安裝最新的 3.0 版 Samba(但我從未嘗試過較新的 3.2 版)。請注意,這些程序包主要針對 Fedora Core (fc) 發(fā)布版本。Red Hat 以 Fedora 使用的相同源為基礎(chǔ),而且完全可與它交互。針對 Fedora Core 7 及更高版本構(gòu)建的程序包,不需要任何修改即可在 RHEL5 上運行。請將下載的 RPM 文件放在 /usr/src/redhat/RPMS 目錄中。
    圖 4 構(gòu)建和安裝 Samba 3.0.31 所需的程序包

    ?
    構(gòu)建 Samba
    ?
    構(gòu)建 Samba 的第一歩是下載適當(dāng)?shù)脑?RPM。我從 PBONE 站點下載了 Samba 3.0.31 的源 RPM。然后,將下載的源 RPM 文件放到 /usr/src/redhat/SRPMS 中,這是構(gòu)建過程中用于源 RPM 的標(biāo)準(zhǔn)目錄。
    ?
    打開終端會話(在 Windows 中稱為命令行窗口)并移至 SRPMS 文件夾。完成后,使用該命令安裝源程序包,如圖 5 所示。
    圖 5 安裝 Samba 源 RPM

    如果您看到“用戶 mockbuild 不存在,請使用根”錯誤警告,請不要擔(dān)心。這個錯誤指出尚未安裝 Mock 構(gòu)建實用工具,但沒有這些實用工具,構(gòu)建過程也可以進行。
    ?
    然后,移至 /usr/src/redhat/SPECS 目錄并編輯文件 SAMBA.SPEC,該文件包含了 Samba 構(gòu)建選項。搜索以“CFLAGS=”開頭的那一行,并確保存在“--with-shared-modules=idmap_ad,idmap_rid”選項。此選項可確保構(gòu)建過程包含將 Linux UID(唯一標(biāo)識符)適當(dāng)轉(zhuǎn)換到 Active Directory 的代碼。圖 6 顯示了此選項。
    圖 6 with-shared-modules 構(gòu)建選項

    接下來,您可能必須更新計算機上的一些庫,才能適當(dāng)構(gòu)建和安裝 Samba,具體取決于您安裝的是哪個版本的庫。在我的例子中,我必須使用 rpm --install 命令安裝圖 4 中列出的程序包;在某些情況下,我必須使用 --force 選項來克服一些依賴問題。
    ?
    要構(gòu)建 Samba,請移至 /usr/src/redhat 目錄,并運行命令 rpmbuild –bb SPECS/samba.spec,如圖 7 所示。此過程將新的 samba-3.0.31-0.i386 RPM 文件留在 /usr/src/redhat/RPMS 目錄中。我們稍后將在此項目中安裝這個 RPM 文件。
    圖 7 創(chuàng)建 Samba 二進制 RPM 文件

    配置 Linux 網(wǎng)絡(luò)
    ?
    為了使用 Active Directory 進行身份驗證,您的 Linux 計算機必須能夠與 DC 通信。您必須配置三個網(wǎng)絡(luò)設(shè)置才能與 DC 通信。
    ?
    首先,重要的是通過使用動態(tài)主機配置協(xié)議 (DHCP) 或使用 ifconfig 命令為 Linux 計算機分配適當(dāng)?shù)?IP 地址和網(wǎng)絡(luò)掩碼,來確保適當(dāng)配置該計算機的網(wǎng)絡(luò)接口。在 RHEL5 下,通過從“系統(tǒng)”|“管理”菜單中選擇“網(wǎng)絡(luò)”來配置網(wǎng)絡(luò),如圖 8 所示。
    圖 8 配置網(wǎng)絡(luò)

    接著,確保將 Linux 計算機的 DNS 解析程序設(shè)置為與 DC 使用相同的 DNS 名稱服務(wù)器;在大多數(shù)情況下,假定您要使用 Active Directory 集成的 DNS,則該 DC 是您想要加入 Linux 計算機的域中的 DC。在用于配置網(wǎng)絡(luò)的相同網(wǎng)絡(luò)配置實用工具的 DNS 選項卡上,配置 DNS 解析程序,如圖 9 所示。
    圖 9 設(shè)置主 DNS 解析程序

    最后,完成上述步驟后,您必須設(shè)置 Linux 計算機的主機名稱以反映它在域中的名稱。雖然您可以使用網(wǎng)絡(luò)配置應(yīng)用程序設(shè)置主機名稱,但這一方法不一定始終適用。
    ?
    但是,可直接編輯 /etc/hosts 文件,并在具有 <IP 地址> <FQDN> <主機名稱> 形式的 localhost.localdomain 條目下添加條目。(例如,“10.7.5.2 rhel5.linuxauth.local linuxauth”)。請注意,如果不這么做,當(dāng)您將 Linux 計算機加入到域后,會在目錄中創(chuàng)建錯誤的計算機對象。
    ?
    配置 Linux 時間同步
    ?
    Kerberos 協(xié)議需要身份驗證系統(tǒng)具有能在相對較小的時間內(nèi)同步的時鐘。默認(rèn)情況下,Active Directory 可允許的偏差時間最長為五分鐘。為了確保您的 Linux 系統(tǒng)與 DC 的系統(tǒng)時鐘維持在這個時間內(nèi),您應(yīng)該將 Linux 系統(tǒng)配置為使用 DC 的網(wǎng)絡(luò)時間協(xié)議 (NTP) 服務(wù)。
    ?
    然后,在 Linux 服務(wù)器上,從“系統(tǒng)”|“管理”菜單中運行日期與時間實用工具,然后單擊“網(wǎng)絡(luò)時間協(xié)議”選項卡。選中“啟用網(wǎng)絡(luò)時間協(xié)議”框,然后添加您要用作網(wǎng)絡(luò)時間源的 DC 的 IP 地址。請注意,這通常應(yīng)該是在域中擔(dān)任主域控制器 (PDC) 仿真器靈活單主機操作 (FSMO) 角色的 DC。圖 10 顯示了如何設(shè)置 Linux 網(wǎng)絡(luò)時間源的一個示例。
    圖 10 配置網(wǎng)絡(luò)時間協(xié)議

    配置 PAM 和 NSS
    ?
    PAM 和 NSS 提供 Linux 應(yīng)用程序(如桌面)與 Winbind 之間的聯(lián)系媒介。與許多 Linux 服務(wù)一樣,您可以通過文本文件來配置 PAM 和 NSS。我們先來討論一下如何配置 PAM。
    ?
    PAM 為使用它的應(yīng)用程序提供了四個與身份驗證相關(guān)的功能。身份驗證設(shè)施允許應(yīng)用程序確定使用它的用戶。帳戶設(shè)施提供的帳戶管理功能(如登錄時間限制)與身份驗證并不是特別相關(guān)。密碼設(shè)施提供請求和管理密碼的機制。會話設(shè)施執(zhí)行與用戶相關(guān)的安裝和應(yīng)用程序的拆卸任務(wù),例如,在用戶特定的目錄中記錄或創(chuàng)建文件。
    ?
    Red Hat 下的 PAM 將它的配置文件存儲在 /etc/pam.d 目錄中,其中包含使用 PAM 進行身份驗證的每個應(yīng)用程序的文本文件。例如,文件 /etc/pam.d/gdm 包含 Gnome Desktop Manager (GDM) 的 PAM 配置信息,即 Red Hat 的默認(rèn)窗口運行環(huán)境。每個 PAM 配置文件都包含多行內(nèi)容,其中每行分別定義 PAM 身份驗證過程的某個方面。圖 11 顯示了 GDM 的 PAM 配置文件的內(nèi)容。
    圖 11 Gnome Desktop Manager 的 PAM 配置文件

    PAM 配置文件中的每個項目都具有 <管理組> <控制> <模塊> <參數(shù)> 的形式,其中 <管理組> 對應(yīng)于配置條目所屬的設(shè)施:身份驗證、帳戶、密碼或會話。圖 12 中描述的控制關(guān)鍵字可控制 PAM 處理配置條目的方式。該文件的第三欄包含 /lib/security 目錄中的 PAM 共享庫的名稱。共享庫包含可動態(tài)加載的可執(zhí)行代碼,類似于 Windows 中的 DLL。模塊名稱后的其他術(shù)語都是 PAM 傳遞到共享庫的參數(shù)。
    ?
    圖 12 PAM 控制關(guān)鍵字

    您可以看到每個管理組都包含多個條目。PAM 按照調(diào)用命名的模塊的順序處理條目。然后,該模塊返回成功或失敗消息,而 PAM 將繼續(xù)根據(jù)控制關(guān)鍵字進行評估。
    ?
    您可能會注意到,GDM 的 PAM 配置文件在它的所有管理組中都包含系統(tǒng)身份驗證。這正是 PAM 為 GDM 建立默認(rèn)身份驗證行為的方式。通過修改系統(tǒng)身份驗證,您可以修改在其 PAM 配置中包含系統(tǒng)身份驗證文件的所有應(yīng)用程序的身份驗證行為。圖 13 中介紹了默認(rèn)系統(tǒng)身份驗證文件。
    圖 13 PAM 系統(tǒng)身份驗證文件

    Name Service Switch (NSS) 模塊將隱藏系統(tǒng)數(shù)據(jù)存儲的詳細(xì)信息以防應(yīng)用程序開發(fā)人員看見,這與 PAM 隱藏身份驗證的詳細(xì)信息的方式大體相似。NSS 允許管理員指定存儲系統(tǒng)數(shù)據(jù)庫的方式。具體來說,管理員可以指定如何存儲用戶名和密碼信息。因為我們希望應(yīng)用程序使用 Winbind 在 Active Directory 中查詢用戶信息,所以我們必須修改 NSS 配置文件才能顯示此信息。
    ?
    Red Hat 包含一個小型的圖形小程序,可用來配置 PAM 和 NSS,稱為 system-config-authentication。它負(fù)責(zé)管理您需要對系統(tǒng)身份驗證和 nss.conf 文件進行的大部分(而非全部)更改。
    ?
    運行 system-config-authentication 應(yīng)用程序后,您會看到如圖 14 所示的對話框。選中“用戶信息”(用于配置 nss.conf 文件)和“身份驗證”(用于修改系統(tǒng)身份驗證文件)這兩個選項卡上的 Winbind 選項。
    圖 14 systemconfig-authentication 對話框

    單擊“配置 Winbind”按鈕,您將看到如圖 15 所示的對話框。在 Winbind 域字段中輸入要對用戶進行身份驗證的域的名稱,并選擇“ads”作為安全模式。在 Winbind ADS 領(lǐng)域字段中輸入 Active Directory 域的 DNS 域名稱。在 Winbind 域控制器字段中,輸入您希望該 Linux 系統(tǒng)對其進行身份驗證的 DC 的名稱,也可以輸入星號,表明 Winbind 應(yīng)通過查詢 DNS SRV 記錄來選擇 DC。
    圖 15 配置 Winbind 對話框

    選擇您的 Active Directory 用戶應(yīng)該具有的適當(dāng)默認(rèn)命令行界面,在本例中,我選擇的是 Bourne-again Shell 或 BASH。此時,不要按下“加入域”按鈕,稍后,再將此計算機加入到域。
    ?
    在將 /etc/pam.d/system-auth 文件修改為支持 Winbind 后,還需要對其進行另一個更改。當(dāng) Linux 用戶登錄時,系統(tǒng)要求該用戶必須擁有主目錄。主目錄包含許多用戶特定的首選項和配置條目,與 Windows 注冊表非常相似。問題在于,因為您要在 Active Directory 中創(chuàng)建用戶,所以 Linux 不會自動為用戶創(chuàng)建主目錄。幸運的是,您可以將 PAM 配置為在其會話配置期間為用戶創(chuàng)建主目錄。
    ?
    打開 /etc/pam.d/system-auth 文件,然后向下滾動到底部,在標(biāo)有“session optional map_mkhomedir.so skel=/etc/skel umask=0644”會話部分中的最后一行之前插入一行(請參見圖 16)。這一行將 PAM 配置為創(chuàng)建用戶的主目錄(如果用戶沒有主目錄)。它將目錄 /etc/skel 用作“框架”或模板,而且將權(quán)限掩碼 0644(所有者具有的讀寫權(quán)限、主要組具有的讀取權(quán)限,以及其他人具有的讀取權(quán)限)分配給新文件夾。
    圖 16 為用戶創(chuàng)建主目錄

    安裝和配置 Samba
    ?
    要安裝您剛剛創(chuàng)建的 Samba 二進制文件,請轉(zhuǎn)至 /usr/src/redhat/RPMS 目錄。由 rpmbuild 命令創(chuàng)建的所有 RPM 文件都會顯示在此目錄中。請記住,Samba 包括允許 Linux 客戶端訪問 Windows(或 Samba)文件共享的二進制文件,以及允許 Linux 系統(tǒng)充當(dāng) Windows 文件服務(wù)器、Windows 打印機服務(wù)器和 Windows NT 4.0-style DC 角色的代碼。
    ?
    要讓 Linux 對 Active Directory 進行身份驗證,我們根本用不到這么多角色,其實我們只需要使用 Samba 公共文件和 Samba 客戶端二進制文件就可以了。為了方便起見,這些文件可為兩個 RPM 文件:samba-client-3.0.31-0.i386.rpm 和 samba-common-3.0.31-0.i386.rpm。使用 rpm --install 命令安裝 RPM 文件,請看下面的示例:rpm --install samba-common-3.0.31-0.i386.rpm。(請注意,您需要先安裝 –common RPM 文件。)
    ?
    安裝了 Samba 客戶端二進制文件后,您必須修改默認(rèn) Samba 配置,以確保 Winbind 使用 Active Directory 適當(dāng)處理身份驗證。所有 Samba 配置信息(包括客戶端和服務(wù)器)都可以在 smb.conf 文本文件中找到,該文件在默認(rèn)情況下位于 /etc/samba 目錄中。Smb.conf 可能包含大量配置選項,本文只會對其內(nèi)容進行簡要介紹。samba.org 網(wǎng)站和 Linux 主頁簡要討論了 smb.conf。
    ?
    第一步是將 Winbind 配置為使用 Active Directory 進行身份驗證。您必須將 smb.conf 中的安全模式設(shè)置為“ads”。system-config-authentication 實用工具應(yīng)該已經(jīng)幫您設(shè)置好了,但檢查一下總是比較保險。編輯 smb.conf 文件,并搜索標(biāo)有“域成員選項”的部分。找出以“security”開頭的那一行,并確定它的內(nèi)容是“security = ads”。下一個配置步驟是確定 Winbind 如何將 Windows 安全主體(如用戶和組)映射到 Linux 標(biāo)識符,這需要進行進一步的說明。
    ?
    ID 映射問題
    ?
    通過 Active Directory 對 Linux 用戶進行身份驗證時有個大問題我還沒有提到,那就是用戶和組的 UID 問題。Linux 和 Windows 在內(nèi)部都不是根據(jù)用戶名來引用用戶的,而是使用唯一的內(nèi)部標(biāo)識符。Windows 使用安全標(biāo)識符(即 SID),它能夠唯一標(biāo)識 Windows 域中的每個用戶,其結(jié)構(gòu)長度可以變化。SID 也包含唯一域標(biāo)識符,以便 Windows 區(qū)別不同域中的用戶。
    ?
    Linux 的方案則簡單得多,Linux 計算機上的每個用戶都有一個 UID,而此 UID 只是一個 32 位的整數(shù)。但是 UID 的范圍受限于計算機本身。在某臺 Linux 計算機上具有 UID 436 的用戶,不一定與另一臺 Linux 計算機上具有 UID 436 的用戶相同。因此,用戶必須登錄他需要訪問的每臺計算機,這顯然不是理想的情況。
    ?
    Linux 網(wǎng)絡(luò)管理員解決此問題的常用方法是,使用 Network Information System (NIS) 或共享 LDAP 目錄來提供網(wǎng)絡(luò)身份驗證。網(wǎng)絡(luò)身份驗證系統(tǒng)提供用戶的 UID,而使用該身份驗證系統(tǒng)的所有 Linux 計算機都將共享相同的用戶和組標(biāo)識符。在這種情況下,我將使用 Active Directory 來提供唯一的用戶和組標(biāo)識符。
    ?
    要解決此問題,我可以采用兩種策略。第一個(也是最明顯的)策略是,為每個用戶和組創(chuàng)建 UID,并將該標(biāo)識符與各自的對象一起存儲到 Active Directory 中。這樣一來,當(dāng) Winbind 對用戶進行身份驗證時,它就可以查詢該用戶的 UID,然后將它提供給 Linux 作為該用戶的內(nèi)部標(biāo)識符。Winbind 將此方案稱為 Active Directory ID 映射,或 idmap_ad。圖 17 介紹了 Active Directory ID 映射的過程。
    圖 17 Active Directory ID 映射

    Active Directory ID 映射的唯一缺點是,我們必須提供一種機制來確保每個用戶和組都擁有標(biāo)識符,而且這些標(biāo)識符在林中都是唯一的。有關(guān)詳細(xì)信息,請參閱“針對 Active Directory ID 映射配置 Active Directory”邊欄。
    ?
    幸好,還有另外一種 ID 映射策略,這種策略的管理負(fù)荷要少得多。回想一下,我們在前面曾提到過 Windows SID 可以唯一標(biāo)識域中的用戶和域本身。SID 中能唯一標(biāo)識域中用戶的部分稱為相對標(biāo)識符(或 RID),而且這部分事實上是一個 32 位的整數(shù)。因此,Winbind 可在用戶登錄時直接從 SID 中提取 RID,然后將該 RID 用作唯一的內(nèi)部 UID。Winbind 將此策略稱為 RID 映射,或 idmap_rid。圖 18 描述了 RID 映射的實際工作方式。
    圖 18 RID 映射

    RID 映射具有零管理負(fù)荷的優(yōu)點,但是您不能將它用在多域的環(huán)境中,因為不同域中的用戶可能擁有相同的 RID 值。但是,如果您擁有單個 Active Directory 域,則可以使用 RID 映射。
    ?
    要配置 Winbind ID 映射策略,請再次編輯 /etc/samba/smb.conf 文件,并且添加“idmap backend = ad”行來使用 Active Directory 映射策略;如果您要使用 RID 映射策略,請?zhí)砑印癷dmap backend = rid”行。確保該文件中不存在任何其他指定映射策略的行。
    ?
    對于 Winbind,我們還需要在 smb.conf 文件中添加其他配置選項。雖然我們已將 PAM 設(shè)置為在每個用戶登錄時為其創(chuàng)建主目錄,但是還需要告訴 Winbind 主目錄的名稱是什么。我們可以通過將“template homedir = /home/%U”行添加到 smb.conf 來執(zhí)行此操作(請參見圖 19)。這會告訴 Winbind,使用 Active Directory 進行身份驗證的每個用戶的主目錄都將是 /home/<用戶名>。但務(wù)必要先創(chuàng)建好 /home 目錄。
    圖 19 指定主目錄的名稱

    加入域并登錄
    ?
    既然網(wǎng)絡(luò)、PAM、NSS 和 Samba Winbind 都已配置成功,現(xiàn)在應(yīng)該將 Linux 計算機加入到域中??墒褂?Samba NET 命令來執(zhí)行此操作。在外殼程序提示符下,運行“net ads join –U <管理員名稱>”。使用具有足夠權(quán)限來將計算機加入到域的帳戶名稱替換 <管理員名稱>。
    ?
    net 命令會提示您輸入用戶的密碼。如果一切運行正常,net 命令會將您的計算機加入到域中。您可以使用 Active Directory 用戶和計算機來查找剛剛創(chuàng)建的計算機帳戶。
    ?
    您可以使用稱為 wbinfo 的 Winbind 測試工具來測試加入的狀態(tài)。運行 wbinfo –t 將測試計算機與域之間的信任關(guān)系。運行 wbinfo –u 將列出域中的所有用戶,而運行 wbinfo –g 將列出域中的所有組。
    ?
    如果您成功將 Linux 計算機加入到域中,則下一步是嘗試使用 Active Directory 用戶帳戶和密碼登錄。注銷 Linux 計算機,然后使用 Active Directory 用戶名登錄。如果一切運行正常,您應(yīng)該能夠登錄。
    ?
    針對 Active Directory ID 映射配置 Active Directory
    ?
    此信息僅在您使用 Active Directoryy ID 映射時才適用。如果您決定使用 RID 映射,可隨時跳過此邊欄。
    ?
    您必須先對 Active Directory 本身進行一些更改,然后才能使用 Active Directory 帳戶登錄到您的 Red Hat 服務(wù)器。首先,Active Directory 架構(gòu)必須適合 Winbind 用來存儲用戶信息的屬性。如果您運行的是 Windows Server 2003 R2,則表示此架構(gòu)已經(jīng)準(zhǔn)備就緒。如果您擁有 Active Directory 架構(gòu)的早期版本,則必須使用 Microsoft Services for UNIX (SFU) 程序包對其進行擴展。
    ?
    您可以在 Technet 上的 Services for UNIX 上找到更多信息。SFU 還包含另一個針對 Active Directory 用戶和計算機 Microsoft 管理控制臺 (MMC) 管理單元的屬性頁,用于管理 Linux 所需的用戶 ID 和組 ID 信息。
    適當(dāng)設(shè)置架構(gòu)后,您必須為所有可能登錄您的 Linux 計算機的用戶(和他們所屬的組)提供 Linux 標(biāo)識符。這表示您必須為可能登錄您的 Linux 計算機的用戶和組定義 uidNumber 和 gidNumber 屬性的值。但是您應(yīng)該注意這些屬性的一些要求:
    ?
  1. Linux 要求要進行身份驗證的每個用戶都必須有 UID。由于您要管理 Active Directory 中的用戶信息,所以要登錄 Linux 計算機的每個用戶帳戶都必須具有唯一的 uidNumber 屬性。您用于 uidNumber 的特定值并不重要,但它在所有可能登錄 Linux 計算機的用戶中必須是唯一的。
  2. 每個 Linux 用戶也必須具有默認(rèn)組標(biāo)識符,因此,要登錄 Linux 計算機的每個 Active Directory 用戶也需要 gidNumber 屬性值。此值在用戶中不必是唯一的,但它必須唯一地標(biāo)識組。
  3. Active Directory 中的每個組對于它的 gidNumber 屬性來說都應(yīng)該具有唯一值。嚴(yán)格來講,組可以沒有 gidNumber 屬性值,但 Winbind 在對用戶進行身份驗證時,會希望用戶所屬的每個組都具有唯一的 gidNumber 值。最簡單的方法可能是確保每個組都具有唯一的 gidNumber 值。
  4. Winbind 希望它在 Active Directory 中查詢的每個用戶都是 Domain Users 組的成員,因此它也希望 Domain Users 組具有 gidNumber 屬性值。

要是行不通怎么辦?
使用 Winbind 設(shè)置 Linux 計算機以便使用 Active Directory 進行身份驗證并非易事。要配置的東西有很多,而且很多地方都可能會出錯,而 Linux 的每個版本和 Samba 的每個版本之間又都存在一些細(xì)微差別,這更是雪上加霜。但是您可以查找?guī)讉€地方,以幫助確定怎樣操作。
?
首先是 Linux 系統(tǒng)日志文件,它保存在 /var/log/messages 中。Samba 將重大事件的消息(例如,丟失文件或配置失?。┐鎯υ谶@個文件中。除了系統(tǒng)日志文件外,還有 Samba 和 Winbind 的日志文件。您可以在 /var/log/samba 中找到這些文件,而且它們還會為您提供一些其他信息。
?
您可以通過修改 Winbind 的啟動腳本來設(shè)置調(diào)試級別,來提高 Winbind 發(fā)出的日志消息的詳細(xì)程度(和數(shù)量)。編輯 /etc/init.d/winbind 外殼腳本,然后在 windbindd 命令中添加“-d 5”。這可將調(diào)試級別增加到 5(允許的值范圍為 1 至 10),使 Winbind 生成更詳細(xì)的錯誤消息。
?
如果 Winbind 最后可與 DC 通信,您可以運行網(wǎng)絡(luò)數(shù)據(jù)包捕獲實用工具,如 Netmon 3.1。這使您可以精確分析 Winbind 要進行的操作。而且,您還可以檢查 DC 上的 Windows 安全日志,此日志會顯示身份驗證嘗試。
?
如果行得通,您又應(yīng)該做些什么呢?
?
如果一切都能順利進行,現(xiàn)在您就可以使用在 Active Directory 中保存的憑據(jù)登錄 Linux 系統(tǒng)中了。與在 Linux 計算機上本地管理標(biāo)識,或與使用諸如 NIS 之類的不安全系統(tǒng)相比,這是一項重大改進。它使您可以將您的用戶管理任務(wù)集中到一個標(biāo)識存儲上:Active Directory。
?
但是,要讓這套解決方案真正具備實際用途,還缺幾樣?xùn)|西。首先,無法保證能獲得技術(shù)支持,有點像撞大運。大多數(shù) Linux 組織對于 Active Directory 都不是很了解,而且您可以從 Linux 社區(qū)獲得的支持完全取決于誰剛好讀到您的帖子以及他們當(dāng)天的心情。
?
Samba 也沒有遷移或部署工具。如果您具有現(xiàn)有的 Linux 帳戶及其相關(guān)的用戶 ID 和權(quán)限,則您在將它們遷移至 Active Directory 時,必須手動確保它們維護其 UID。
?
最后,Samba 仍然無法使用最重要的 Active Directory 應(yīng)用程序之一,即組策略,盡管已經(jīng)實施了此策略。雖然您可以使用 Samba 將 Linux 系統(tǒng)加入到 Active Directory 中,但無法使用組策略來管理它。
?
第三方解決方案
?
使用 Active Directory 對 Linux 計算機進行身份驗證顯然是件好事,但使用 Samba Winbind 推出您自己的解決方案,即使不把您累死,也會讓您感到枯燥無味。您可能會想,一些創(chuàng)新的軟件供應(yīng)商可能會提出易于使用的解決方案,您猜得沒錯。
?
對于我在本文中演示的版本,有四家商用軟件供應(yīng)商已經(jīng)開發(fā)了易于安裝和使用的相應(yīng)版本。它們幾乎為每個受歡迎的 Linux、UNIX 和 Apple Macintoshes 版本都提供了代碼和遷移工具,另外也支持使用組策略管理 Linux 計算機。
?
這四家公司分別為 CentrifyLikewise Software、Quest SoftwareSymark。這四家供應(yīng)商都提供了相似的功能,其中包括跨越各個 Linux 發(fā)布版本的組策略管理。Likewise Software 最近還公開了它實現(xiàn)的開放源代碼,稱為 Likewise Open,但它的組策略組件仍舊是商用產(chǎn)品。Likewise Open 將可用于多個主要的 Linux 發(fā)布版本。(注:撰寫本文時,本人就職的公司 NetPro 已由 Quest Software 收購。)
?
有了可用的商用產(chǎn)品后,還有必要使用 Samba 和 Winbind 來構(gòu)建自己的身份驗證系統(tǒng)嗎?如果花錢購買集成軟件不在預(yù)算之內(nèi),則可以利用免費的 Samba 開放源代碼路由。您還可以獲得所有的源代碼,這樣的好處真是令人難以抗拒。但是,遷移現(xiàn)有的 Linux 計算機及其現(xiàn)有的 UID 是非常棘手的問題。
?
另一方面,假如您想要省下安裝和實現(xiàn)的時間、需要遷移現(xiàn)有的 Linux 計算機,或是希望有人對您的問題提供權(quán)威性的解答,那么尋求其中的一種商用解決方案比較劃算。另外,如果您需要使用組策略管理功能,那么商用產(chǎn)品是您唯一的選擇。
?
但是,無論您采取哪種方式,將 Linux 身份驗證與 Active Directory 集成都可以減少您為管理多用戶帳戶投入的精力、增強系統(tǒng)安全性,并為您提供單一的標(biāo)識存儲來進行管理和審核,而這些全都是相當(dāng)吸引人的理由,值得試一試。
?
Gil Kirkpatrick 在他 30 年的職業(yè)生涯中設(shè)計或開發(fā)了十多種成功的商用軟件產(chǎn)品,而且他還是 Directory 專家會議(現(xiàn)在改名為專家會議)的創(chuàng)辦人。Gil 是《Active Directory Programming》的作者,并且經(jīng)常為《Windows IT Pro》和《TechNet 雜志》撰寫文章。Gil 目前在 NetPro(現(xiàn)在是 Quest Software 的一部分)擔(dān)任常駐專家一職,他是各種安全性、標(biāo)識和市場營銷項目的顧問,并且經(jīng)常在全球各地的技術(shù)講座和會議中發(fā)表演說。


uid、gid 和 RID
您也許在 Samba 文檔或者可能是在 LDAP 帳戶的輸出中見到過對術(shù)語 RID 的引用。那么什么是 RID 呢?UNIX 操作系統(tǒng)(包括象 Linux 這樣的派生物)通過整數(shù) uid(用戶標(biāo)識,User ID)唯一地標(biāo)識用戶,并通過整數(shù) gid(組標(biāo)識,Group ID)唯一地標(biāo)識組。當(dāng)以某一用戶登錄時,通過輸入 id 即可訪問這個信息。
?
當(dāng)前的 Microsoft 操作系統(tǒng)通過稱為 RID 的值唯一地標(biāo)識用戶和組,該值通常是一個用十六進制表示的整數(shù)。在 UNIX 下,用戶和組存在于獨立的名稱空間中。而在 Microsoft 操作系統(tǒng)上,用戶和組存在于一個名稱空間中。
?
Samba 使用下列公式將 UNIX uid 和 gid 映射為 RID:
?
rid = 2 (uid) + 1000
rid = 2 (gid) + 1001
因此,如果工作在 Red Hat 系統(tǒng)上的用戶 tom,其 uid 為 500,gid 為 500,則映射到 Microsoft 域中的 RID 分別為 2000 和 2001。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容