概要说明:
SAMBA加入域有两种作用:一种只是能把域用户作为samba共享的访问者,既samba配置成功后可以用域用户来访问共享。二是可以用域用户来登录本服务器。这两种功能是可以独立的,并不需要配置在一起。
[global]
workgroup = TEST
netbios name = fc18-domain
(功能1,参数) (功能1的实现还需修改nsswitch.conf, krb5.conf)
security = ads //domain 也一样,当为domain 时不用realm一项
realm = TEST.COM
(encrypt passwords = yes) 默认为yes
password server = 192.168.61.1
idmap config * : range = 100000-500000
idmap config * : backend = tdb
winbind use default domain = false
winbind offline logon = false
winbind separator = +
(功能2,参数)(功能2实现还需pam的认证配置,既system-auth-ac 和password-auth-ac 中添加pam_mkhomedir.so )
winbind enum users = Yes ( 这二行表示wiinbind把域用户映射到本地,既getent passwd 可以看到域用户,这两行是可选的) winbind enum groups = Yes
template homedir = /home/%D/%U ( 这二行指定域用户登录到本服务器的主目录与shell,是必需的 )
template shell = /bin/bash
[demo] (功能1的实现,为域用户分配的共享)
comment = Data
path = /export
valid users =@"TEST+wincaiwu",@"TEST+domain users"
write list = +"TEST+wincaiwu"
guest ok = No
force create mode = 0777
force directory mode = 0777
# create mask = 0766
# directory mask = 0766
实践过程如下:
实验:
把fedora 18 用samba 作为一个文件服务器,加入由windows 2003 作为域控制服务器的域中(同时也作为DNS服务器)。
fedora 18 机器名为fc18-domain( 既 netbios name = fc18-domain ), ip:192.168.61.3
windows 2003 域控制器:机器名全称为:win2003-serv.test.com ,域名为 :test.com,ip:192.168.61.1。
samba配置步骤:
1,同步文件服务器时间,因为fedora 与windows域控制器的时间差值不能大为5分钟。
2,配置DNS,
3,安装kerberos,配置,并测试。
4,samba 配置,
5,认证配置 setup。 选择 Use Winbind ,Use Kerberos , Use Winbind Authentication ( 修改 /etc/pam.d/system-auth-ac)
6,修改,测试AD。
详细步骤:
1,同步时间。kerberos 认证要求时间差不能大于5分钟。
编辑 /etc/ntp.conf 配置文件,把windows 域控制器作为fedora 的时间源。
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
server 192.168.61.1
# service ntpd stop
Shutting down ntpd: [ OK ]
# ntpdate 192.168.61.1 //立即开始同步
5 Apr 18:03:30 ntpdate[4134]: adjust time server 10.16.143.163 offset
-0.002382 sec
# service ntpd start
Starting ntpd: [ OK ]
#
2,配置DNS。
编辑 /etc/resolv.conf 配置文件:(PEERDNS=yes时会修改(DNS)此文件,开启DHCP时,PEERDNS默认为yes)
----------可以通过修改/etc/hosts(静态主机名IP表)添加DNS服务器来解析 (192.168.61.1 win2003-serv.chengmdemo.com)
domain test.com
search test.com
nameserver 192.168.61.1
注:这有如果网络没有配好的话,每次重启网络服务后systemctl restart network.service 都会被重写,
可以直接写网口配置文件:/etc/sysconfig/network-scripts/ifcfg-eth (x)
DNS1=192.168.61.1
DOMAIN=test.com
3,kerberos 配置。
yum list installed | grep krb5
krb5-libs.x86_64 1.10.3-5.fc18 @anaconda
krb5-workstation.x86_64 1.10.3-5.fc18 @anaconda
pam_krb5.x86_64 2.4.1-1.fc18 @anaconda
要确保以上三个RPM 包安装,没有安装则:yum install krb5-libs krb5-workstation pam_krb5
配置kerberos ,修改 /etc/krb5.conf 配置文件。 (以下加粗斜体为所需要的修改)
[logging]
default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm =TEST.COM
dns_lookup_realm =true
dns_lookup_kdc =false
ticket_lifetime = 24hrenew_lifetime = 7dforwardable = true
# default_realm = EXAMPLE.COM
[realms]
# EXAMPLE.COM = {# kdc = kerberos.example.com# admin_server = kerberos.example.com# }VANSTOR.COM={kdc=WIN2003-SERV.TEST.COM:88 //当DNS有误时,也可用IP地址。
admin_server=WIN2003-SERV.TEST.COM:749
default_domain=test.com
}
[domain_realm]
# .example.com = EXAMPLE.COM# example.com = EXAMPLE.COM.vanstor.com=TEST.COMvanstor.com=TEST.COM
4,samba 配置。
修改配置文件 /etc/samba/smb.conf。在 global添加如下:
[global]
workgroup = TEST
security = ads
realm = TEST.COM
password server = 192.168.61.1
idmap config * : range = 100000-500000
winbind enum users = yes (这两行表示winbind 映射到本地用户,既getent passwd 可以看到域用户)
winbind enum groups = yes
winbind separator = +
template homedir = /home/%D/%U (这两行指定winbind本地认证,与samba共享无关)功能2
template shell = /bin/bash
winbind use defalut domain = false
winbind offline logon = false
5,配置认证: 为当前服务器增加Winbind作为的获得域内资源和进行认证的方式之一。pam_winbind.so模块一般用于混和集中式认证环境的用户认证中。(见前一偏文档:常用的Linux可插拔认证模块(PAM)应用举例(二))(如果只是想域用户进行samba共享,不想域用户登录系统,可以不用配置)--功能2.
修改配置文件 /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_winbind.so use_first_pass
auth required pam_deny.so
account required pam_unix.so broken_shadow
account sufficient pam_succeed_if.so uid < 1000 quiet
account [default=bad success=ok user_unknown=ignore] pam_winbind.so
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 nullok try_first_pass use_authtok
password sufficient pam_winbind.so use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_winbind.so
6,修改NSS,测试AD
修改/etc/nsswitch.conf,
passwd: files winbind
shadow: files winbind
group: files winbind
修改完后重启smb,winbind 服务:
systemctl restart smb.service
systemctl restart winbind.service
然后以Windows管理员administrator的身份执行kinit命令以从win2003-serv上获得Kerberos的TGT票据。方法是执行命令:
kinit [email protected]
该命令执行成功没有任何提示,即说明了已经正常获得了TGT票据。
加入成功之后要确保在当前系统上执行wbinfo –t无错误信息提示:
wbinfo -t
命令wbinfo的功能是从winbind daemon中查询所获得的信息。而-t选项用于验证当前的Linux服务器加入到Windows域内之后是否在域内建立了可信任的服务器账号。如果有报错信息的话,可能需要重启一下winbind服务。
手动把linux加入到windows域:
net ads join -U [email protected]
在正常完成上述操作之后,就可以通过wbinfo和getent命令获得从Windows活动目录上获得的用户与组的信息。所有获得的域内用户信息都是以Kerberos realm name + username/groupname的格式出现。这就意味这以后在使用这些Windows帐户登录系统或者服务的时候也要使用该格式。而且在windows 2003的组件“active directory users and computers”的computers中可以看到刚加入域的该服务器的信息。(功能2)
自动创建用户目录。当windows系统上的用户administrator成功地在RHEL上登录之后,唯一的问题是没有自己的主目录。这个时候终于轮到pam_mkhomedir.so模块出场了!
在这个方案中我们只需要简单修改PAM和系统用户登录的相关配置文件/etc/pam.d/system-auth并增加一行session的控制信息如下:
session required pam_mkhomedir.so skel=/etc/skel umask=0022 silent
silent不打印创建目录信息
skel 告诉pam_mkhomedir.so拷贝/etc/skel里的文件到新创建的目录里.
umask 是创建的目录的权限的反码(000 表示权限为777)
创建哪个目录是在smb.conf里的template homedir定义的。
7,完成上述步骤 后,wbinfo -g ,wbinfo -u 即可看到域内用户组与用户信息
[root@localhost /]# wbinfo -g
VANSTOR+dhcp users
VANSTOR+dhcp administrators
VANSTOR+domain computers
VANSTOR+domain controllers
VANSTOR+schema admins
VANSTOR+enterprise admins
VANSTOR+cert publishers
VANSTOR+domain admins
VANSTOR+domain users
VANSTOR+domain guests
VANSTOR+group policy creator owners
VANSTOR+ras and ias servers
VANSTOR+dnsadmins
VANSTOR+dnsupdateproxy
[root@localhost /]# wbinfo -u
RETHAT+root
VANSTOR+administrator
VANSTOR+guest
VANSTOR+krbtgt
VANSTOR+test
接下来就可以创建共享,使用域名用户访问。
在 /etc/samba/smb.conf 中添加:
[demo]
comment = RHEL6-Windows Active Directory Demo Share
path=/demo
create mask = 0660
directory mask = 770
writeable = yes
browseable = yes
valid users = +"TEST+domain users" // TEST+domain user
guest ok = no
# mkdir /demo
# chmod 2770 -R /demo
# chgrp -R "DEMO+domain users" /demo
# ls -la /demo
drwxrwxrwx 2 root TEST+domain users 4096 Sep 3 09:50 demo
重启smbd,winbind
systemctl restart smb.service
systemctl restart winbind.service
从windows 客户端访问共享资源:(windows 下域名与用户名用\分开)
net use z: \\192.168.61.3\demo /user:TEST\test
输入 'TEST\test' 的密码来连接到 '192.168.61.3':
命令成功完成。
此时映射成功。
注意:
1.要确保防火墙关闭。systemctl stop firewalld.service
2.要确保SElinux 关闭。setenforce 0
3.有时kinit [email protected] 获取ticket成功,加入域net rpc join -U [email protected] 不成功,
可重启winbind ,systemctl restart winbind.service !
加入域的几种命今格式:
net ads join -U administrator //对DNS有要求
net rpc join -U [email protected] //常用,与kinit [email protected] 一起!
net rpc join -U administrator%passwd
net rpc join -S WIN2003-SERV.TEST.COM -U administrator%passwd
错误分析:(redhat 文档翻译 )
Kerberos Init Fails
现象:
# kinit [email protected]
Password for [email protected]:
kinit: Preauthentication failed while getting initial credentials
解释:指定的用户名或密码不正确。
Domain Join Secceeds--DNS Update Fails ,加入域成功,但DNS更新失败
现象:
# net join -w VANSTOR -S WIN2003-SERV.TEST.COM -U Administrator
Enter Administrator's password:<...>
Using short domain name --Enter Administrator's password:<...>
Using short domain name --TEST
Joined 'Joined 'RETHAT--TEST' to realm 'vanstor.com'
DNS update failed!DNS update failed!
解释:用FQDN来设置/etc/hosts
192.168.61.1win2003-serv.test.com
192.168.61.3 fc18-domain.test.com
Domain Join Failure – No Suitable Server
现象:
#net rpc join -w TEST -S WIN2003-SERV.TEST.COM -U administrator
Unable to find a suitable server for domain VANSTOR!
解释:在/etc/sysconfig/network 下指定本机FQDN,
NETWORKING=yes
HOSTNAME=rethat-test.test.com
并解定/etc/resolv.conf
domain test.com
search test.com
nameserver 192.168.61.1
重启网络服务。
Error Looking Up Domain Users/Groups – AD Join is OK
现象:
# wbinfo -u
Error looking up domain users
# wbinfo -g
Error looking up domain groups
# net ads testjoin
Join is OK
解释:winbind 守护进程没有运行或需要重启
systemctl restart winbind.service
shell 登录成功,又立既退出。
解释:配置samba时没有指定template shell。
shell登录成功,但不能chdir
解释:父目录不存在,创建它。
mkdir -p /home/TEST
chmod 2770 -R /home/TEST
chgrg -R "VANSTOR+domain users" /home/VANSTOR
补充:Red Hat Enterprise Linux Reference Guide
setup 认证配置:Authentication configuration
认证包括:用户帐号信息认证(左侧),密码认证(右侧)。
用户认证:
1,Enable NIS Support
此选项配置系统作为NIS客户端,与NIS服务器连接来认证用户与密码。需指定NIS domain与NIS服务器(如NIS服务器没有指定,守护进程常试通过广播来查找)
相关包:ypbind,
如果使能了NIS,portmap和ypbind服务会被启动,并设置为开机时启动
2,Enable LDAP Support
此选项配置系统检索用户信息通过LDAP.(也可作为密码认证选项配置)
需指定LDAP服务器的ip地址,和LDAP Search Base DN(用于检索用户信息的可识别名称)。
可选TLS来加密发送给LDAP服务器的密码。
相关包:openldap-clients
3,Winbind
此选项配置系统连接到Windows Active Directory或Windows domain controller,去获取用户信息。
(也可作为服务器密码认证选项配置)
4,Cache User Information
此选项使能name service cache daemon守护进程nscd,并且配置它为开机启动
相关包:nscd
5,Enable Hesiod Support
此选项配置系统检索用户信息通过远和Hesiod数据库。
相关包:hesiod
密码认证:
1,Enable Kerberos Support
此选项使能Kerberos密码认证。
需设置:realms{
kdc: 指定密钥分发中心KDC,它是签发kerberos票据的服务器
admin server:指定管理服务器(运行着kadmind)
}
包:krb5-libs ,krb5-workstation
2,Enable LDAP Support
使用此选项为使用标准PAM用户程序开启LDAP密码认证。参见
3,Use Shadow Passwords
使用隐藏密码格式的/etc/shadow文件来存放密码(用户还在/etc/passwd).linux会默认安装。
包:shadow-utils
4,Winbind
配置系统去连接Windows Active Directory 和Windows domain controller。如上用户认证。
5,Use MD5 Passwords
使能MD5加密密码,把密码加密成256位字符。默认安装选中。
6,Enable SMB Support
配置PAM来使用SMB服务器来认证用户,
需配置:
workgroup: 工作组
Domain Controllers: 指定SMB域控制器