SAMBA

samba是一個神奇的東西肮帐,本來在我看來這是一個文件共享服務,到官網去一查柑蛇,查出了大麻煩

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

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

User Documentation

呵呵翔悠,全是和AD DC相關的业崖,我那個去野芒,本著\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運行的軟件包撮抓。可以使用其它方式來安裝:

  • 編譯安裝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/
啟動服務
systemctl start nmb.service
systemctl start smb.service
這時你就會發(fā)現(xiàn)共享可以訪問了,

samba1.png

只是demo打不開荸恕,而且guest文件夾中也沒有寫權限

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

[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 文件就有了寫入的權限了(簡單粗暴融求,生產中不要這么做)
為什么demo文件夾不能訪問?
這是配置中沒有 guest ok = yes

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

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

samba的基本架構

  • nmb
    NetBIOS名稱服務器為客戶端提供基于IP的NetBIOS命名服務
    開啟該服務后陷舅,和windows通信可以基于netbios名進行倒彰,只要開啟了nmb服務在windows的網絡中就能發(fā)現(xiàn)這個服務器
  • smb
    UNIX的Windows AD和SMB / CIFS文件服務器
  • winbind-----加域后提供名稱解析服務
    名稱服務守護進程,用于從NT服務器解析名稱
    當加域后莱睁,可用于從Windows NT服務器解析用戶和組信息待讳。該服務還可以通過關聯(lián)的PAM模塊提供身份驗證服務。應當注意仰剿,由于域控制器已經執(zhí)行了訪問控制创淡,因此帳戶模塊僅執(zhí)行getpwnam()來驗證系統(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服務器"
  • smb.conf 配置文件
    整個Samba套件的配置文件

  • 用戶

samba的用戶术辐,有兩點要求

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

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

所以上面的設定,是非常不安全的嫂便,除了自己玩玩捞镰,不建議使用,至少不能給寫權限毙替,但要是每次訪問都要輸入密碼岸售,這又會在工作中造成困難,特別是多個共享厂画,又有不同的權限時凸丸,很多的用戶都是記不住密碼的,這時域就是一個好選擇了

  • 用戶加入到samba用戶

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

pdbedit:

pdbedit:添加用戶帳戶袱院,刪除用戶帳戶屎慢,修改用戶帳戶,列出用戶帳戶坑填,導入用戶帳戶抛人。
-a: 添加一個用戶到samba用戶數據庫中,一般要同 -u 一起使用,例如:
?? pdbedit -a -u tom
??new password:
??retype new password
??加入時脐瑰,會詢問加入用戶在samba中的密碼
-x|--delete:
??從數據庫中刪除帳戶妖枚。它需要使用-u指定的用戶名。
??Example: pdbedit -x -u bob
-L: 查看用戶苍在,可以和-v一同使用查看更多信息
??pdbedit -L [-v]
-D: 可以指定绝页,用戶家目錄映射到windows系統(tǒng)中的驅動器號。
??如將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)}{用戶這塊有這兩個命令基本就可以進行一些簡單的授權了}


  • 配置

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

這個文件中:
  • 使用“#”開頭和“;”開頭的都是注釋
  • 整個配置文件分為兩個部分
    • [global]
      全局配置部分
      這中間包括了nmb泊愧,smb,winbind的相關設置
      包括samba工作模式盛正,是獨立服務器删咱、域成員、域控蛮艰、打印服務器等等
    • [Share Definitions]
      共享設置部分
  • 可以使用內置變量
