OpenSSH Server & FreeRadius Server Authenticate via Lightweight Directory Access Protocol

安装并配置LDAP Server

apt-get update && apt-get -y install slapd ldap-utils

输入LDAP Server的管理员密码(共两次):


 

重新配置LDAP:

dpkg-reconfigure slapd

 

Omit OpenLDAP server configuration? : no

DNS domain name: domain.com


 

NOTE:此处输入的DNS domain将会作为你的基础搜索区分名称(Base DN)。以”.”为分割符,每个”.”都是一个dc。

举个例子:你输入了domain.com,那么你的Base DN就是dc=domain,dc=com,如果输入了hello.world.com,那么你的Base DN就是dc=hello,dc=world,dc=com。

 

Organization name: domain.com

Administrator password:

NOTE:此处输入的管理员密码将会覆盖安装时输入的密码。

Database backend to use: HDB

Do you want the database to be removed when slapd is purged?: No

Move old database?: Yes

Allow LDAPv2 protocol?: No

安装并配置完毕后,会自动创建管理员账号(Bind DN),默认为cn=admin,你的Base DN。

添加Organizational Units(下文简称OU)

此处以分别使用CLI模式添加名称分别为users与groups的OU。

 

保存以下内容到一个文件,例如usersandgroups.ldif:

 

 

NOTE:dn为此Organizational Units的区分名,简单理解成路径,只不过这个路径是从你要找的文件名开始。例如这里的dn: ou=groups,dc=domain,dc=com,则代表groups这个在dc=domain,dc=com这个Base DN的中。再举一个例子:dn: ou=second,ou=first,dc=domain,dc=com,代表second这个OU位于dc=domain,dc=com这个Base DN的first OU中。

 

使用ldapadd添加:

ldapadd -D “cn=admin,dc=domain,dc=com” -xw管理员密码 -f文件名

 

NOTE:-D后面接的是你的管理员账号。

 

看到类似提示:

adding new entry “ou=groups,dc=domain,dc=com”

 

adding new entry “ou=users,dc=domain,dc=com”

则代表添加成功。

可以使用ldapsearch查看:

ldapsearch -x -b “你的Base DN”

 

添加用户与用户组的记录

此处分别使用CLI添加类型为posixGroup的用户组与posixAccount的用户。

保存以下内容到文件,例如newuserandgroup.ldif(请自行修改dn)

 

 

NOTE:有关dn的,前文已做解释,此处不说。cn是该记录在LDAP中的名称,gidNumber是用户组id,memberUid是用户组的名称,givenName是名字,sn是姓,gidNumber是用户要加入的用户组的id,homeDirectory是用户的家目录,loginShell是用户登录入系统时使用的Shell,uidNumber是用户的uid,uid是用户的用户名,userPassword是用户的密码。

 

同样的,使用ldapadd添加记录:

ldapadd -D “你的Base DN” -xw管理员密码 -f文件名

 

Linux使用LDAP作登录验证

安装验证使用的PAM模块,nss模块,以及nscd:

apt-get -y install libnss-ldap libpam-ldap nscd

 

LDAP server Uniform Resource Identifier: ldap://localhost/

NOTE: 一定要把ldapi:///改成ldap://,再输入LDAP Server的IP。

 


 

Distinguished name of the search base: dc=domain,dc=com

NOTE:此处输入你的Base DN。

 

 

LDAP version to use: 3

Make local root Database admin: Yes

Does the LDAP database require login?: No

LDAP account for root: cn=admin,dc=domain,dc=com

NOTE:此处输入你的Bind DN。

LDAP root account password:

 

修改/etc/nsswitch.conf文件,在passwd,group,shadow开头的三行末尾的compat前加入ldap,并以空格与compat分开:


 

修改/etc/pam.d/common-session文件,在末尾加入此行:

 


 

重启nscd:

service nscd restart

 

最后使用已在LDAP Server添加的账号记录登录此系统:

ssh newuser@localhost

 


 

 

 

Freeradius使用LDAP作验证

此处将会启用Freeradius的LDAP模块。

 

NOTE:开始下面步骤前,建议你使用http://soft.yzs.me/freeradius.sh安装FreeRadius Server

 

首先安装freeradius-ldap:

apt-get -y install freeradius-ldap

编辑/etc/freeradius/modules/ldap文件,把server等于号后面的内容改为你的LDAP Server IP,去掉identity前面的”#”,把等于号后面的内容改为你的Bind DN,去掉password前面的”#”,把等于号后面的内容改为你的LDAP Server的管理员密码,把basedn等于号后面的内容更改为你的Base DN,最后去掉password_attribute开头的”#”。

 

修改完毕后的内容应该如下(已去除被注释的行)

 

修改/etc/freeradius/sites-available/default文件。


authorize {

此处内容省略

}

的”{“与”}”之间加入一行:ldap。


authenticate {

此处内容省略

}

的”{“与”}”之间加入下面内容:

Auth-Type LDAP {

ldap

}

 

如果使用http://soft.yzs.me/freeradius.sh安装FreeRadius Server,则修改完毕后/etc/freeradius/sites-available/default文件的内容一般如下:

 

 

重启Freeradius:

service freeradius restart

 

