LDAP认证在Linux中

Linux中的LDAP认证

这个howto将向您展示如何将用户存储在LDAP中,并对其中的某些服务进行身份验证。 我不会显示如何安装特定的包,因为它是分配/系统依赖的。 我将专注于对用户进行LDAP认证/存储所需的所有组件的“纯”配置。 Howto以某种方式假定您正在从常规的passwd / shadow身份验证中迁移,但它也适合从头开始的人员。

要求

介绍

我们想要实现的是让我们的用户存储在LDAP中,对LDAP进行身份验证(直接或pam),并且有一些工具可以以人类可理解的方式进行管理。

通过这种方式,我们可以使用所有的软件,它具有ldap支持或回退到PAM ldap模块,该模块将充当PAM-> LDAP网关。

有关LDAP概念的更多信息,请参见维基百科: LDAP维基百科

配置OpenLDAP

OpenLDAP由slapd和slurpd守护进程组成。 这个如何覆盖一个没有复制的LDAP服务器,所以我们将仅关注slapd。 我还假设你已经安装并初始化了openldap安装(取决于系统/功能)。 如果是这样,我们去配置部分。

在我的系统(Gentoo)上,openldap的配置存储在/ etc / openldap中 ,我们对/etc/openldap/slapd.conf文件感兴趣 。 但首先我们必须为LDAP管理员生成一个密码,将其放入配置文件中:

slappasswd -h {md5}
配置如下所示:
include         /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allow bind_v2

pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

modulepath /usr/lib/openldap/openldap

access to attrs=userPassword
by dn="uid=root,ou=People,dc=domain,dc=com" write
by dn="cn=Manager,dc=domain,dc=com" write
by anonymous auth
by self write
by * none

access to dn.base="" by * read

access to *
by dn="cn=Manager,dc=domain,dc=com" write
by * read


database bdb
suffix "dc=domain,dc=com"
rootdn "cn=Manager,dc=domain,dc=com" rootpw {MD5}Tk1sMytv5ipjr+Vhcf03JQ==

directory /var/lib/openldap-data
index objectClass eq

记住要改变你的需要的Postfix和路径。

这些是基本选项,一些基本ACL需要用户更改passwrods。 如果您需要更多功能,请阅读有关openLDAP的手册。 现在当我们有一个适用于slapd的配置时,我们可以启动守护进程:

/etc/init.d/slapd start

请记住在配置文件中有这样的东西,负责传递给slapd的参数(路径应该指向slapd.sock):

OPTS="-h 'ldaps:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

现在我们可以测试openldap是否运行正常。 我们目录中还没有任何数据,但是我们可以尝试绑定为cn = Manager,dc = domain,dc = com。 当您被要求输入密码时,您应该使用您生成的密码(当然是纯文本版本:) :)

ldapsearch -D "cn=Manager,dc=domain,dc=com" -W

迁移/添加数据到目录

现在,当我们运行LDAP服务器时,我们必须填写数据,创建或迁移条目。 我将向您展示如何从常规/ etc / passwd / etc / shadow / etc / groups迁移现有条目

第一步是根据需要配置mogrationtools。 gentoo上的配置文件位于/usr/share/migrationtools/migrate_common.ph中

一般来说,您只需要更改这些:
$DEFAULT_BASE = "dc=domain,dc=com";
$EXTENDED_SCHEMA = 1;

现在您已准备好迁移数据(实际上,即使没有导出命令也可以):

export ETC_SHADOW=/etc/shadow
./migrate_base.pl > /tmp/base.ldif
./migrate_group.pl /etc/group /tmp/group.ldif
./migrate_hosts.pl /etc/hosts /tmp/hosts.ldif
./migrate_passwd.pl /etc/passwd /tmp/passwd.ldif

现在我们有LDAP服务器所理解的格式的数据。 请使用文本编辑器打开一个文件,以用于语法。 之后,我们可以从ldifs中添加数据。

ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/base.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/group.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/passwd.ldif
ldapadd -D "cn=Manager,dc=domain,dc=com" -W -f /tmp/hosts.ldif

您可以尝试搜索一些数据:

ldapsearch uid=foouser

客户端配置

通过客户端我的意思是机器,它连接到LDAP服务器以获得用户和授权。 它也可以是机器,ldap服务器运行。 在这两种情况下,我们必须编辑三个文件: /etc/ldap.conf,/etc/nsswitch.conf和/etc/pam.d/system-auth

我们从ldap.conf开始,ldap的客户端:

BASE    dc=domain, dc=com
scope sub
suffix "dc=domain,dc=com"

## when you want to change user's password by root
rootbinddn cn=Manager,dc=domain,dc=com

## there are needed when your ldap dies
timelimit 5
bind_timelimit 5

uri ldap://ldap.domain.com/
pam_password exop

ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid

nss_base_passwd ou=Computers,dc=cognifide,dc=pl
nss_base_passwd ou=People,dc=cognifide,dc=pl
nss_base_shadow ou=People,dc=cognifide,dc=pl
nss_base_group ou=Group,dc=cognifide,dc=pl
nss_base_hosts ou=Hosts,dc=cognifide,dc=pl

现在是nsswitch.conf和pam的时候了

将它们添加到nsswitch.conf中:
passwd: files ldap
shadow: files ldap
group: files ldap
并更改系统认证(或者你有什么要登录,sshd等)到:
auth       required     pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so

account sufficient pam_unix.so
account sufficient pam_ldap.so
account required pam_ldap.so

password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password sufficient pam_unix.so nullok md5 shadow use_authtok
password sufficient pam_ldap.so use_first_pass
password required pam_deny.so

session required pam_limits.so
session required pam_unix.so
session optional pam_ldap.so

测试时间 最好的工具是一个很好的老客户。 从您的系统中选择一个用户并发出:

getent passwd | grep foouser

你应该得到两次结果,如果这样,nss_ldap工作正常。 可以通过从/ etc / passwd中删除用户并尝试通过ssh登录来测试pam部分。

Apache mod_auth_ldap

要在apache中具有LDAP授权,您必须加载mod_auth_ldap模块

LoadModule mm_auth_ldap_module modules/mod_auth_ldap.so

现在就这样做了.htaccess就够了

AuthName "Restricted"
AuthType Basic
AuthLDAPURL ldap://ldap.domain.com:389/ou=People,dc=domain,dc=com?uid
AuthLDAPBindDN "cn=Manager,dc=domain,dc=com"
AuthLDAPBindPassword "your_secret_secret_password_to_ldap_admin"
require valid-user

请注意,此方法也可用于webdav subversion授权

ldap的管理工具

我推荐使用几种管理OpenLDAP服务器的工具

其他ldap感知应用程序

  • Postfix
  • ExpressIMAP
  • jabberd
  • eGroupware
  • 概要

    如果有人要添加东西,请做。 我知道配置可能不完美。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