變量 說明
%U 會話用戶名(客戶端所需的用戶名腋腮,不一定與他們獲得的用戶名相同)。
%G %U的主要組名稱壤蚜。
%h 運行Samba的Internet主機名。hostname
%m 客戶端計算機的NetBIOS名稱(非常有用)徊哑。
%L 服務器的NetBIOS名稱袜刷。
%M 客戶端計算機的Internet名稱。hostname
%d 當前服務器進程的進程ID。
%I 客戶端計算機的IP地址。
%J 客戶端計算機的IP地址码荔,用下劃線代替冒號/點路鹰。
%i 客戶端連接到的本地IP地址
%j 客戶端連接到的本地IP地址,用下劃線代替冒號/點镀首。
%T 當前日期和時間。
%t 當前日期和時間,以不帶冒號分割的最小格式顯示涮雷。(YYYYYmmdd_HHMMSS)
%D 當前用戶的域或工作組的名稱。
%w Winbind分隔符轻局。
%$(envvar) 環(huán)境變量envar的值洪鸭。
%S 當前服務的名稱(如果有)。當前服務名替換為%S仑扑。這在[homes]部分很有用览爵。
%P 當前服務的根目錄(如果有)。
%u 當前服務的用戶名(如果有)镇饮。
%g %u的主要組名稱蜓竹。
%H %u給出的用戶的主目錄。
%N NIS主目錄服務器的名稱。這是從您的NIS auto.map條目獲得的俱济。如果尚未使用--with-automount選項編譯Samba司蔬,則此值將與%L相同
%p 服務主目錄的路徑,該路徑是從NIS auto.map條目獲得的姨蝴。 NIS auto.map條目分為%N:%p俊啼。
%a 遠程計算機的體系結構。它目前可以識別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
  • 認證
    • security =

      • AUTO(Default)
      • USER #因為這是最常見的設置管削,用于獨立文件服務器或DC倒脓。guest將失效
      • DOMAIN #在這種模式下,Samba將充當Windows 域的成員
      • ADS #在這種模式下含思,Samba將充當ADS域中的域成員崎弃。
    • map to guest = Never

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

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

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

OK,有了這些配置旷档,也就可以配置一個獨立的samba文件服務器了

=============================
看了這么多的配置模叙,是不是很頭疼,來鞋屈,來,來故觅,說點高興的 sambaGUI
https://www.samba.org/samba/GUI/
這個頁面提供了許多samba相關的圖形程序

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

webmin1.png

samba2.png

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

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

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

  • printers 打印機的共享

