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并更改系统认证(或者你有什么要登录,sshd等)到:
shadow: files ldap
group: files ldap
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服务器的工具
- phpldapadmin - 基于Web的工具
- ldapvi - vim浏览
- PADL迁移工具 - 迁移工具
- IDEALX sambaldap工具 - samba ldap工具
其他ldap感知应用程序
- Postfix
- ExpressIMAP
- jabberd
- eGroupware
概要
如果有人要添加东西,请做。 我知道配置可能不完美。