酷米网(kmw.com),专注高端域名快速交易!

  1. 当前位置: 
  2. 首页 > 
  3. 域名资讯  > 用samba做Linux和Windows域的整合
服务器时间:2018-06-25 18:09:01 (CST +08:00)

用samba做Linux和Windows域的整合

2017-12-17 17:06:49     浏览量: 40

1. 测试环境:

DC&DNS:Windows Server 2003 sp2 企业版. 计算机名为:DC ip :192.168.255.1 客户机:Red Hat Enterprise Linux ES5 hostname为server ip: 192.168.255.2 域名:yanchun.com

2. 试验目的:将Linux 加入到Windows 域, 并实现Windows 域帐户登陆Linux 服务器.

3. 准备工作:

a. 在一台机器上安装Windows Server 2003 ,并升级为DC, 同时集成DNS 服务. b.Linux的准备工作也很简单, 主要是检查以下几个包是否被安装:

samba-3.0.23c-2

samba-common-3.0.23c-2

samba-client-3.0.23c-2 //samba的相关包

krb5-libs-1.5-17

krb5-workstation-1.5-17

krb5-devel-1.5-17

pam_krb5-2.2.11-1 //kerberos相关的软件包

主要就用到这些包, 由于各Linux 发行版本的不同, 包的版本或许会有差异.

4. 配置步骤:

a. 修改ip 和dns 我就不做介绍了. 但是要注意防火墙(iptables)和SELinux. 你可以把iptables 规则清空, 并禁用SELinux.

清空iptables 规则命令如下:

iptables -F

禁用SELinux 方式如下:

vi /etc/selinux/config

将其中的 SELINUX=enforcing

改成 SELINUX=disable

b. 修改/etc/krb5.conf文件,该文件是kerberos 的配置文件。

典型的krb5.conf 文件如下:

[logging]

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

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

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

[libdefaults]

default_realm = EXAMPLE.COM

dns_lookup_realm = false

dns_lookup_kdc = false

[realms]

EXAMPLE.COM = {

kdc = kerberos.example.com:88

admin_server = kerberos.example.com :749

default_domain = example.com

}

[domain_realm]

.example.com = EXAMPLE.COM

专业和专注企业服务器应用www.591cto.com

,

example.com = EXAMPLE.COM

[kdc]

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

[appdefaults]

pam = {

debug = false

ticket_lifetime = 36000

renew_lifetime = 36000

forwardable = true

krb4_convert = false

}

其中需要我们修改的地方很少, 以我的例子为例, 修改后的文件如下:

[logging]

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

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

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

[libdefaults]

default_realm = YANCHUN.COM //改成你的域名

dns_lookup_realm = false

dns_lookup_kdc = false

[realms]

