现在的位置: 首页 > 综合 > 正文

手把手教您配置Liunx目录服务器

2012年10月04日 ⁄ 综合 ⁄ 共 11762字 ⁄ 字号 评论关闭
——目录服务器的重要性
【IT168 专稿】
近几年,随着LDAP(Light Directory Access Protocol,轻量级目录访问协议)技术的兴起和应用领域的不断扩展,目录服务技术成为许多新型技术实现信息存储、管理和查询的首选方案,特别是在网络资源查找、用户访问控制与认证信息的查询、新型网络服务、网络安全、商务网的通用数据库服务和安全服务等方面,都需要应用目录服务技术来实现一个通用、完善、应用简单和可以扩展的系统。

    对于任何一家大IT网络的企业来说,IT系统中的目录服务功能是必不可少的。如果一个在全国有多个分支机构的企业,已经有了一个内部网络系统,每一个分支机构都有一个局域网,局域网之间通过专线或者VPN通道连接在一起,那么,如何将网络中的资源和信息有效地管理起来呢?通常,这个企业可以在每一个分支机构或者每个城市建立一个目录服务器,任何地方的员工连接到本地目录服务器就可以访问到目录树中所有的信息,在目录服务器之间复制目录信息,以保持同步。比如,人事部门看到的人员目录与财务部门、设备管理部门看到的人员目录是完全一致的,他们所使用的应用系统无须再建立另一套目录结构。当然,这一切都是要经过身份验证的。

    目录服务有着如此重要的作用,但在过去,企业通常采用基于Windows的目录服务器,Linux在这方面相形逊色。作为Windows的核心内容,目录服务被企业IT人员认为是Windows与Linux相比最具竞争力的部分,也成为Linux产品架构中的软肋。随着Red Hat Enterprise Linux 4.0出现,这个情况已经改变了。RHEL 4 内附的LDAP 服务器为OpenLDAP 2.2.13-2 版,OpenLDAP 2.x包括数个重要功能:

    1. 支持LDAPv3 - OpenLDAP 2.0 除了其它改善外还支持SASL(SimpleAuthentication and Security Layer)、TLS(Transport Layer Security)以及SSL(Secure Sockets Layer)。LDAPv2 之后通讯协议很多的改变都是为了加强LDAP 的安全性。

    2. 支持IPv6 - OpenLDAP 支持新一代的因特网通讯协议第6 版。

    3. LDAP Over IPC - OpenLDAP 能够使用IPC 在系统内进行通讯。这可以避免使用网络通讯以增加安全性。

    4. 使用新的应用程序界面: 改善程序设计人员联机及使用程序的方法。

 

LDAP协议简介
本文将以Red Hat Enterprise Linux 4.0 为例,介绍在Linux平台使用OpenLDAP上建立目录服务器

