wd and cc

— Happy every day

ldap samba实现windows域管理

Posted at — May 14, 2006
2 安装Openldap和phpldapadmin
debian里面的openldap的名字是slapd。ldap-utils包里包括了一些ldap有用的命令(都是以ldap开头的)。phpldapadmin是ldap的一个web管理界面。de4.2-util是Berkeley V4.2 数据库工具包,ldap需要用到。
#apt-get install slapd ldap-utils phpldapadmin db4.2-util
下载完毕包之后,开始安装之前,会出来一些设置界面(请注意这里出现问题的数目和安装系统时的某个设置有关系)。
slapd的设置
1) DNS domain nam填写你的服务器的域名,此后会作为基准DN。例如我输入abc.com,此后的基准DN就是dc=abc,dc=com。
2) Name of your organization填写你的组织的名称,或者公司的名称。我输入test-org。
3) Admin password填写管理员的密码,这个用户是ldap最高权限的拥有者。
4) 确认密码。
5) Allow LDAPv2 protocol询问你是否允许LDAPv2协议。如果是新装选否就可以了。如果需要兼容以前的系统,选是。
phpldapadmin的设置
1) LDAP服务器的ip或者主机名。因为是管理本机的LDAP服务器,所以默认的127.0.0.1就可以。
2) 是否启用TLS,也就是是否使用加密协议。加密的话可能需要apache2也做配置支持。这里选择否。
3) 基准DN。根据你的情况输入,这里我输入dc=abc,dc=com。
4) 这一步选择phpldapadmin的认证方式,安装过phpmysqladmin的应该会比较熟悉。选择session是最保险的方式。
5) 输入登陆服务器的dn,默认即可。这里还要注意,默认的行字也就是最后登陆phpldapadmin的管理员的用户名,比较长。
6) 需要配置的服务器,这里只需要选择apache2就可以了。
7) 选择是,重启apache。
此后即开始安装。slapd的配置文件都在/etc/ldap。phpldapadmin的配置文件在/etc/phpldapadmin。用浏览器打开 http://abc.com/phpldapadmin ,会看到phpldapadmin的界面,使用cn=admin,dc=abc,dc=com登陆。
###如果是etch,phpldapadmin 0.8.8.1,登陆的时候会提示用户名或密码错误,不知道是不是phpldapadmin 0.9.8.1版本的bug。此版本还有一个问题就是登陆之后,不能新建entry。0.9.8.2版本就没有这个问题了。所以如果你也是0.9.8.1版本的话,最好还是去http://phpldapadmin.sf.net下载一个新的版本,然后把其中的phpldapadmin/htdocs/template_engine.php覆盖 /usr/share/phpldapadmin/htdocs/template_engine.php 即可,或者也可以直接全部覆盖,要注意保留config/config.php。
如果提示用户名密码错误,不用担心,还可以修改/etc/ldap/slapd.conf文件,在index后面添加两行
rootdn "cn=admin,dc=abc,dc=com"
rootpw pw
之后重启slapd(/etc/init.d/slapd restart)之后即可用密码pw登陆,登陆之后可以修改密码,修改之后可以去掉上面添加的两行(当然,不删也可以)。
debian中的admin的密码是存储在数据库里面的,而不是/etc/ldap/slapd.conf文件中,所以可以不需要rootdn和rootpw的设置。
使用下面的命令可以查看ldap中所有的条目
#ldapsearch -x -b 'dc=abc,dc=com' '(objectclass=*)'
修改/etc/syslog.conf,增加下面一行。
local4.*         /var/log/ldap.log
这样ldap生成的日志就会在/var/log/ldap.log里面出现。此外还需要设置/etc/ldap/slapd.conf的loglevel。
3 安装samba
samba-doc包含了和ldap一起工作的samba schema,这个是我们需要的。
#apt-get install samba samba-doc
samba的设置
1) Workgroup/Domain Name这里输入工作组名称或者域名称。我这里输入test-domain。
2) 是否使用加密密码。windows默认都是这个。选是。
3) 修改smb.conf使用DHCP设置的WINS。选否。
4) 选daemons。
5) 是否建立samba密码数据库,选是。
复制ldap需要的samba的schema。
#cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema
#cd /etc/ldap/schema/
#gzip -d samba.schema.gz
修改/etc/ldap/slapd.conf,在include后面加上一行。
include         /etc/ldap/schema/samba.schema
重启slapd。配置samba使用ldap来验证。修改/etc/samba/smb.conf文件。
找到passdb backend = tdbsam,将其替换为下面内容。
passdb backend = ldapsam:ldap://127.0.0.1
ldap suffix = dc=abc,dc=com
ldap machine suffix = ou=machines
ldap user suffix = ou=users
ldap group suffix = ou=groups
ldap admin dn = cn=admin,dc=abc,dc=com
ldap delete dn = no
# 服务器配置为主域控制器
domain logons = yes
# allow user privileges
enable privileges = yes
设置之后可以使用testparm命令测试。
为samba提供LDAP rootdn的密码。
# smbpasswd -w your_passwd
Setting stored password for "cn=admin,dc=abc,dc=com" in secrets.tdb
重启samba。打开phpldapadmin看看,可以看到dc=abc,dc=com下面已经多出来一个entry。我这里是sambaDomainName=TEST-DOMAIN。查看其属性,可以看到最下面的sambaSID,这个后面的操作会用到。也可以使用net getlocalsid命令得到。
4 安装smbldap-tools
perl脚本,用来更加方便管理用户。主要使用他来初始化LDAP中samba中的部分。
#apt-get install smbldap-tools
配置smbldap-tools。
#cd /etc/smbldap-tools
#cp /usr/share/doc/smbldap-tools/examples/smbldap{.conf.gz,_bind.conf} ./
#gzip -d smbldap.conf.gz
之后修改下面几个文件以符合你的情况。
/etc/smbldap-tools/smbldap.conf
SID="S-1-5-21-3248317815-3353503310-553435137"
suffix="dc=abc,dc=com"
usersdn="ou=users,${suffix}"
computersdn="ou=machines,${suffix}"
groupsdn="ou=groups,${suffix}"
sambaUnixIdPooldn="sambaDomainName=TEST-DOMAIN,${suffix}"
hash_encrypt="MD5"
/etc/smbldap-tools/smbldap_bind.conf:
slaveDN="cn=admin,dc=abc,dc=com"
slavePw="password"
masterDN="cn=admin,dc=abc,dc=com"
masterPw="password"
要注意这个文件里面的密码要添明文,所以最好为这个文件设置合适的权限。
执行smbldap-populate命令
# smbldap-populate
Using workgroup name from sambaUnixIdPooldn (smbldap.conf): sambaDomainName=TEST-DOMAIN
Using builtin directory structure
entry dc=abc,dc=com already exist.
adding new entry: ou=Users,dc=abc,dc=com
adding new entry: ou=Groups,dc=abc,dc=com
adding new entry: ou=Computers,dc=abc,dc=com
adding new entry: ou=Idmap,dc=abc,dc=com
entry sambaDomainName=TEST-DOMAIN,dc=abc,dc=com already exist. Updating it...
adding new entry: uid=Administrator,ou=Users,dc=abc,dc=com
adding new entry: uid=nobody,ou=Users,dc=abc,dc=com
adding new entry: cn=Domain Admins,ou=Groups,dc=abc,dc=com
adding new entry: cn=Domain Users,ou=Groups,dc=abc,dc=com
adding new entry: cn=Domain Guests,ou=Groups,dc=abc,dc=com
adding new entry: cn=Domain Computers,ou=Groups,dc=abc,dc=com
adding new entry: cn=Administrators,ou=Groups,dc=abc,dc=com
adding new entry: cn=Print Operators,ou=Groups,dc=abc,dc=com
adding new entry: cn=Backup Operators,ou=Groups,dc=abc,dc=com
adding new entry: cn=Replicators,ou=Groups,dc=abc,dc=com
此后,可以查看一下phpldapadmin,已经新加了几个entry。
5 安装mkntpwd
phpldapadmin需要使用这个程序来生成samba的加密密码。debian没有这个包,需要自己编译,编译之前可能需要安装make,gcc和libc-dev包。
#apt-get install make gcc libc-dev
#wget http://www.nomis52.net/data/mkntpwd.tar.gz
#tar -zxf mkntpwd.tar.gz
#cd mkntpwd
#make
#cp mkntpwd /usr/local/bin
修改/usr/share/phpldapadmin/templates/template_config.php文件。
查找
// uncomment to set the base dn of posix groups
// default is set to the base dn of the server
//$base_posix_groups="ou=People,dc=example,dc=com";
$samba3_domains[] =
array(  'name'   => 'My Samba domain Name',
       'sid' => 'S-1-5-21-4147564533-719371898-3834029857' );