Y ANCHUN.COM = { //改成你的域名

kdc = dc.yanchun.com :88 //改成你DC 的FQDN 或者是IP, 两者没什么区别 admin_server = dc.yanchun.com :749

default_domain = yanchun.com //改成你的域名,注意和上面的不同.(大小写) }

[domain_realm]

.example.com = YANCHUN.COM

example.com = YANCHUN.COM //接着改

[kdc]

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

[appdefaults]

pam = {

debug = false

ticket_lifetime = 36000

renew_lifetime = 36000

forwardable = true

krb4_convert = false

}

修改完毕后运行下面的命令查看kerberos 文件是否有误:

kinit administrator@YANCHUN.COM

其中administrator 是域管理员账户,YANCHUN.COM 是你的域名.

专业和专注企业服务器应用www.591cto.com

,

回车键后, 会提示你输入密码, 如果没有什么错误. 在你输入密码回车后, 会自动返回到Linux 命令提示符下.

在这里要注意的小问题就是Linux 本地的时间要和DC 的时间差问题, 我们都知道, 在DC 上的策略中, 时间差允许的范围是5分钟, 所以, 在运行上述的命令前, 最好先同步下Linux 和DC 的时间:

ntpdate 192.168.255.1

c. 这一步是最主要的步骤了,就是修改/etc/samba/smb.conf配置文件.samba 的主配置文件选项很多, 在加上各版本中默认的选项都有所差异, 在这里我就不列举典型的smb.conf 文件了, 我只把我的smb.conf 文件帖出来, 以供各位参考:

[global]

workgroup = YANCHUN //需要加入的域的netbios 名, 注意是域的netbios 名, 要大写

netbios name = Linux //本机器的netbios 名, 有的版本没有这一项会没有这个, 要手动添加

server string = Samba Server //对该服务器的描述

printcap name = /etc/printcap

load printers = yes

cups options = raw

log file = /var/log/samba/m.log

max log size = 50

security = ads //ads验证方式必须有realm 项

realm = YANCHUN.COM //增加这一行, 注意这里是域名.

password server = dc.yanchun.com //这里是DC 的FQDN, 也可以写ip, 但是有时候会出 问题, 建议写FQDN

encrypt passwords = yes //加密在网络上传输的用户密码

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

dns proxy = no

winbind separator = / //用户的域名和用户名之间的间隔, 用什么随你心情 idmap uid = 1000000-2000000

idmap gid = 1000000-2000000 //域用户映射成Linux 本地用户时所有的uid 和gid 范围.

template home = /home/D/U //与home 文件夹中定义的作用相同. 两者定义一个就行(我没加这行)

template shell = /bin/bash //用户登陆后所使用的shell

winbind use default domain = yes //用户登陆使用默认的域

winbind enum users = yes

winbind enum groups = yes //有人说是自动创建用 getent passwd[group]看到的 用户和组的信息. 具体有什么用, 我也说不清楚

[homes]

comment = Home Directories

专业和专注企业服务器应用www.591cto.com

,

browseable = no

writable = yes

create mode = 0777

directory mode = 0777 //创建的文件和目录的默认权限

path = /home/D/U //用户主目录的相关设置

[printers]

comment = All Printers

path = /var/spool/samba

browseable = no

guest ok = no

writable = no

printable = yes

以上红色的部分都是要修改的, 其余的都保持默认就行. 好了,修改完成后, 保存退出. 然后用下面的命令测试 smb.conf 是否有误:

testparm

显示的结果如下

:

在这里注意两个地方就行, 一个是 Loaded services file OK. //说明你的配置文件没有错 还有一个就是:Server role:ROLE_DOMAIN_MEMBER //说明你的服务器已经是域的

" 准" 成员了.

好了, 做了这些测试后, 先把smb 和winbind 两个服务开启成随系统自动启动:

chkconfig smb on

chkconfig winbind on

然后重启samba 服务:

service smb restart //写到这里, 我想起一点好玩的事来, 在fedora 9中(其他版本我不知道),

smb 和nmb 服务是分开的, 也就是说你用这条命令只能重启动smb, 不能重 启nmb, 你还要打service nmb restart才行.....

然后就可以加入域了:

net ads join -W YANCHUN.COM -S dc -U administrator

然后会要求你输如管理员的password, 输入后, 正常情况下会提示加入域成功.

专业和专注企业服务器应用www.591cto.com

,

在这里我插一句, 有时候用net ads join 会不好使, 这时候就试试net rpc join 这种方式.

到这里, 我们就已经把samba 服务器加入到域里了, 这时, 在DC 上,computers 这个OU 里就应该可以看到你的samba 服务器了

.

这时, 我们重启winbind 服务:

service winbind restart

重启完成后,我们就可以用下面的几条命令来进行测试了:

wbinfo -t //测试该samba 服务器与域的信任关系

wbinfo -u // 查看域用户的映射信息

wbinfo -g

有时候会出现这样的错误信息, 解决办法如下:

先停掉winbind 和smb 服务:

service smb stop

service winbind stop

然后删除下面两个目录里的.tdb 文件: /etc/samba 和 /var/cache/samba

据我理解, 这些应该是在加入域过程中,产生的一些缓存

文件, 但是有时候这些缓存会造成一些错误信息, 就象我们刚才看到的那样,删除后, 重启服务, 让他重新

生成就行了.

fedora9 会稍有不同, 目录我记不太清楚了,好像是 /var/lib/samba 你可以用命令搜索下: find / -name *.tdb

删除完成后, 重新启动 smb服务.

service smb start

在次运行加入域的命令:

net ads join -W YANCHUN.COM -S dc -U administrator

重启动winbind 服务.

专业和专注企业服务器应用www.591cto.com

,

service winbind start

然后在用命令查看信息就OK 了

.

到这里呢, 我们的samba 服务器就成功的加入到域里了,但是呢, 却还不能实现域账户在Linux 终端上的登陆. 想要实现这个目的, 其实也很简单,只需要修改下面几个文件就可以了: /etc/nsswitch.conf //修改这个文件, 影响Linux 查找用户, 组, 和他们密码的行为 修改项如下:

passwd: winbind files

shadow: winbind files

group: winbind files

/etc/pam.d/sysconfig-auth //让pam 认证支持以winbind 为源进行用户的查找和匹对. 修改项如下:

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

专业和专注企业服务器应用www.591cto.com

,

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 /lib/security/$ISA/pam_limits.so

session required /lib/security/$ISA/pam_unix.so

修改完毕后, 根据上面smb.conf 文件的配置, 我们就可以实现用户的登陆了,不过还有一点要说明, 就是在用户登陆前,必须手动创建他们的登陆主目录, 并且赋予他们完全控制的权限. 比如, 我想让administrator 用户登陆Linux, 实现步骤如下:

cd /home

mkdir YANCHUN

cd YANCHUN

mkdir administrator

chown administrator administrator //在home 目录下创建YANCHUN 域目录, 并在该目录下创建

要登陆用户administrator 的目录,更改目录权限.

这样在终端上就可以实现域用户账户的登陆了.

还有就是用户登陆Linux 平台后, 权限控制的问题. 默认情况下, 这种方式登陆到Linux 平台的用户只有对自己主目录有完全控制权限, 其余的文件均为只读.

可以通过下面的方法来实现对域用户权限的控制:

1. 更改/etc/nsswitch.conf文件.

passwd: winbind files

shadow: files winbind

group: winbind files

细心的朋友也许已经注意到了这个文件与上面那个文件的不同. 就是shadow 的查找顺序. 为什么这么改, 呵呵,先卖个关子, 接着往下看.

2. 然后先把winbind 服务停掉.

建立与要登陆Linux 的域用户账户的同名Linux 账户.

3. 重启winbind 服务. 用域账户登陆. 这时会发现, 登陆后域用户的登陆点不是在/home/D/U下了, 而是在/home/U下. 为什么呢?

这是因为nsswitch.conf 文件影响的结果. 就是域用户在输入自己的登陆名时,Linux 系统并不认为是域用户, 而认为该用户是一个本地用户, 而shadow 项的设置, 是先去DC 进行密码的查询. 于是就造成了一种假象, 就是域用户用自己的用户名和密码登陆了Linux. 所以其登陆目录为/home/U.

既然,Linux 认为该登陆用户是一个本地用户, 那么我们就可以很方便的对他赋予权限了. 但是, 如果要登陆Linux 的用户非常多, 那么作为管理员, 我们的工作量会非常大, 这也是我下面要提出的用LDAP 想法的原因.

我在这个试验过程中所碰到的问题如下:

1. net rpc join 和 net ads join 命令在作用上有什么区别.

2. 有时候配置文件没有错, 但是在加入域时会提示错误信息, 如NT_STATUS开头的一些错误信息, 具体是什么原因, 还望有高手指教. 我在网上搜索相关错误提示的帖子, 也没有能找到真正解决问题的方法.

专业和专注企业服务器应用www.591cto.com

,

NT_STATUS_ACCESS_DENIED (0xc0000022)

NT_STATUS_NO_TRUST_SAM_ACCOUNT (0xc000018b)

NT_STATUS_INVALID_COMPUTER_NAME

3. 有时候会出现unable to find a suitable server .提示找不到合适的服务器, 不知道问题出在什么地方.

4. 另外, 我还有一种想法, 能不能在Linux 上搭建LDAP 服务, 然后用他去同步Windows 的活动目录数据库, 然后激活samba 的LDAP 数据库认证功能, 实现域用户账户访问samba 服务器的认证问题. 有做过相关试验的朋友请给小弟一点指点. 感激不尽.

5. 至于自动为登陆Linux 平台的域用户创建宿主目录, 和自动加入某一Linux 本地组, 等我熟了SHELL 编程在说吧, 呵呵~

6. 有时候会出现类似于Winbind 服务启动起来后,显示该服务已经假死的现象,这时候可以通过查找/var/log/messages或者/etc/log/samba/winbind.log查找相关的错误信息。我碰到过的一个问题是:Winbind Dead but subsys lock的东东,解决办法是关闭SELinux 就可以了,针对这个问题在相关的日志错误信息中显示的是:open secrets.tdb error。据我个人理解,应该是SELinux 的开启造成了Winbind 无法访问/etc/samba/secrets.tdb文件的缘故,只要disable SELinx 重启计算机后,应该就可以正常的启动和停止Winbind 服务了。

自己操作:

Win 03 AD:

IP: 192.168.15

Samba server (cetnos5.3):

[root@sambatest ~]# hostname

Sambatest

[root@sambatest ~]# more /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1 localhost.localdomain localhost

::1 localhost6.localdomain6 localhost6

192.168.1.18 sambatest

软件:

Yum search samba

找到:

samba.i386 : Samba SMB 服务器。

samba-client.i386 : Samba (SMB) 客户程序。

samba-common.i386 : 用在 Samba 服务器和客户机上的文件。

samba-swat.i386 : Samba SMB 服务器配置程序。

专业和专注企业服务器应用www.591cto.com

,

后:

Yum –y install samba*

Yum search krb5

找到:

krb5-auth-dialog.i386 : Kerberos 5 认证对话

krb5-devel.i386 : 编译 Kerberos 5 程序所需的开发文件。 krb5-libs.i386 : 被 Kerberos 5 使用的共享库。

krb5-server.i386 : The KDC and related programs for Kerberos 5. krb5-workstation.i386 : 用在工作站上 Kerberos 5 程序。

pam_krb5.i386 : 一个 Kerberos 5 的可插入验证模块 (PAM)。 后:

Yum –y install pam_krb5* krb5*

SMB.CONF:

[global]

workgroup = DS

realm = DS.COM

server string = Sambatest Server Version v

security = ADS

password server = 192.168.1.16

idmap uid = 16777216-33554431

idmap gid = 16777216-33554431

template shell = /sbin/nologin

winbind separator =

winbind enum users = Yes

winbind enum groups = Yes

winbind use default domain = Yes

winbind offline logon = false

netbios name = sambatest

encrypt passwords = yes

cups options = raw

[centos ds]

comment = centos samba server

path = /home/samba/

valid users = ds caiwu02, @ds caiwu, @ds test, @ds server read only = No

create mask = 0664

directory mask = 0775

guest ok = Yes

专业和专注企业服务器应用www.591cto.com

,

more /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 = DS.COM

dns_lookup_realm = false

dns_lookup_kdc = false

ticket_lifetime = 24h

forwardable = yes

[realms]

DS.COM = {

kdc = 192.168.1.16:88

kdc = 192.168.1.16

admin_server = 192.168.1.16:749 default_domain = DS.COM

}

[domain_realm]

.ds.com = DS.COM

ds.com = DS.COM

[kdc]

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

[appdefaults]

pam = {

debug = false

ticket_lifetime = 36000

renew_lifetime = 36000

forwardable = true

krb4_convert = false

}

专业和专注企业服务器应用www.591cto.com