首先要安裝CUPS來管理和驅動打印機

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>
啟動服務
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的權限問題

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

  • 編譯安裝鄙麦,使用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服務器作為AD后端。
    • Heimdal Kerberos密鑰分發(fā)中心(KDC)胯府。
  • 安裝前的準備工作:
    • 為您的AD DC選擇一個的主機名介衔。
    • 選擇一個DNS,(為您的AD林選擇一個DNS域骂因。該名稱還將用作AD Kerberos領域炎咖。)
    • 在DC上使用靜態(tài)IP地址。
    • 禁用諸如resolvconf之類的工具寒波,這些工具會自動更新/etc/resolv.conf DNS解析器配置文件乘盼。
    • 確認沒有Samba進程正在運行。
      ps ax | egrep "samba|smbd|nmbd|winbindd"
    • 確認DC上的/ etc / hosts文件正確將標準域名(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的參數
自己加上systemd相關的,可以生成systemd的服務腳本卷中,安裝在/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
這個有很多的參數,可以直接安官方的做

`# 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內建的dns栈幸。官方建議的:BIND9_DLZSAMBA_INTERNAL
下面繼續(xù)說內建的:

  • 編輯/etc/resolv.conf文件帮辟,設置dns服務器為自己

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

驗證

  • 驗證文件服務
$ 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服務
$ 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遠程服務器管理工??具(RSAT)。
Installing RSAT

好了蔓榄,域這個東西太復雜了并炮,有時間慢慢看。

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

更多擴展閱讀

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

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

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

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

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

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

使用 Winbind 使用 Active Directory 進行 Linux 身份驗證的第三種方法是,將 PAM 和 NSS 配置為調用 Winbind 后臺程序霍转。Winbind 將使用 LDAP荐绝、Kerberos 或 RPC(使用其中最合適的一個),將不同的 PAM 和 NSS 請求轉換為相應的 Active Directory 調用谴忧。圖 3 說明了這一策略很泊。
圖 3 使用 Winbind 對 Active Directory 進行身份驗證

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

  • 查找并下載適當的 Samba 以及其他依存組件均驶。
  • 構建 Samba昏兆。
  • 安裝并配置 Samba。
  • 配置 Linux妇穴,特別是 PAM 和 NSS爬虱。
  • 配置 Active Directory。
    本文的下面幾節(jié)將詳細介紹這些步驟腾它。
    ?
    查找適當的軟件
    ?
    Linux 與 Windows 之間最大的區(qū)別之一是跑筝,Linux 由一個小型操作系統(tǒng)內核和大型的可單獨下載和安裝的組件集構成。這雖然可以創(chuàng)建為某些任務而進行優(yōu)化的特定 Linux 配置瞒滴,但也會使服務器的配置和管理變得極為復雜曲梗。不同的發(fā)布版本處理這種情況的方式也不一樣。Red Hat(及其非商用版 Fedora)使用 Red Hat Package Manager (RPM) 來安裝和管理這些組件妓忍。
    ?
    適用于 Red Hat 的 Linux 組件包含兩種形式虏两。RPM 文件包含針對組件版本、Linux 發(fā)布版本和 CPU 體系結構的特定組合而預先編譯和構建的二進制文件世剖。因此定罢,您可以下載和安裝二進制文件,例如旁瘫,針對在 Intel x86 體系結構 CPU 上運行的 Fedora 版本 10 構建的通用 UNIX 打印系統(tǒng) (Common UNIX Printing System, CUPS) 的 1.3.8-5 版本祖凫。假如有十多種不同的 CPU 體系結構、100 多個 Linux 發(fā)布版本酬凳,還有上千個程序包和版本蝙场,則要選擇的二進制 RPM 的數量之多便可想而知。
    ?
    另一方面粱年,源 RPM 文件包含給定程序包的實際源代碼。但您需要自己下載和安裝源罚拟、配置構建選項台诗,以及編譯和鏈接二進制文件完箩。構建您自己的操作系統(tǒng)組件這一想法使習慣于 Microsoft 在 Windows 安裝 CD 上提供什么就安裝什么的 Windows 用戶十分畏怯,但是程序包管理器可使整個過程相當輕松拉队,而且非潮字可靠。Samba 小組發(fā)布更新和安全修補程序的速度驚人粱快,僅在 2008 年七秩彤、八月兩個月內,就發(fā)布了四個版本的 Samba 3.2事哭,總共包含 100 多個錯誤和安全修補程序漫雷。對于此項目,我下載了最新的 Samba 穩(wěn)定版本 3.0.31 版的源鳍咱。
    ?
    為什么要下載 Samba 源降盹,而不下載預先編譯的二進制文件集呢?當然谤辜,我剛開始也嘗試過這么做蓄坏,但在調試器上花了數小時之后,我發(fā)現(xiàn)下載的二進制文件并不是使用支持 Active Directory 身份驗證的正確選項構建而成的丑念。具體來說涡戳,在 Active Directory 中支持 Linux ID 映射的代碼在默認版本中被關閉了,因此我必須使用適當的構建選項重建 Samba脯倚。稍后渔彰,我將在本文中詳細討論 ID 映射。
    ?
    雖然 Linux 原本是小型內核挠将,但 Red Hat Enterprise 發(fā)布版本預先安裝了許多程序包胳岂。這通常會使生活變得更輕松,因為您從完全正常運行的操作系統(tǒng)開始著手舔稀,但預先安裝的程序包有時會與您以后想要安裝的軟件發(fā)生沖突乳丰。
    ?
    我在安裝 Red Hat 時,因為想要使用較新的版本内贮,所以并沒有包含 Samba(通常會默認安裝 Samba)产园。但是,較新版本的 Samba 要求已安裝的幾個其他庫和實用工具也要使用新版本夜郁。這類的依賴問題非常煩人什燕,不過,使用 RPM 就可以輕松解決竞端。
    ?
    承載二進制 RPM 程序包的網站很多屎即。我使用的網站(勿庸置疑,是我找到的第一個網站)稱為 PBONE,網址為 rpm.pbone.net技俐。該網站提供了搜索程序包的簡便方法乘陪,并且具有我的 CPU 體系結構 (i386) 和操作系統(tǒng)發(fā)布版本 (Red Hat Enterprise Linux 5/Fedora 7&8) 所需的所有二進制文件。
    ?
    我必須下載和更新圖 4 中列出的程序包來構建和安裝最新的 3.0 版 Samba(但我從未嘗試過較新的 3.2 版)雕擂。請注意啡邑,這些程序包主要針對 Fedora Core (fc) 發(fā)布版本。Red Hat 以 Fedora 使用的相同源為基礎井赌,而且完全可與它交互谤逼。針對 Fedora Core 7 及更高版本構建的程序包,不需要任何修改即可在 RHEL5 上運行仇穗。請將下載的 RPM 文件放在 /usr/src/redhat/RPMS 目錄中流部。
    圖 4 構建和安裝 Samba 3.0.31 所需的程序包

    ?
    構建 Samba
    ?
    構建 Samba 的第一歩是下載適當的源 RPM。我從 PBONE 站點下載了 Samba 3.0.31 的源 RPM仪缸。然后贵涵,將下載的源 RPM 文件放到 /usr/src/redhat/SRPMS 中,這是構建過程中用于源 RPM 的標準目錄恰画。
    ?
    打開終端會話(在 Windows 中稱為命令行窗口)并移至 SRPMS 文件夾宾茂。完成后,使用該命令安裝源程序包拴还,如圖 5 所示跨晴。
    圖 5 安裝 Samba 源 RPM

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

    接下來锤窑,您可能必須更新計算機上的一些庫璧针,才能適當構建和安裝 Samba,具體取決于您安裝的是哪個版本的庫渊啰。在我的例子中探橱,我必須使用 rpm --install 命令安裝圖 4 中列出的程序包申屹;在某些情況下,我必須使用 --force 選項來克服一些依賴問題走搁。
    ?
    要構建 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 網絡
    ?
    為了使用 Active Directory 進行身份驗證,您的 Linux 計算機必須能夠與 DC 通信湖员。您必須配置三個網絡設置才能與 DC 通信贫悄。
    ?
    首先,重要的是通過使用動態(tài)主機配置協(xié)議 (DHCP) 或使用 ifconfig 命令為 Linux 計算機分配適當的 IP 地址和網絡掩碼娘摔,來確保適當配置該計算機的網絡接口窄坦。在 RHEL5 下,通過從“系統(tǒng)”|“管理”菜單中選擇“網絡”來配置網絡凳寺,如圖 8 所示鸭津。
    圖 8 配置網絡

    接著,確保將 Linux 計算機的 DNS 解析程序設置為與 DC 使用相同的 DNS 名稱服務器肠缨;在大多數情況下逆趋,假定您要使用 Active Directory 集成的 DNS,則該 DC 是您想要加入 Linux 計算機的域中的 DC晒奕。在用于配置網絡的相同網絡配置實用工具的 DNS 選項卡上闻书,配置 DNS 解析程序,如圖 9 所示脑慧。
    圖 9 設置主 DNS 解析程序

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

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

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

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

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

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

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

    安裝和配置 Samba
    ?
    要安裝您剛剛創(chuàng)建的 Samba 二進制文件恢着,請轉至 /usr/src/redhat/RPMS 目錄。由 rpmbuild 命令創(chuàng)建的所有 RPM 文件都會顯示在此目錄中封寞。請記住然评,Samba 包括允許 Linux 客戶端訪問 Windows(或 Samba)文件共享的二進制文件,以及允許 Linux 系統(tǒng)充當 Windows 文件服務器狈究、Windows 打印機服務器和 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 客戶端二進制文件后憔购,您必須修改默認 Samba 配置,以確保 Winbind 使用 Active Directory 適當處理身份驗證岔帽。所有 Samba 配置信息(包括客戶端和服務器)都可以在 smb.conf 文本文件中找到玫鸟,該文件在默認情況下位于 /etc/samba 目錄中。Smb.conf 可能包含大量配置選項犀勒,本文只會對其內容進行簡要介紹屎飘。samba.org 網站和 Linux 主頁簡要討論了 smb.conf。
    ?
    第一步是將 Winbind 配置為使用 Active Directory 進行身份驗證贾费。您必須將 smb.conf 中的安全模式設置為“ads”钦购。system-config-authentication 實用工具應該已經幫您設置好了,但檢查一下總是比較保險褂萧。編輯 smb.conf 文件押桃,并搜索標有“域成員選項”的部分。找出以“security”開頭的那一行导犹,并確定它的內容是“security = ads”怨规。下一個配置步驟是確定 Winbind 如何將 Windows 安全主體(如用戶和組)映射到 Linux 標識符,這需要進行進一步的說明锡足。
    ?
    ID 映射問題
    ?
    通過 Active Directory 對 Linux 用戶進行身份驗證時有個大問題我還沒有提到,那就是用戶和組的 UID 問題壳坪。Linux 和 Windows 在內部都不是根據用戶名來引用用戶的舶得,而是使用唯一的內部標識符。Windows 使用安全標識符(即 SID)爽蝴,它能夠唯一標識 Windows 域中的每個用戶沐批,其結構長度可以變化。SID 也包含唯一域標識符蝎亚,以便 Windows 區(qū)別不同域中的用戶九孩。
    ?
    Linux 的方案則簡單得多,Linux 計算機上的每個用戶都有一個 UID发框,而此 UID 只是一個 32 位的整數躺彬。但是 UID 的范圍受限于計算機本身。在某臺 Linux 計算機上具有 UID 436 的用戶梅惯,不一定與另一臺 Linux 計算機上具有 UID 436 的用戶相同宪拥。因此,用戶必須登錄他需要訪問的每臺計算機铣减,這顯然不是理想的情況她君。
    ?
    Linux 網絡管理員解決此問題的常用方法是,使用 Network Information System (NIS) 或共享 LDAP 目錄來提供網絡身份驗證葫哗。網絡身份驗證系統(tǒng)提供用戶的 UID缔刹,而使用該身份驗證系統(tǒng)的所有 Linux 計算機都將共享相同的用戶和組標識符球涛。在這種情況下,我將使用 Active Directory 來提供唯一的用戶和組標識符校镐。
    ?
    要解決此問題亿扁,我可以采用兩種策略。第一個(也是最明顯的)策略是灭翔,為每個用戶和組創(chuàng)建 UID魏烫,并將該標識符與各自的對象一起存儲到 Active Directory 中。這樣一來肝箱,當 Winbind 對用戶進行身份驗證時哄褒,它就可以查詢該用戶的 UID,然后將它提供給 Linux 作為該用戶的內部標識符煌张。Winbind 將此方案稱為 Active Directory ID 映射呐赡,或 idmap_ad。圖 17 介紹了 Active Directory ID 映射的過程骏融。
    圖 17 Active Directory ID 映射

    Active Directory ID 映射的唯一缺點是链嘀,我們必須提供一種機制來確保每個用戶和組都擁有標識符,而且這些標識符在林中都是唯一的档玻。有關詳細信息怀泊,請參閱“針對 Active Directory ID 映射配置 Active Directory”邊欄。
    ?
    幸好误趴,還有另外一種 ID 映射策略霹琼,這種策略的管理負荷要少得多×沟保回想一下枣申,我們在前面曾提到過 Windows SID 可以唯一標識域中的用戶和域本身。SID 中能唯一標識域中用戶的部分稱為相對標識符(或 RID)看杭,而且這部分事實上是一個 32 位的整數忠藤。因此,Winbind 可在用戶登錄時直接從 SID 中提取 RID楼雹,然后將該 RID 用作唯一的內部 UID模孩。Winbind 將此策略稱為 RID 映射,或 idmap_rid贮缅。圖 18 描述了 RID 映射的實際工作方式瓜贾。
    圖 18 RID 映射

    RID 映射具有零管理負荷的優(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 設置為在每個用戶登錄時為其創(chuàng)建主目錄萍诱,但是還需要告訴 Winbind 主目錄的名稱是什么悬嗓。我們可以通過將“template homedir = /home/%U”行添加到 smb.conf 來執(zhí)行此操作(請參見圖 19)。這會告訴 Winbind裕坊,使用 Active Directory 進行身份驗證的每個用戶的主目錄都將是 /home/<用戶名>包竹。但務必要先創(chuàng)建好 /home 目錄。
    圖 19 指定主目錄的名稱

    加入域并登錄
    ?
    既然網絡籍凝、PAM周瞎、NSS 和 Samba Winbind 都已配置成功,現(xiàn)在應該將 Linux 計算機加入到域中饵蒂∩睿可使用 Samba NET 命令來執(zhí)行此操作。在外殼程序提示符下退盯,運行“net ads join –U <管理員名稱>”双絮。使用具有足夠權限來將計算機加入到域的帳戶名稱替換 <管理員名稱>。
    ?
    net 命令會提示您輸入用戶的密碼得问。如果一切運行正常,net 命令會將您的計算機加入到域中软免。您可以使用 Active Directory 用戶和計算機來查找剛剛創(chuàng)建的計算機帳戶宫纬。
    ?
    您可以使用稱為 wbinfo 的 Winbind 測試工具來測試加入的狀態(tài)。運行 wbinfo –t 將測試計算機與域之間的信任關系膏萧。運行 wbinfo –u 將列出域中的所有用戶漓骚,而運行 wbinfo –g 將列出域中的所有組。
    ?
    如果您成功將 Linux 計算機加入到域中榛泛,則下一步是嘗試使用 Active Directory 用戶帳戶和密碼登錄蝌蹂。注銷 Linux 計算機,然后使用 Active Directory 用戶名登錄曹锨。如果一切運行正常孤个,您應該能夠登錄。
    ?
    針對 Active Directory ID 映射配置 Active Directory
    ?
    此信息僅在您使用 Active Directoryy ID 映射時才適用沛简。如果您決定使用 RID 映射齐鲤,可隨時跳過此邊欄斥废。
    ?
    您必須先對 Active Directory 本身進行一些更改,然后才能使用 Active Directory 帳戶登錄到您的 Red Hat 服務器给郊。首先牡肉,Active Directory 架構必須適合 Winbind 用來存儲用戶信息的屬性。如果您運行的是 Windows Server 2003 R2淆九,則表示此架構已經準備就緒统锤。如果您擁有 Active Directory 架構的早期版本,則必須使用 Microsoft Services for UNIX (SFU) 程序包對其進行擴展炭庙。
    ?
    您可以在 Technet 上的 Services for UNIX 上找到更多信息饲窿。SFU 還包含另一個針對 Active Directory 用戶和計算機 Microsoft 管理控制臺 (MMC) 管理單元的屬性頁,用于管理 Linux 所需的用戶 ID 和組 ID 信息煤搜。
    適當設置架構后免绿,您必須為所有可能登錄您的 Linux 計算機的用戶(和他們所屬的組)提供 Linux 標識符。這表示您必須為可能登錄您的 Linux 計算機的用戶和組定義 uidNumber 和 gidNumber 屬性的值擦盾。但是您應該注意這些屬性的一些要求:
    ?
  1. Linux 要求要進行身份驗證的每個用戶都必須有 UID嘲驾。由于您要管理 Active Directory 中的用戶信息,所以要登錄 Linux 計算機的每個用戶帳戶都必須具有唯一的 uidNumber 屬性迹卢。您用于 uidNumber 的特定值并不重要辽故,但它在所有可能登錄 Linux 計算機的用戶中必須是唯一的。
  2. 每個 Linux 用戶也必須具有默認組標識符腐碱,因此誊垢,要登錄 Linux 計算機的每個 Active Directory 用戶也需要 gidNumber 屬性值。此值在用戶中不必是唯一的症见,但它必須唯一地標識組喂走。
  3. Active Directory 中的每個組對于它的 gidNumber 屬性來說都應該具有唯一值。嚴格來講谋作,組可以沒有 gidNumber 屬性值芋肠,但 Winbind 在對用戶進行身份驗證時,會希望用戶所屬的每個組都具有唯一的 gidNumber 值遵蚜。最簡單的方法可能是確保每個組都具有唯一的 gidNumber 值帖池。
  4. Winbind 希望它在 Active Directory 中查詢的每個用戶都是 Domain Users 組的成員,因此它也希望 Domain Users 組具有 gidNumber 屬性值吭净。

要是行不通怎么辦睡汹?
使用 Winbind 設置 Linux 計算機以便使用 Active Directory 進行身份驗證并非易事。要配置的東西有很多寂殉,而且很多地方都可能會出錯囚巴,而 Linux 的每個版本和 Samba 的每個版本之間又都存在一些細微差別,這更是雪上加霜。但是您可以查找?guī)讉€地方文兢,以幫助確定怎樣操作晤斩。
?
首先是 Linux 系統(tǒng)日志文件,它保存在 /var/log/messages 中姆坚。Samba 將重大事件的消息(例如澳泵,丟失文件或配置失敗)存儲在這個文件中兼呵。除了系統(tǒng)日志文件外兔辅,還有 Samba 和 Winbind 的日志文件。您可以在 /var/log/samba 中找到這些文件击喂,而且它們還會為您提供一些其他信息维苔。
?
您可以通過修改 Winbind 的啟動腳本來設置調試級別,來提高 Winbind 發(fā)出的日志消息的詳細程度(和數量)懂昂。編輯 /etc/init.d/winbind 外殼腳本介时,然后在 windbindd 命令中添加“-d 5”。這可將調試級別增加到 5(允許的值范圍為 1 至 10)凌彬,使 Winbind 生成更詳細的錯誤消息沸柔。
?
如果 Winbind 最后可與 DC 通信,您可以運行網絡數據包捕獲實用工具铲敛,如 Netmon 3.1褐澎。這使您可以精確分析 Winbind 要進行的操作。而且伐蒋,您還可以檢查 DC 上的 Windows 安全日志工三,此日志會顯示身份驗證嘗試。
?
如果行得通先鱼,您又應該做些什么呢俭正?
?
如果一切都能順利進行,現(xiàn)在您就可以使用在 Active Directory 中保存的憑據登錄 Linux 系統(tǒng)中了焙畔。與在 Linux 計算機上本地管理標識掸读,或與使用諸如 NIS 之類的不安全系統(tǒng)相比,這是一項重大改進闹蒜。它使您可以將您的用戶管理任務集中到一個標識存儲上:Active Directory。
?
但是抑淫,要讓這套解決方案真正具備實際用途绷落,還缺幾樣東西。首先始苇,無法保證能獲得技術支持砌烁,有點像撞大運。大多數 Linux 組織對于 Active Directory 都不是很了解时鸵,而且您可以從 Linux 社區(qū)獲得的支持完全取決于誰剛好讀到您的帖子以及他們當天的心情歌懒。
?
Samba 也沒有遷移或部署工具巢音。如果您具有現(xiàn)有的 Linux 帳戶及其相關的用戶 ID 和權限百揭,則您在將它們遷移至 Active Directory 時取具,必須手動確保它們維護其 UID兴垦。
?
最后哪工,Samba 仍然無法使用最重要的 Active Directory 應用程序之一般婆,即組策略捐下,盡管已經實施了此策略账锹。雖然您可以使用 Samba 將 Linux 系統(tǒng)加入到 Active Directory 中,但無法使用組策略來管理它坷襟。
?
第三方解決方案
?
使用 Active Directory 對 Linux 計算機進行身份驗證顯然是件好事奸柬,但使用 Samba Winbind 推出您自己的解決方案,即使不把您累死婴程,也會讓您感到枯燥無味廓奕。您可能會想,一些創(chuàng)新的軟件供應商可能會提出易于使用的解決方案档叔,您猜得沒錯桌粉。
?
對于我在本文中演示的版本,有四家商用軟件供應商已經開發(fā)了易于安裝和使用的相應版本蹲蒲。它們幾乎為每個受歡迎的 Linux番甩、UNIX 和 Apple Macintoshes 版本都提供了代碼和遷移工具,另外也支持使用組策略管理 Linux 計算機届搁。
?
這四家公司分別為 Centrify缘薛、Likewise SoftwareQuest SoftwareSymark卡睦。這四家供應商都提供了相似的功能宴胧,其中包括跨越各個 Linux 發(fā)布版本的組策略管理。Likewise Software 最近還公開了它實現(xiàn)的開放源代碼表锻,稱為 Likewise Open恕齐,但它的組策略組件仍舊是商用產品。Likewise Open 將可用于多個主要的 Linux 發(fā)布版本瞬逊。(注:撰寫本文時显歧,本人就職的公司 NetPro 已由 Quest Software 收購。)
?
有了可用的商用產品后确镊,還有必要使用 Samba 和 Winbind 來構建自己的身份驗證系統(tǒng)嗎士骤?如果花錢購買集成軟件不在預算之內,則可以利用免費的 Samba 開放源代碼路由蕾域。您還可以獲得所有的源代碼拷肌,這樣的好處真是令人難以抗拒到旦。但是,遷移現(xiàn)有的 Linux 計算機及其現(xiàn)有的 UID 是非常棘手的問題巨缘。
?
另一方面添忘,假如您想要省下安裝和實現(xiàn)的時間、需要遷移現(xiàn)有的 Linux 計算機若锁,或是希望有人對您的問題提供權威性的解答搁骑,那么尋求其中的一種商用解決方案比較劃算。另外拴清,如果您需要使用組策略管理功能靶病,那么商用產品是您唯一的選擇。
?
但是口予,無論您采取哪種方式娄周,將 Linux 身份驗證與 Active Directory 集成都可以減少您為管理多用戶帳戶投入的精力、增強系統(tǒng)安全性沪停,并為您提供單一的標識存儲來進行管理和審核煤辨,而這些全都是相當吸引人的理由,值得試一試木张。
?
Gil Kirkpatrick 在他 30 年的職業(yè)生涯中設計或開發(fā)了十多種成功的商用軟件產品众辨,而且他還是 Directory 專家會議(現(xiàn)在改名為專家會議)的創(chuàng)辦人。Gil 是《Active Directory Programming》的作者舷礼,并且經常為《Windows IT Pro》和《TechNet 雜志》撰寫文章鹃彻。Gil 目前在 NetPro(現(xiàn)在是 Quest Software 的一部分)擔任常駐專家一職,他是各種安全性妻献、標識和市場營銷項目的顧問蛛株,并且經常在全球各地的技術講座和會議中發(fā)表演說。


uid育拨、gid 和 RID
您也許在 Samba 文檔或者可能是在 LDAP 帳戶的輸出中見到過對術語 RID 的引用谨履。那么什么是 RID 呢?UNIX 操作系統(tǒng)(包括象 Linux 這樣的派生物)通過整數 uid(用戶標識熬丧,User ID)唯一地標識用戶笋粟,并通過整數 gid(組標識,Group ID)唯一地標識組析蝴。當以某一用戶登錄時害捕,通過輸入 id 即可訪問這個信息。
?
當前的 Microsoft 操作系統(tǒng)通過稱為 RID 的值唯一地標識用戶和組闷畸,該值通常是一個用十六進制表示的整數尝盼。在 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祖娘。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市啊奄,隨后出現(xiàn)的幾起案子渐苏,更是在濱河造成了極大的恐慌,老刑警劉巖菇夸,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琼富,死亡現(xiàn)場離奇詭異,居然都是意外死亡庄新,警方通過查閱死者的電腦和手機鞠眉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來择诈,“玉大人械蹋,你說我怎么就攤上這事⌒呱郑” “怎么了哗戈?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荷科。 經常有香客問我唯咬,道長,這世上最難降的妖魔是什么步做? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任副渴,我火速辦了婚禮,結果婚禮上全度,老公的妹妹穿的比我還像新娘煮剧。我一直安慰自己,他們只是感情好将鸵,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布勉盅。 她就那樣靜靜地躺著,像睡著了一般顶掉。 火紅的嫁衣襯著肌膚如雪草娜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天痒筒,我揣著相機與錄音宰闰,去河邊找鬼茬贵。 笑死,一個胖子當著我的面吹牛移袍,可吹牛的內容都是我干的解藻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼葡盗,長吁一口氣:“原來是場噩夢啊……” “哼螟左!你這毒婦竟也來了?” 一聲冷哼從身側響起觅够,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤胶背,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喘先,有當地人在樹林里發(fā)現(xiàn)了一具尸體钳吟,經...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年窘拯,在試婚紗的時候發(fā)現(xiàn)自己被綠了砸抛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡树枫,死狀恐怖直焙,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情砂轻,我是刑警寧澤奔誓,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站搔涝,受9級特大地震影響厨喂,放射性物質發(fā)生泄漏。R本人自食惡果不足惜庄呈,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一蜕煌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诬留,春花似錦斜纪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绿贞,卻和暖如春因块,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背籍铁。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工涡上, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趾断,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓吩愧,卻偏偏與公主長得像歼冰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耻警,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353