// The base dn of samba group. (CUSTOMIZE)
//$samba_base_groups = "ou=Groups,ou=samba,dc=example,dc=org";
修改为
// uncomment to set the base dn of posix groups
// default is set to the base dn of the server
$base_posix_groups="ou=groups,dc=nomis52,dc=net";
$samba3_domains[] =
array(  'name'   => 'TEST-DOMAIN',
       'sid' => 'S-1-5-21-3248317815-3353503310-553435137' );
// The base dn of samba group. (CUSTOMIZE)
$samba_base_groups = "ou=groups,dc=abc,dc=com"
6 安装libnss-ldap
用来做linux验证。使得LDAP用户就像普通linux帐号一样。
#apt-get install libnss-ldap
libnss-ldap设置
1) 默认。
2) 查找基准。输入dc=abc,dc=com。
3) 选3。
4) 选否。
5) 选是。
6) 确定。
修改/etc/nsswitch.conf。
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap
这样验证密码的时候会先搜索/etc/passwd,然后才是ldap。
使用getent命令查看一下计算机上面的用户组,在最后会看到ldap的。
#getent group
.....
Domain Admins:x:512:Administrator
Domain Users:x:513:
Domain Guests:x:514:
Domain Computers:x:515:
Administrators:x:544:
Print Operators:x:550:
Backup Operators:x:551:
Replicators:x:552:
7 安装libpam-ldap
#apt-get install libpam-ldap
libpam-ldap设置
1) 使root成为数据库的管理员?选是。
2) 选否。
3) 输入admin的dn,cm=admin,dc=abc,dc=com。
4) 输入root使用的密码,留空使用原来的root密码。
5) 选md5。
修改 /etc/pam-ldap.conf。
pam_filter !(uidNumber=0)
设置不允许root通过ldap登陆linux。
修改下面文件使得pam使用ldap。
/etc/pam.d/common-account
# 注释掉这行
#account        required        pam_unix.so
# 添加下面两行
account         sufficient      pam_ldap.so
account         required        pam_unix.so try_first_pass
/etc/pam.d/common-auth
# 注释掉这行
#auth   required        pam_unix.so nullok_secure
# 添加下面两行
auth    sufficient      pam_ldap.so
auth    required        pam_unix.so nullok_secure use_first_pass
/etc/pam.d/common-password
# 注释掉这行
#password   required   pam_unix.so nullok obscure min=4 max=8 md5
# 添加下面两行
password   sufficient pam_ldap.so
password   required   pam_unix.so nullok obscure min=4 max=8 md5 use_first_pass
重启ssh和samba。
安装nscd。
#apt-get install nscd
8 添加用户
smbldap-useradd : to add an user account (by default a posixAccount. Using '-a' option for a sambaSAMAccount, '-w' option for a machine sambaAccount),
smbldap-userdel : to delete an existing user account
smbldap-usermod : to modify an user account.
smbldap-userinfo : to allow users to modify some informations themselves
修改/etc/samba/smb.conf。
guest account = nobody
add user script = /usr/sbin/smbldap-useradd -m "%u"
#delete user script = /usr/sbin/smbldap-userdel "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
#delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
ldap passwd sync = yes
添加一个测试用户。
#smbldap-useradd -a -m testuser
#smbldap-passwd testuser
#smbldap-passwd Administrator
重启一下电脑,然后使用下面的命令。
#net rpc -U Administrator rights grant testuser SeMachineAccountPrivilege
然后使用这个用户登陆一下域看看。
$ smbcontrol smbd reload-config
and grant the necessary rights to Administrator:
$ net -U Administrator rpc rights list
    SeMachineAccountPrivilege  Add machines to domain
     SePrintOperatorPrivilege  Manage printers
          SeAddUsersPrivilege  Add users and groups to the domain
    SeRemoteShutdownPrivilege  Force shutdown from a remote system
      SeDiskOperatorPrivilege  Manage disk shares
$ net -U Administrator rpc rights list Administrator
$ net -U Administrator rpc rights grant Administrator SeMachineAccountPrivilege
Successfully granted rights.
9 登陆脚本
创建网络共享
# mkdir -p /data/samba/netlogon
# chgrp "Domain Admins" /data/samba/netlogon
修改/etc/samba/smb.conf
# put this in the main section
logon script = logon.bat
# share for the logon scripts
[netlogon]
comment = Network logon service
path = /data/samba/netlogon
write list = "@Domain Admins"
guest ok = Yes

下载KiXtart,解压到/data/samba/netlogon。

#cd /data/samba/netlogon
#wget "http://www.adminscripteditor.com/downloads.asp?act=v&id=39"
#apt-get install unzip
#unzip KiX2010_451.zip
#cp ./KiX2010.451/{KIX32.EXE,KX32.dll} ./

创建logon.bat。

\\debian\netlogon\kix32 \\debian\netlogon\logon.kix /f
comments powered by Disqus