最后使用radtest,对已在LDAP Server添加的用户记录进行测试:

radtest newuser newuser localhost 0 testing123

 

如果返回的内容有Access-Accept,则代表验证成功:

Sending Access-Request of id 27 to 127.0.0.1 port 1812

User-Name = “newuser”

User-Password = “newuser”

NAS-IP-Address = 208.51.63.112

NAS-Port = 0

rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=27, length=20

 

教程到此完毕,感谢阅读。

云雾互联以及微宇宙的管理员——Extreme制作。

 

QQ:865475185

Email:e@yzs.me

 

除非另有声明,本文档内容采用知识共享署名-非商业性使用-相同方式共享授权。

Debian与Ubuntu下配置LDAP登录身份验证

前几天在两个使用Ubuntu Server 12.04的 VPS上搭建了LDAP环境。

Ubuntu使用LDAP身份验证,仅需从更新源安装libpam-ldap nscd这两个DEB包,

然后根据引导一步步填入信息,再修改下pam的配置文件即可使用。

不过昨天在给两个个使用Debian的虚拟专用服务器使用同样的方法安装并配置LDAP身份验证客户端时,就一直弄不好,总是无法通过验证,从/var/log/auth.log文件可以读取到类似的信息:

谷歌了下有关的资料,但并未找到有效的解决方案。昨天尝尽各种方法折腾了好久……

今天早上起来用search从更新源看了下与ldap有关的DEB包,看到一个libnss-ldap,想起数天前弄pam_mysql时,也要安装一个libnss-mysql,于是尝试安装了这个包。

同样,根据引导一步步填入信息,然后修改pam的配置文件。

再次使用LDAP中已添加的账户登录,成功通过验证。

 

为何有如此差异?

先来看看Ubuntu下安装libpam-ldap nscd这两个包时输出的信息:

再看看Debian下安装libpam-ldap与nscd时输出的信息:

可见,Ubuntu自动安装了数个额外的DEB包,其中包括了libnss-ldap,而Debian是作为建议的DEB包出现,并没有自动安装。相信很多人都和我一样,除非出现错误信息,否则使用apt-get或yum安装东西肯定不会仔细看这些,自然也不会留意到有建议安装的包……

再来看看Debian下安装libnss-ldap时输出的信息:

这就充分说明,在Debian下配置LDAP验证,libnss-ldap这个包是最关键。

 

最后就是配置文件。

Debian下PAM的LDAP验证客户端的配置文件有两个,分别是pam-ldap和libnss-ldap的,他们在以下路径:

密码则在以下两个文件中:

Ubuntu应该是libnss-ldap与pam-ldap共用配置文件,其路径为:

密码文件在此:

 

WHMCS LDAP Modules

最近有人向我谈起一个与一账户信息在多个OpenSSH Server上同步的问题。

这两三天我抽时间测试了pam_mysql,pam_radius,以及OpenLDAP这三个东西。其中pam_mysql,pam_radius虽然可以用某个服务器验证登录信息,但是都需要在各个服务器上使用useradd添加该用户。

OpenLDAP最完美,仅需在LDAP上添加一个记录,就可使用已添加的用户的信息登录到各个服务器。

考虑到谈起这个问题的人是想使用WHMCS开通SSH账户的,于是我弄了个WHMCS的LDAP模块。

这模块需要PHP的LDAP扩展,你们可以通过phpinfo()函数查看是否有ldap扩展,如果没有,就到php.net下载你正在使用的版本的PHP源码,用phpize编译吧。

WHMCS LDAP模块下载地址:http://soft.yzs.me/ldapposixaccount.tar.bz2

使用方法:

首先得配置好你的LDAP Server与其他要使用LDAP验证的服务器,这些我就不多说啦,LDAP发展这么久,肯定不少人发过教程,发一个已经可以谷歌到答案的东西,那就没意义啦。

接下来要在WHMCS的服务器设置处添加服务器,模块当然是选择Ldapposixaccount了,你可以把各个服务器的IP填入到Assigned IP Addresses中,那样用户在服务信息处就可以看到各个服务器的IP了。用户名填写你的登陆DN(Login DN),例如cn=admin,dc=domain,dc=com,至于密码,你自己知道。接着创建服务器组。

进入产品设置页面,添加产品,Module Settings中选择Ldapposixaccount。

这里解释一下各项的设置。

Base Distinguished Name:最基础的dn,例如dc=domain,dc=com。

Initial uid&gid Number:填入一个数字,新添加的用户的uid和gid将会从这个数字开始递增,为了不要与/etc/passwd与/etc/group中的重复,建议设置到10000以上。

Users’s Home Directory Base:填入一个文件夹的路径,新建的用户的home目录将会以其用户名命名创建至此目录中,例如我设置为/home/,那么新建的用户的home目录将会是/home/用户名。

Login Shell:新建的用户的shell,例如/bin/bash,更多的shell可以查看/etc/shells。

Group Organisational Unit:在你LDAP Server中储存用户组的Organisational Unit。

User Organisational Unit:在你LDAP Server中储存用户的Organisational Unit。

Module Settings

 

如果你设置的信息无误的话,那么接下来就可以通过WHMCS创建用户了。

 

LDAP