一、LDAP协议简介

    LDAP(轻量级目录访问协议, Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP之上的访问协议—LDAP。 LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中表的记录;条目是具有区别名DN (Distinguished Name)的属性(Attribute),DN是用来引用条目的,DN相当于关系数据库表中的关键字(Primary Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP系统结构图见图1.
  

 

图1 LDAP系统结构图

    LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织(organization)(o=Acme)或组织单元(organizational units) (ou=People)。一个组织单元可能包含诸如所有雇员、 大楼内的所有打印机等信息。

    此外,LDAP支持对条目能够和必须支持哪些属性进行控制,这是有一个特殊的称为对象类别(objectClass)的属性来实现的。该属性的值决定了该条目必须遵循的一些规则,其规定了该条目能够及至少应该包含哪些属性。例如: inetorgPerson对象类需要支持sn(surname)和cn(common name)属性,但也可以包含可选的如邮件,电话号码等属性。dn :一条记录的位置;dc :一条记录所属区域;ou :一条记录所属组织;cn/uid:一条记录的名字/ID。OpenLdap是一个正在得到日益普遍应用的开源软件,和LADP完全兼容。

 

二、安装OpenLDAP服务器

    如果在系统安装时已经把安装上了,那么我们就可以直接对OpenLDAP进行配置使用了。否则,可以通过Rat Het Enterprise Linux图形界面下的“添加/删除应用程序”工具进行安装。具体方法是,选择“主选单”→“系统设置”→“添加/删除应用程序”,在弹出的界面中选中 “网络服务器”的“OpenLDAP-server”,单击“更新”即可,见图2。
 

图2 安装OpenLDAP 服务器软件

    如果你使用的是其他版本的Linux,那么通常要安装以下软件包:OpenLDAP、    OpenLDAP-servers、    OpenLDAP-clients、    OpenLDAP-devel ,OpenLDAP-2.0是必要套件,一定要先安装;OpenLDAP-servers是服务器套件;OpenLDAP-clients是操作程序套件;OpenLDAP-devel是开发工具套件。

 

 

三、配置OpenLDAP 服务器

    以RedHat Linux 4所为例字介绍OpenLDAP 服务器配置文件。主要文件见表1。
 

 

表1

    1. 建立Linux用户账号

    使用文本编辑建立一个文本文件,文件名称myusers.list 内容如下:
    user1 123456
    user2 123456
    user3 123456
    user4 123456
    user5 123456
    user6 123456
    user7 123456
    user8 123456
    user9 123456

    注意:第一个字段为使用者名称;第二个字段为预设密码,中间必须用空格隔开。然后使用文本编辑建立另外一个文本文件,文件名称add-users.sh内容如下:
    #!/bin/bash
    for i in `awk '{print $1}' users.list `
    do
    useradd $i
    grep "\<$i\>" users.list | awk '{print $2}' | passwd --stdin $i
    done
    建立Linux用户账号:
    #chmod 775 add-users.sh
    #./add-users.sh

    2.修改缺省配置文件:/etc/OpenLDAP/slapd.conf,请把蓝色部分按照您的具体情况填写。
    database bdb
    suffix "dc=myexample,dc=com"    #一条记录所属区域#
    rootdn "cn=Manager,dc=example,dc=com"
    rootpw 1234567                 #定义LDAP根管理员的密码

    3.将原有Linux 账号转为LDIF 文件
    原有Linux 服务器上有user1-user9 这些使用者账号,密码均为123456;面便是转换的步骤:
    # cd /usr/share/OpenLDAP/migration  #转换文件的目录#
    # vi migrate_common.ph
    $DEFAULT_MAIL_DOMAIN = "myexample.com";
    Default base
    $DEFAULT_BASE = "dc=myexample,dc=com";
    # ./migrate_passwd.pl /etc/passwd > /worktmp/user.ldif
    # ./migrate_group.pl /etc/group > /worktmp/group.ldif

    4. 建立example.ldif,ou_people.ldif, ou_group.ldif三个文件
    #cat example.ldif
    dn: dc=example,dc=com
    dc: example
    objectClass: dcObject
    objectClass: organizationalUnit
    ou: example.com
    #cat ou_people.ldif
    dn: ou=people, dc=example, dc=com
    objectclass: organizationalunit
    ou: people
    #cat ou_group.ldif
    dn: ou=group, dc=example, dc=com
    objectclass: organizationalunit
    ou: group

    5. 转换原有Linux 账号至OpenLDAP服务器上:
    #slapadd -vl example.ldif
    added: "dc=example,dc=com" (00000001)
    #slapadd -vl ou_people.ldif
    added: "ou=people,dc=example,dc=com" (00000002)
    #slapadd -vl ou_group.ldif
    added: "ou=group,dc=example,dc=com" (00000043)
    #slapadd -vl user.ldif
    #slapadd -vl group.ldif

 

 

四、启动OpenLDAP服务器

    #chown ldap.ldap /var/lib/ldap/*  #把/var/lib/ldap/目录内的档案变更拥有者及群组为ldap。

    然后可以通过Rat Het Enterprise Linux图形界面下的选择“主选单”→“系统设置”→“服务器设置”-“服务”,在弹出的界面中选中ldap”,单击“重新启动”即可,见图3。
 

 

图3 服务器启动界面

    利用ldapsearch 指令可搜寻LDAP 服务器的数据,若是可看到以下的数据,代表整个设定正确无误。

    # ldapsearch -x -b "dc=example,dc=com"
    ………
    # user9, Group, myexample.com
    dn: cn=user9,ou=Group,dc=myexample,dc=com
    objectClass: posixGroup
    objectClass: top
    cn: user9

    userPassword:: e2NyeXB0fXg=
    gidNumber: 508
    ………

监控OpenLDAP服务器

 

1.使用uptime命令

    使用uptime命令可以查看系统负载,系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:没有在等待I/O操作的结果、它没有主动进入等待状态(也就是没有被调用、没有被停止。

    # uptime
    9:51pm up 3 days, 4:43, 4 users, load average:6.02, 5.90, 3.94

    上面命令显示示最近1 分钟内系统的平均负载是6.02,在最近5分钟内系统的平均负载是5.90,在最近的15 分钟内系统的平均负载是3.94。一共四个用户。通常来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那幺就表示这台机器的性能有严重问题。对于上面的例子来说,由于笔者系统使用是双CPU,那幺其每个CPU的当前任务数为:6.02/2=3.01。这表示该服务器的性能是可以接受的。

    2.使用cron命令进行定时监测系统负载:

    cron是一个守护进程,它提供定时器的功能,让用户在特定时间执行命令,首先使用命令:“chkconfig -list|grep crond”查看该服务是否启动,然后使用命令:
    # crontab -e
    此时打开一个vi编辑器:输入以下内容:
    #30 * * * * * uptime
    存盘退出,这样每隔十五分钟就记载其平均负载,这样累计一天,我们就可以得到最近一天的平均负载。

    3. OpenLDAP进程的监控

     Linux系统提供了ps、top等察看进程信息的系统调用,通过结合使用这些系统调用,我们可以清晰地了解进程的运行状态以及存活情况,从而采取相应的措施,来确保Linux系统的性能。它们是目前在Linux下最常见的进程状况查看工具,是随 Linux版本发行的,安装好系统之后,用户就可以使用。这里以ps命令为例,ps命令是最基本同时也是非常强大的进程查看命令。利用它可以确定有哪些进程正在运行及运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。ps命令可以监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,图5是ps -ef|grep ldap命令输出的例子。说明其中PID为3653是主进程。
 

图5 OpenLDAP服务器的进程

    4.端口的监控

    轻型目录访问协议默认使用389端口。可以使用命令:
    # netstat -an | grep 389
    tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN
OpenLDAP服务器自动启动和安全设定

1.自动启动OpenLDAP服务器

    如果希望ldap每次启动都能自动运行,可以用ntsysv设置。以root权限运行命令:
    #ntsysv
 

图6启动OpenLDAP提供网络服务

    打开如图6 所示的窗口,在ldap服务选项加上*(用空格键),然后重新启动系统,这样系统会启动ldap目录服务。

    2.使用访问控制(Access Control)实现用户认证

    修改OpenLDAP的配置文件,增加控制模块方法如下:
    # vi /usr/local/etc/OpenLDAP/slapd.conf
    access to attr=userPassword
    by anonymous auth
    by self write
    by * none
    access to *
    by self write
    by users read

    这里访问控制用于禁止匿名查询,而认证用户可以修改自己的所有属性,除了userPassword属性,允许查询它人的信息条目。上面的每一行都是必须的,如果没有“by anonymous auth”,需要认证的用户不能完成认证,因为它查询不到密码。所以“auth”在这里的作用就是允许匿名用户可以读到密码,但只能用于验证,而不能用于其它的用途,这就保证了密码属性的安全。

    另外前面介绍/etc/OpenLDAP/slapd.conf文件设定密码时,使用了明文,主要是为了调试方便,实际工作时应当使用加密方法。最新版本的OpenLDAP支持三种加密方法:MD5、CRYPT、SSHA。我们不想将rootpw 存储在服务器上的明文内,所以我们改用散列。有几种普遍使用的散列方法可通过slappasswd 命令来实现,包括SHA、SSHA、MD5、和CRYPT在内。安全方面CRYPT最差。SSHA是默认方法,MD5也不错。使用slappasswd 可以生成一个很好的散列rootpw:

    $ slappasswd
    New password:
    Re-enter new password:
    {SSHA}Lr7P++EoH6GpIS4GZ36vkV4R422RuW7R
    现在复制粘贴这个很好的新散列到/etc/ldap/slapd.conf内: 
    rootpw        {SSHA}Lr7P++EoH6GpIS4GZ36vkV4R422RuW7R

    这是一个永久设置,很适合用在小型的简单的网络上。更好的解决方案就是创建一个LDAP记录,该记录定义了LDAP管理员,还为LDAP管理员使用 slapd.conf中的ACLs (access control lists)定义了访问权限。尽量少将安全敏感的信息存储在目录中.如果非存不可.一定要编辑ACL严格的控制访问权限如userPassword等.多数情况下目录服务还要主要是给其他的服务提供数据存储.这样的话应该让每个服务器绑定到不通的DN,同时在ACL中赋予他们较高的权限.而不能让所有的服务都使用rootdn来绑定。

管理OpenLDAP服务器
1. 命令行下的管理

    Linux系统管理员更加喜欢使用命令,一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。即使是通过一条缓慢的调制解调器线路,它也能操纵几千公里以外地远程系统。 OpenLDAP提供了在Linux命令行下的访问工具集。包括ldapsearch,ldapadd,ldapmodify, ldappassword,ldapdelete等必要的工具。

    2.使用phpldapadmin管理OpenLDAP服务器

    phpldapAdmin 是免费的工具,可以管理OpenLDAP服务器,使用它透过浏览器就可管理OpenLDAP服务器。phpldapAdmin是一个开源工具,官方主页:http://phpldapadmin.sourceforge.net/ ,最新版本:0.9.7.2 ,下载安装步骤:
    #cd  /var/www/html/
    # wegt http://jaist.dl.sourceforge.net/sourceforge/phpldapadmin/phpldapadmin-0.9.7.2.tar.gz
    #gunzip phpldapadmin-0.9.7.2.tar.gz
    #tar vxf phpldapadmin-0.9.7.2.tar
    #cd phpldapadmin-0.9.7.2/config
    #cp config.php.example config.php
    修改phpMyadmin配置文件:
    ## vi config.php
    $servers[$i]['host'] = 'ldap.localhost';
    $servers[$i]['base'] = 'dc=example,dc=com'; 
    $servers[$i]['login_pass'] = 'secret1234567 '; #前面定义的服务器根管理员的密码
    然后在Linux 浏览器服务器的URL栏目输入:http://主机/phpldapadmin ,即可。界面见图7。当然也可以使用IP地址。
 

图7 phpMyadmin管理OpenLDAP界面

    除了phpMyadmin还有两个管理工具:ldapbrowser,官方网址:http://www-unix.mcs.anl.gov/~gawor/ldap/ ,最新版本:282b2,ldapbrowser是纯JAVA的程序,可跨平台运行,在开源的程序中,是最优秀的一个。缺点是不能浏览服务器端的 schema对象,从而限制了条目编辑(添加)的能力。其次,由于JAVA对LDAP的访问方式在添加时,必须预先生成一个实现DirContext接口的类,因此,这也令订制型的添加操作在JAVA实现时相当困难。ldapadministrator官方网址:http://www.ldapadministrator.com/  ,最新版本:3.3,ldapadministrator是一个windows的收费程序,试用一个月。Ldapadministrator除了具备ldapbrowser的功能外,在条目编辑上的功能大为增强

OpenLDAP在Linux上集群的应用

OpenLDAP在Linux上集群的应用

   OpenLDAP在该系统的网络应用体系中用于对所有应用提供统一的身份认证服务,还包括如邮件路由、地址、联系人信息等其它信息的查询。LDAP作为一种特殊的数据库,通过对读取、查询操作进行特别的优化和处理,以保证在查询速度方面的优势,所以特别适合用来统一企业的各种认证服务,从而规范各种业务系统的同一登录身份和口令。当然,它的缺点和优点一样明显,比如不善于update、insert等操作,但是如果把它作为中央认证数据库,则正好可以利用它的长处而回避它的弱点。

    由于系统采用了LDAP作为所有应用的中央认证数据库,一旦该LDAP服务器失效,则系统网络环境中所有依赖于该数据库的应用都会受到影响,甚至停止提供相应的服务。为了避免这种情况的发生,就要通过两台LDAP服务器建立一个高可靠性的认证数据库集群,同时对其它应用系统提供统一的数据库访问网络接口。
总结:

    以上是Linux下使用OpenLDAP 建立目录服务器,其实在红帽软件公司推出目录服务器之前,Linux的平台理论上是可以实现目录服务功能的,但是,Linux的目录服务功能很多都是由免费开源软件包帮助实现,并没有专门的公司来负责开发和维护支持,因此,很多企业用户都对其心存担忧。在企业的信息系统中,最重要的就是要系统各方面实现无缝集成。很多企业通常用的都是Windows操作平台、Oracle数据库,以及Windows目录服务器。即使他们采用的是Linux平台,由于 Linux之前没有专业的公司提供专门的目录服务器产品,因此这些企业在目录服务器上还是会选择Windows。这样一来,考虑到Linux平台与 Windows目录服务器无缝连接的问题,企业在选择平台时也会很慎重。因此,Linux现在推出自己的目录服务器,可以完善其产品结构,系统各方面可实现无缝集成,将整个产业链向前推动。

    主流的LDAP服务器还有Sun Java System Directory Server和IBM Directory Server、Domino,使用它们同样可行,配置也是大同小异。其中Domino、Sun Java System Directory Server还可以在其他平台运行。

Linux操作系统打包命令使用技巧

  【IT168 服务器学院】本人在Unix系统业务使用(特别是数据管理与备份)中,经过一番研究、整理后,充分利用Unix系统本身的命令tar、cpio和compress等来做到打包和压缩,使之充当类似DOS下的压缩软件,同时在Unix系统中亦具有通用性。
  在Unix系统中,是先通过cpio或tar将众多的文件打包成一个文件库后,再用compress将文件库压缩来达到目的的。下面分别以cpio和tar来说明使用的方法和步骤。
  一、cpio
  1.文件或目录打包。
  打包有如下多种情况:
  A)含子目录打包:
  find /usr/lib -print|cpio -o〉/u0/temp1.cpio
  将/usr /lib目录下的文件与子目录打包成一个文件库为/u0/temp1.cpio。
  若通过-o选项来打包整个目录下的所有文件与子目录,常先利用find目录名-print来找出所有文件与子目录的名称,通过管道“|”传给cpio打包。
  B)不含子目录的打包:
  ls /usr/lib|cpio -o〉/u0/temp1.cpio
  将/usr/lib目录下的文件(不含子目录下的文件)打包成一个文件库为/u0/temp1.cpio。
  C)特定文件打包:
  可利用文本搜索命令grep与管道配合,可以排除或选择特定类型的文件传给cpio打包。如:ls /usr/lib/*.c|cpio -o〉/u0/temp1.cpio
  或ls /usr/lib|grep ′.c$′|cpio -o〉/u0/temp1.cpio
  意思均为找出/usr/lib目录下以.c结尾的文件予以打包。
  又如:ls /usr/lib|grep abcd|cpio -o〉/u0/temp1.cpio ,其意为找出/usr/lib目录下文件名中含有abcd字符的文件予以打包。
  ls /usr/lib|grep -v abcd|cpio -o〉/u0/temp1.cpio,其意为找出/usr/lib目录下文件名中不含 abcd 字符的文件予以打包。-v选项在grep命令中的意思是排除含有字符串的行列。
  如此,可充分利用Unix的管道和一些命令的强大功能来实现文件的打包。
  2.压缩:
  文件打包完成后,即可用Unix中的compress命令(/usr/bin下)压缩打包文件。对一般的文本文件,压缩率较高,可达81%。
  compress /u0/temp1.cpio则将文件库/u0/temp1.cpio压缩为/u0/temp1.cpio.Z(自动添加.Z并删除/u0/temp1.cpio )。
  3.解压:
  uncompress /u0/temp1.cpio.Z则自动还原为/u0/temp1.cpio。
  4.解包展开:
  将按原目录结构解包展开到当前所在目录下。若以相对路径打包的,当解包展开时,也是以相对路径存放展开的文件数据;若以绝对路径打包的,当解包展开时,也是以绝对路径存放展开的文件数据。因此注意若为相对路径,应先进入相应的目录下再展开。
  cd /u1
  cpio -id〈/u0/tmp1.cpio则将/u0/temp1.cpio解压到/u1下(这里假设temp1.cpio以相对路径压缩)。
  若加u选项,如cpio -iud〈/u0/temp1.cpio则文件若存在将被覆盖,即强制覆盖。
  cpio -id〈/u0/temp1.cpio *.c 则展开其中的*.c文件,类似于DOS系统中的Pkzip软件中Pkunzip -d temp1.zip解包功能。
  5.显示:
  cpio -it〈/u0/temp1.cpio [*.c] 显示文件库内的文件名称,类似于DOS系统中的Pkzip软件中Pkunzip -vbnm temp1.zip功能。
  二、tar
  1.文件或目录打包:
  tar -cvf /u0/temp2.tar /usr/lib
  将/usr/lib目录下的文件与子目录打包成一个文件库为/u0/temp2.tar。
  tar -cvf /u0/temp2.tar /usr/lib *.c *.f
  将/usr/lib目录下的*.c *.f等文件(不含子目录)打包。
  注意:如果指定文件如*.c *.f或*.*,则打包时均不含子目录。如果指定为.或*,则含子目录。
  2.压缩:
  同上:compress /u0/temp2.tar压缩为/u0/temp2.tar.Z
  3.解压:
  uncompress /u0/temp2.tar.Z则还原为/u0/temp2.tar。
  4.解包展开:
  tar -xvf /u0/temp2.tar
  若以相对路径打包的,解包时,以相对路径存放展开的文件数据;若以绝对路径打包的,解包时,以绝对路径存放展开的文件数据。
  若指定展开的文件名,须注意文件的目录路径。
  5.显示:
  tar -tvf /u0/temp2.tar 显示文件库内的文件名称。当指定文件名时,亦须注意文件的路径。
  相对来说这两个命令各有优缺点。
  1)tar速度比cpio慢,且不能跨越两份存储媒体,但文件格式几乎在所有的Unix系统中都能通用,且使用简便。
  2)cpio则由于可通过管道功能,使得其打包时的文件选择、排除功能非常强,且能跨越多份媒体,并能备份特殊的系统文件。

  另外,压缩命令compress比DOS下的Pkzip的压缩率要低些。经测试,在一个目录下527个文本文件共15.7MB,在Unix打包后用compress压缩,大小为 2.1MB;相同的文件拷到DOS系统用Pkzip压缩,则大小为1.4MB。

抱歉!评论已关闭.