分享

linux加入AD網域

 jweifeng 2012-03-04
环境综述:
Windows AD / DNS 服务器:
主机名:GBDOOB11
IP 地址:192.168.118.130
OS: win2003 标准版sp2 r2
Linux 服务器:
主机名:PostgreSQL postgresql.netseek
IP 地址: 192.168.118.151
OS: Rhel 5.4
1,首先登录AD, 保证DNS 的工作正常,网络正常。
下面的工作就要登录到linux 服务器进行操作了,建议先tar 一下/etc 目录。
2,修改本机的/etc/hosts 文件,保证有真实IP 和真实主机名对应的那一行:
192.168.118.151 postgresql.netseek postgresql
3 , 修改本机IP 地址, 实际设置效果是本机的IP 是192.168.118.151 , 掩码是
255.255.255.0,GATEWAY=192.168.118.2。(原谅我罗嗦吧,这段内容和某些内容本来
就是写给不懂linux 的人看的)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=none
HWADDR=00:0c:29:fe:28:f8
ONBOOT=yes
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.118.151
GATEWAY=192.168.118.2
修改后重启网络服务:
/etc/init.d/network restart
###实际测试发现将BOOTPROTO 从dhcp 改成none 后,DNS 配置文件会被清空,所以将
重启网络服务的操作放在修改DNS 之前。
4,修改DNS 配置文件
[root@postgresql ~]# vi /etc/resolv.conf
; generated by /sbin/dhclient-script
search .local
nameserver 192.168.118.130
####以上的设置是因为我做测试时使用的来自其他vmware 的虚拟机,修改过windows AD
和linux 服务器的网段和IP,导致网络环境发生了变动才需要做的更改。实际工作中并不一定
会遇到这些问题,只要通过下面的验证就可以了####
验证上面配置的方法是:
a)重启nscd 清除缓存:
/etc/init.d/nscd restart
b)ping 主机名:
ping GBDOOB11
主机名能解析和ping 通则是正常。
5,时间同步:
某些版本的vmware workstation linux 客户机存在严重的时间滞后问题,在加入
windows 域之前必须保证两服务器的时间相差不超过5 分钟,否则Kerberos 会报错。
查看时间的方法是“date” :
[root@postgresql ~]# date
Fri Dec 18 14:31:48 CST 2009
修改时间的方法是“date -s”:
[root@postgresql ~]# date -s 2010/1/4
Mon Jan 4 00:00:00 CST 2010
[root@postgresql ~]# date -s 14:32:33
Mon Jan 4 14:32:33 CST 2010
6,Kerberos 配置和测试:

    所需軟件:
    rpm -ivh krb5-libs-1.2.5-6.i386.rpm

 rpm -ivh krb5-server-1.2.5-6.i386.rpm

 rpm -ivh krb5-workstation-1.2.5-6.i386.rpm

    rpm -ivh e2fsprogs-devel

    rpm -ivh keyutils-libs-devel

    rpm -ivh libsepol-devel

    rpm -ivh libselinux-devel

    rpm -ivh krb5-devel
