本文使用Redhat Enterprice Linux 4.0版本测试,并成功实现。
经过2年多的测试和使用,在CentOS 5.x/Cent OS4.x/RHEL4.x/RHEL 5.x都没有任何问题。
只是软件包的版本有所所区别而已;服务器端配置完全一样,客户端配置仅命令不同而已。
openldap为系统自带工具,可以在安装时选择相应软件包安装或用rpm命令安装。
需要的包为(RHEL4):
openldap-2.2.13-2:包含 OpenLDAP 配置文件、库和文档
openldap-servers-2.2.13-2:包含 slapd 和 slurpd 服务器、迁移脚本和相关文件
openldap-clients-2.2.13-2:包含客户机程序,用来访问和修改 OpenLDAP 目录
启动:
#service ldap start
或
#/etc/init.d/ldap start
或
#/etc/rc.d/init.d/ldap start
将start参数改为restart或stop来重启或停止ldap服务。
设定在开机时自动启动:
#chkconfig ldap on
作为练习,可将系统的防火墙关闭;至于实际应用需打开的端口请自行参考iptables相关文档。关闭iptables防火墙:
#service iptables stop
或
#/etc/init.d/iptables stop
下面配置ldap。
一、配置ldap服务器的账户修改:
在配置文件/etc/openldap/slapd.conf中加入以下行:
loglevel 296
local4.debug /var/log/slapd.log
#上面两行定义了ldap服务器执行的日志
access to attrs=shadowLastChange,userPassword
by self write
by * auth
access to *
by * read
#access 行定义了谁可以访问目录中的内容。我们希望用户可以修改自己的密码,并更新自己的 shadow
信息来反映密码的变化。希望身份验证程序能够检索用户的密码。还希望用户能够读取所有其他条目。注意密码条目是不可读的,shadow
属性的惟一用处就是管理密码的过期问题。
二、配置ldap服务器的数据库:
修改文件/etc/openldap/slapd.conf的以下行:
database bdb
suffix "dc=my-domain,dc=com"
rootdn "cn=Manager,dc=my-domain,dc=com"
把my-domain改为你的“域名”,本文中并不需要真正的域名,只是ldap的一个容器,但为了ldap的其他服务,建议用你的真实域名。
这里定义了ldap的数据库和管理者。
这里还需要一个管理员密码,加入下面这行(密码111111):
rootpw {MD5}lueSGJZetyySpUndWjMBEg==
密码可以用slappasswd命令生成,slappasswd -h {MD5}
OK,ldap服务器配置完成了,可以重新启动一下ldap服务器了。
三、将用户账户信息添加到ldap数据库
Redhat Enterprice Linux 4自带了一组perl脚本来转换本地用户的信息。
相关工具也可以到下载
这些脚本默认位于/usr/share/openldap/migration/下
修改migrate_common.ph文件,我们的目的来说,只需要修改命名前缀的变量来使用条目的识别名就足够了,如下所示:
$DEFAULT_BASE = "dc=my-domain,dc=com"
然后执行:
migrate_base.pl > base.ldif
这是创建根项,并为 Hosts、Networks、Group 和 People 等创建第一级的组织单元(OU)
编辑 base.ldif,删除除下面之外的所有条目:
dn: dc=my-domain,dc=com
dc: my-domain
objectClass: top
objectClass: domain
dn: ou=People,dc=my-domain,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=my-domain,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
执行:
grep ldapuser /etc/group > group.ldapuser.in
./migrate_group.pl group.ldapuser.in > group.ldapuser.ldif
导出ldapuser组的信息,以同样方式到处其他组的信息
执行:
grep ldapuser /etc/passwd > passwd.ldapuser.in
./migrate_passwd.pl passwd.ldapuser.in > passwd.ldapuser.ldif
可以复制passwd文件为passwd.in后将passwd.in中系统自带的用户删除后作为脚本的输入参数,这样可以一次转换所有用户。不建议将系统自带用户导入ldap,这样做的好处是万一在ldap认证出现问题的情况下不至于连root账户也不能登录。
做完账户信息转换后即可以导入ldap数据了,执行:
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f base.ldif
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f group.ldif
ldapadd -x -D "cn=Manager,dc=my-domain,dc=com" -W -f passwd.ldif
这里的group.ldif和passwd.ldif对应的你的组信息和用户信息的文件,注base.ldif必须最先导入。
四、配置系统使用ldap认证系统用户
使用authconfig命令配置:
注若使用RHEL5.x 或 Cent OS 5.x 则使用setup命令,然后选择“Authentication Configuratio”
把以下选项选上:
Use LDAP
Use MD5 Passwords
Use Shadow Passwords
Use LDAP Authentication
Local authorization is sufficient(如果有此项)
选择下一步:
请勿选择使用TLS!
输入ldap服务器地址或主机名,若有一台以上ldap服务器则用空格隔开。
输入base dn:dc=my-domain,dc=com(参考base.ldif文件)
将passwd、shadow、以及group文件备份后清除已经导入的用户信息,再用id命令测试一下,确认用户信息正确。
OK!!大功告成!!
其他客户机只需执行行本文第四步即可!
注1:若ldap服务器使用主机名,客户端必需能解析到该主机!
注2:添加新用户可以先建立本地用户再参照本文第四步操作,加入ldap后再删除本地用户。
注3:若用户非数据库高手,编辑用户或组信息请务必使用ldapmodify命令,本人曾使用ldapphpadmin修改ldap数据库,结果,呵呵!!
注4:(2009-02-09)在RHEL
5.x和CentOS5.x 上执行启动ldap服务时会报错"bdb_db_open: Warning - No DB_CONFIG file
found in directory /var/lib/ldap",该错误不影响ldap验证服务;若一定要解决,执行以下命令即可:cp
/etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG ; chown
ldap:ldap /var/lib/ldap/DB_CONFIG
更新2009-1-20
添加管理用户帐号的脚本:
文本写了一个简单的创建用户帐号的脚本方便帐号管理。
文中以中文和"#"开头的是注释和说明:
注,编辑脚本时别忘了把“#!/bin/sh”放在脚本文件的首行!
#!/bin/sh
### Input the user account
if [ "$1" = "" ];then
printf "Please input the user account: "
read ans1
user=$ans1
echo "\n"
else
user=$1
fi
#提示用户输入用户名赋值给变量user
### make sure the username is unique
existuser=` id $ans1 2> /dev/null `
while [ "$existuser" != "" ]
do
echo "user $user already exist!"
printf "Please input another username: "
read ans3
user=$ans3
existuser=` id $ans1 2> /dev/null `
echo ""
done
检查输入的用户名是否唯一,如果已经存在则提示用户再次输入用户名并赋值给变量user
### adding user
useradd -g group1 -d /NFS/user/$user -m $user
passwd $user
#在本地文件里添加用户并设定用户密码,
#注1、这里的group1是指定默认组的组名,请自行更改
#注2、这里的/NFS/user/是从远程主机上mount过来的,用于配合automount服务并统一用户主目录使用,请自行更改
#注3、-m选项是当指定的用户主目录不存在时自动创建该目录,在大多数情况下这是默认选项,即不加该选项,系统会自动加上
sed -i "s/\/NFS\/user\/$user/\/home\/$user/g" /etc/passwd
cd /ldapsettings/
grep $user /etc/passwd > newuser.in
/usr/share/openldap/migration/migrate_passwd.pl newuser.in > newuser.ldif
ldapadd -x -D "cn=Manager,dc=dam,dc=com" -w 1234567 -f /ldapsettings/newuser.ldif
rm -f /ldapsettings/newuser.in
rm -f /ldapsettings/newuser.ldif
sed -i '/$user\:/d' /etc/passwd
sed -i '/$user\:/d' /etc/shadow
#修改用户的home目录,并将本地的帐号信息导入ldap数据库,删除临时文件,删除本地用户验证信息
更新2009-2-3
一直在网上找用ldap验证samba的文章。很多,但是都需要加入域,配置很麻烦,而且,samba毕竟和windows的域有太大差别了!
下文的配置其实只是让samba读取ldap数据库来代替读取sampasswd文件,仅此而已!
本文参考了下文,做了适当修改,并在CentOS 4.X 和CentOS 5.X 上测试成功:
使用openldap目录服务进行samba用户验证
samba可把用户信息存放到ldap目录服务器上,使用目录服务器上的用户数据进行用户验证。这样做的好处是:
1. 集中存放用户信息,多台Samba服务器可共用一套用户数据。
2. 当用户数量多时,采用ldap目录服务器可加快用户验证的速度。因为ldap目录服务是专门为读操作而优化的,搜索数据的速度是非常快的。
3. 用户可自由更改自已的密码,而不用经过系统管理员,可大大减轻系统管理员的工作量。
一、配置ldap服务
要
openldap能认识samba的用户信息,我们需在openldap服务器中导入samba.schema。该文件是不包含在openldap源码中
的,我们可在samba源码目录中的/examples/LDAP路径中找到该文件。把它拷贝到openldap的schema目录。接着编辑
slapd.conf文件,用include指令把samba.schema导入openldap。如:
到这里下载samba的源码包:
# See slapd.conf(5) for details on configuration options.
# This file should NOT be world readable.
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
#include /etc/openldap/schema/redhat/autofs.schema
include /etc/openldap/schema/samba.schema #导入samba.schema文件
# Allow LDAPv2 client connections. This is NOT the default.
allow bind_v2
重启ldap服务,使配置生效。
[root@linux5 ~]# service ldap restart
Stopping slapd: [ OK ]
Checking configuration files for slapd: config file testing succeeded
Starting slapd: [ OK ]
二、配置samba服务
下来我们要配置samba服务器了。打开smb.conf文件,添加以下内容:
# You may wish to use password encryption. Please read ENCRYPTION.txt,
# Win95.txt and WinNT.txt in the Samba documentation. Do not enable this
# option unless you have read those documents
security = user #如果原来不是user,请改成user,因为我原来用的是share
encrypt passwords = yes
; passdb backend = smbpasswd guest #取消smbpasswd验证
ldap admin dn = "cn=Manager,dc=my-domain,dc=com" #指定管理员,请参考slapd.conf文件
passdb backend = ldapsam:ldap://192.168.0.7 #指定用户验证的ldap目录服务器的IP地址或主机名
ldap user suffix = dc=samba,dc=my-domain,dc=com #用户信息存放的目录路径
ldap delete dn = no #不允许删除dn
ldap suffix = dc=my-domain,dc=com #指定搜索后缀
存盘退出,重启smb服务。运行以下命令,把cn=Manager,dc=my-domain,dc=com管理员的密码“123456”保存到secrets.tdb文件中,以便samba服务器与openldap服务器进行通信。
[root@linux5 ~]# service smb restart
Shutting down SMB services: [ OK ]
Shutting down NMB services: [ OK ]
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
[root@linux5 ~]# smbpasswd -w 123456
Setting stored password for "cn=Manager,dc=my-domain,dc=com" in secrets.tdb #成功保存的提示信息
千万注意!!这里的密码“123456”,就是slapd.conf文件里指定的管理员的密码!
配置完成,使用smbpasswd命令就可把用户信息保存到ldap目录服务器上了。
[root@linux5 ~]# smbpasswd -a dwang
New SMB password:
Retype new SMB password:
Added user dwang. #成功添加用户
三、设定ldap服务来维护samba帐号
到此为止,使用ldap目录服务器进行Samba用户验证已配置完成。但现在还是要管理员在samba服务器上使用smbpasswd命令为用户维护密码。从维护工作量和保密的角度出发,由用户自已维护自已的密码是一种最好的方法。具体设置方法是这样的:
通过目录服务器的权限管理,我们也可把test用户密码属性设置成只有 dn是cn=dwang,dc=samba,dc=it,dc=com的用户和目录服务器管理员才能修改。要达到该项果,请把以下ACL加入到 slapd.conf中。
access to attrs=sambaLMPassword
by dn="cn=Manager,dc=newavetech,dc=com" write
by anonymous auth
by self write
by * none
access to attrs=sambaNTPassword
by dn="cn=Manager,dc=newavetech,dc=com" write
by anonymous auth
by self write
by * none
重启openldap服务器使配置生效。
用smbpasswd命令就能修改用户的密码了,不过别忘了原始密码,否则又得劳驾管理员了!
根据密码复杂度要求,用户自己设的密码至少要有6位,以root权限执行没此要求。
(2009-02-11)
偶然发现了一款LDAP的管理工具LDAP Account Manager,主页在:
因为我使用的是CentOS 5.2,直接下载rpm包安装:ldap-account-manager-2.5.0-0.fedora.1.noarch.rpm
安装需求:LAM是用php编写的,基于web管理。所以apache、php是不能少的,还需要个别的rpm包稍后介绍,只要你有CentOS的光盘就无需担心。
一、安装LAM
#rpm -ivh ldap-account-manager-2.5.0-0.fedora.1.noarch.rpm
安装完后在文件夹/var/www/html/下会有一个lam文件夹。
#cd /var/www/html/lam/config
#cp cp config.cfg_sample config.cfg
#cp lam.conf_sample ldapserver1.conf
说明:
1、config.cfg是LAM的通用配置文件
2、ldapserver1.conf是LAM的服务器配置文件,如果你有多台ldap服务器就需要多复制几个文件,例如:
#cp lam.conf_sample ldapserver2.conf
#cp lam.conf_sample ldapserver3.conf
#chown -R apache:apache /var/www/html/lam
这里的ldapserver?文件名可任意,它就是你在使用LAM时看到的配置文件,建议使用ldapserver的主机名。
二、配置LAM
用浏览器访问LAM,在浏览器里打开
有可能出现如下提示:
##########################################
Your PHP has no LDAP support!
Please install the LDAP extension for PHP.
##########################################
##########################################
Please increase the "memory_limit" parameter in your php.ini to at least "64M".
Your current memory limit is 16M.
##########################################
上面的问题缺少了php-ldap包,在CentOS5.2里,执行下面命令即可:
#rpm -ivh php-ldap-5.1.6-20.el5.i386.rpm
下面的问题是PHP内存限制的问题,修改PHP配置文件即可,执行如下命令:
#sed -i '/memory_limit/s/.*/memory_limit = 64M/' /etc/php.ini
以上命令是将文件/etc/php.ini中含有memory_limit的那行设定改为“memory_limit = 64M“,也可以用vi命令编辑。
安装完rpm包和修改了配置文件后重启apache服务器:
#service httpd restart
再次用浏览器访问LAM,在浏览器里打开,一切正常。
在右上角选择"LAM configuration"-->"Edit general settings",密码是lam,进去后重新设定密码;其他设定我没作修改。
回到主页,在右上角选择"LAM configuration"-->"Edit server profiles";在下拉框里选择你复制的配置文件,进入配置。
默认密码为“lam“,接下来就是根据你的ldap服务器的设定在修改你复制过的配置文件,进去后别忘了修改密码哦!配置完成。
下面是我认为有必要修改的一些选项:
################################
服务器地址
树状结构后缀
用户: 最小UID号
时区
组: 最小GID号
缺省语言
合法用户列表
编辑帐号类型:里面的所有LDAP后缀
################################
三、使用LAM
在LAM主页选择你要维护的配置文件,输入密码。开始体验便捷的ldap帐号管理吧!
注:这里的密码不是上文修改过的LAM密码,是在LDAP server上配置LDAP配置文档里的管理员密码哦!
(2009-03-06)
四、配置squid适用openldap验证
squid可以使用LDAP目录服务器上的系统用户数据进行用户验证。这样做的好处是:
1. 集中存放用户信息,多台squid服务器可共用一套用户数据。
2. 当用户数量多时,采用ldap目录服务器可加快用户验证的速度。因为ldap目录服务是专门为读操作而优化的,搜索数据的速度是非常快的。
3. 不再需要维护squid帐号文件,只需要维护Linux系统帐号,可减少出错几率和减少系统管理员的工作量。
为配置成功,先将squid配置成能使用password file进行验证(网上文章太多了,而且很容易)
配置完以后,squid文件必定包含类似下面2行语句,将以下内容:
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/squid.passwd
acl idtnw_aclauth proxy_auth REQUIRED
替换成类似下面的语句:
auth_param basic program /usr/lib/squid/squid_ldap_auth -b
"dc=newavetech,dc=com" -D "cn=Manager,dc=newavetech,dc=com" -w "123456"
-f "uid=%s" -h ldapserver1.newavetech.com
auth_param basic children 5
auth_param basic realm Your Organisation Name
auth_param basic credentialsttl 5 minutes
acl idtnw_aclauth proxy_auth REQUIRED
说明:
-b "dc=newavetech,dc=com" 该选项根据你的系统里的/etc/openldap/slapd.conf文件修改
-D "cn=Manager,dc=newavetech,dc=com" 该选项根据你的系统里的/etc/openldap/slapd.conf文件修改
-w "123456" 该选项根据你的系统里的/etc/openldap/slapd.conf文件中“rootpw {MD5}VWjZk4C6Geu9wuO2vN+eVQ==”指定的密码
-h ldapserver1.newavetech.com 该选项指定了ldap服务器
重启squid服务器即可,linux系统用户和密码就和squid是一致的了。
(2009-03-06)
怎样让系统自动创建用户的home目录
假设系统管理员已经掌握PAM配置文件的使用,并且了解在服务器所在的环境当中,服务器认证配置需要哪些其他类型的用户信息和用户认证。以下提供的例子是基于一个使用ldap验证的用户,作为用户信息或者用户认证的系统。
以
下步骤包括手工编辑服务器主要PAM认证配置文件/etc/pam.d/system-auth.在做任何改变之前,你应当备份一下/etc/pam.d
/system-auth,并且保持一个root登陆窗口,以防止因输入错误或者配置错误时可以恢复到原先的system-auth文件。记住,运行认证
配置工具,例如authconfig-tui,会有可能造成手工在system-auth做的更改丢失。所以在更改了system-auth文件并且测试
成功后应当做一个更改后的备份。
假设ldap服务已经正确配置且在服务器上正常验证用户帐号。在/etc/pam.d/system-
auth文件的session部分添加一行,以使用PAM模块pam_mkhomedir.so
。如果用户认证成功,用户的home目录没有存在,这个模块将自动创建用户的home目录。
session required pam_mkhomedir.so skel=/etc/skel umask=0077
将
上面内容加到system-auth文件的session部分的。skel=/etc/skel选项告诉pam_mkhomedir.so拷贝/etc
/skel下的文件到用户的home目录,就像操作系统普通用户一样。umask=0077选项让pam_mkhomedir.so以700权限创建
home目录,就像操作系统普通用户一样。
注意:创建用户home目录的父目录必须存在,否则pam_mkhomedir.so将不能创建用户home目录。
注意:在测试中将看到,如果用户通过FTP第一次登录系统,他们的home目录可能不会被创建。如果第一次登录出现问题,请使用其他的登录方式。
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
Kernel 2.6.18-128.ELsmp on an i686
su - dwang
Creating directory '/homes/dwang'.
Creating directory '/homes/dwang/.mozilla'.
Creating directory '/homes/dwang/.mozilla/plugins'.
Creating directory '/homes/dwang/.mozilla/extensions'.
如果域用户通过X服务的prefdm第一次登录系统, 它的home目录也会被pam_mkhomedir.so成功创建
阅读(1060) | 评论(0) | 转发(0) |