Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1027187
  • 博文数量: 361
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 1759
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-22 23:18
个人简介

学海无涯 个人blog lnmps.com 新站

文章分类

全部博文(361)

文章存档

2017年(1)

2015年(2)

2014年(55)

2013年(303)

分类: LINUX

2014-04-26 16:19:54

本文使用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) |
给主人留下些什么吧!~~