修改Kerberos 的配置文件:
[root@postgresql ~]# cat /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 = LINUXTONE.ORG.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = yes
[realms]
EXAMPLE.COM = {
kdc = kerberos.example.com:88
admin_server = kerberos.example.com:749
default_domain = example.com
}
LINUXTONE.ORG.LOCAL = {
kdc = gbdoob11:88
admin_server = gbdoob11:749
default_domain = myad.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
.local = LINUXTONE.ORG.LOCAL
..local = LINUXTONE.ORG.LOCAL
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
测试Kerberos,需要注意大小写:
重啟Kerberos ,
[root@postgresql ~]# /etc/init.d/krb5kdc restart
[root@postgresql ~]# kinit administrator@LINUXTONE.ORG.LOCAL
Password for administrator@LINUXTONE.ORG.LOCAL: ####随后输入密码
如果没有任何提示,那就是好消息。如果有下问题的提示,就是时间相差过大(超过5 分钟):
klist 可查看憑證時間。
1、Error1:kinit(v5): Cannot find KDC for requested realm while getting initial credentials

2.kinit(v5): Clock skew too great while getting initial credentials
原因:客户端主DNS未指向域控制器

解决:
编辑文件/etc/resolv.conf,将nameserver的值修改成域控制器的IP地址。

3、Error3:kinit(v5): KDC reply did not match expectations while getting initial credentials
解决:使用大写的域名;

4、kinit(v5): Improper format of Kerberos configuration file while initializing Kerberos 5 library 配置文件出錯,檢查配置文件。


7。配置NSS(Name Service Switch )的配置文件,将用户名、组名、密码的来源附加上
来自“winbind”
打开/etc/nsswitch.conf 修改下面内容
passwd: files
shadow: files
group: files
修改为:
passwd: files winbind
shadow: files winbind
group: files winbind
8,配置winbind,他和samba 共用一个配置文件:
vi /etc/samba/smb.conf
workgroup = LINUXTONE ###这一行是设置工作组,.local 太长
了,可以用LINUXTONE 来简写
password server = gbdoob11 ###这是AD 服务器
realm = LINUXTONE.ORG.LOCAL ###这个realm 名要和krb5.conf 里设置的相同,
都要是大写的。
security = ads
idmap uid = 16777216-33554431 ###不要怀疑,就是要从1677 万开始设置,否则
会报可用的UID 已满的错误。
idmap gid = 16777216-33554431
winbind separator = + ###设定域名和用户名之间的分隔符是“+”,默认的“\”
在linux 的shell 下有时候会引起误会
template shell = /bin/bash
winbind use default domain = false
winbind offline logon = false

9,配置pam.d 文件(模块化可插拔的认证方式)
之一:
    auth        sufficient    /lib/security/pam_winbind.so          //增加这一行
    auth        required      /lib/security/$ISA/pam_env.so
    auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
    auth        required      /lib/security/$ISA/pam_deny.so
    auth        sufficient      /lib/security/pam_winbind.so

    account     sufficient    /lib/security/pam_winbind.so       //增加这一行,注意这两行的位置
    account     required      /lib/security/$ISA/pam_unix.so
    account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
    account     required      /lib/security/$ISA/pam_permit.so

    password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
    password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
    password    required      /lib/security/$ISA/pam_deny.so
   
    session     required      pam_mkhomedir.so silent skel=/etc/skel umask=0077  //增加這一行,第一次登錄時可創建用戶資料夾(配合smb.conf)
    session     required      /lib/security/$ISA/pam_limits.so
    session     required      /lib/security/$ISA/pam_unix.so


之二:(曾令不能登錄)
[root@postgresql ~]# cat /etc/pam.d/system-auth-ac
#%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 >= 500 quiet
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 < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_winbind.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow 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_mkhomedir.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet
use_uid
session required pam_unix.so

10,加入windows ad, (如果上述操作的时间过长建议再次同步两服务器的时间)。
net ads join -S gbdoob11 -W .local -U administrator
其中-S 是指定AD 认证服务器, -W 是要加入的域,-U 是Windows AD 管理员的用户名。
[root@postgresql ~]# net ads join -S gbdoob11 -W .local -U
administrator
administrator's password:
Using short domain name -- LINUXTONE
DNS update failed!
Joined 'POSTGRESQL' to realm '.local'
加入AD 以后需要重启winbind 服务。
[root@postgresql ~]# /etc/init.d/winbind restart
Shutting down Winbind services: [ OK ]
Starting Winbind services: [ OK ]
11,验证加入AD 是否成功。
a),使用wbinfo -u/wbinfo -g 等命令进行AD 用户、组信息的读取。
[root@postgresql ~]# wbinfo -u
LINUXTONE+administrator
LINUXTONE+guest
LINUXTONE+support_388945a0
LINUXTONE+iusr_ffc-ul1x7a3rtok
LINUXTONE+iwam_ffc-ul1x7a3rtok
LINUXTONE+krbtgt
LINUXTONE+gbiik
LINUXTONE+utf8asraspnet
LINUXTONE+utf8asusr
LINUXTONE+nt-iusr_gbiikap
[root@postgresql ~]#
b),在终端使用AD 用户进行登录,用户名是“LINUXTONE+administrator”这种形式。
c),在windows 服务器上通过共享的方式访问该服务器,看是否能列印出当前用户的文件
夹,是否可以正常进行读写操作。如在运行中输入\\192.168.118.151 以访问共享文件的方式
来访问linux。
d),重启服务器后看a-c 的配置是否正常,实际工作中遇到过重启服务器则退出AD 的问题。
e),如需要windows 用户使用其他服务,如ssh,可以进入/etc/pam.d/,参考之前修改
过system-auth-ac,修改其他的认证文件。
PS1:小小的警告一下,本人曾经因为修改pam.d 文件导致任何用户都无法登陆到服务器,最
后被迫进单用户模式重搞,这也是我在本文的开始就建议大家备份整个/etc 目录的原因。
PS2:本文运用了查找替换,将实际工作的服务器的域名替换成了.local,虽然经
过手工检查,但不保证在涉及到域名、组名的时候有替换错误或大小写错误的情况,各位遇到问
题之后可以来bbs. 看看,在http://bbs./thread-4740-1-1.html
以发帖问加入AD 过程中遇到的问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约