如何设置OpenLDAP服务器和身份验证客户端工作站
LDAP或者轻量级目录访问协议允许任何人定位并连接到网络(公共/私有)中的文件和设备等文件和设备等组织,人民和其他资源。
LDAP遵循X.500标准,网络中的目录服务标准通常使用通常使用通常的客户端/服务器范例。
LDAP更轻,因为它在其初始版本中它不包括安全功能。
目录服务的主要使用是将用户和对象数据存储在中央系统中,并使此数据可用于主要用于身份验证或者作为地址簿,我们可以使用OpenLDAP服务器来完成此操作。
本文介绍了如何在Ubuntu 16.04中使用轻量级目录访问协议设置OpenLDAP服务器和认证客户端工作站
本教程介绍如何在Ubuntu 16.04中使用轻量级目录访问协议设置OpenLDAP服务器和身份验证客户端工作站。
使用LDAP.
→LDAP在中央数据库中保留用户和其他网络对象。
→LDAP存储诸如纯文本信息,镜像,二进制数据,中央数据库中的公钥证书等信息。
→LDAP提供像登录管理等身份验证和授权服务。
→LDAP还可以将DNS记录存储在其数据库中。
→LDAP可以像任何组织一样使用黄页目录服务。
LDAP术语
LDAP术语是X.500目录规范的一部分,其定义了LDAP目录中的节点。
cn commonname l localitalname st state orprovinceName o组织name ou组织unitname c countryname Street StreetAddress DC DomainComponent UID Usid DN专有名称
最后一个例如:dn(可分辨名称)是一系列逗号分隔的键/值对,用于唯一地在目录层次结构中识别条目。
DN实际上是条目的完全限定名称。
例如,字符串"CN = Netherlands,OU =分发组,DC = GP,DC = GL,DC = InITOAD,DC = COM"是来自称为目录信息树的分层结构的路径,应从右侧(root)读取左(叶)。
在本文中,我们将在Ubuntu 16中设置OpenLDAP服务器,并配置OpenLDAP客户端,该客户端将从服务器检索登录凭据并验证用户。
| | IP地址|
| --- - | --- |
| OpenLDAP Server <br> 10.0.0.196 |
| OpenLDAP客户端<br> | 10.0.0.33 |
安装OpenLDAP服务器
使用APT-GET安装OpenLDAP及其实用程序,并在启动期间启用它。
安装时,它会要求提供管理员密码。
# sudo apt-get update # apt-get install slapd ldap-utils # systemctl enable slapd
使用NetStat,检查Slapd是否在Port No 389中运行
# netstat -pltn
Ubuntu 16默认情况下与防火墙一起发货。
如果启用了UFW,则使用以下命令打开端口NO 389.
# sudo ufw allow 389/tcp # sudo ufw reload
已安装OpenLDAP包,现在我们将重新配置Ubuntu附带的所有默认值。
执行以下命令以提出包配置工具。
# sudo dpkg-reconfigure slapd
包配置工具将询问重新配置OpenLDAP的一系列问题
→省略OpenLDAP服务器配置?
<no>
→DNS域名:onitad.com
→组织名称:onITORAD
→输入密码并确认:密码
→数据库后端使用:HDB
→清除Slapd时是否要将数据库删除?
<no>
→移动旧数据库?
<是>
→允许LDAPv2协议?
<no>
重新启动OpenLDAP.
# systemctl restart slapd
我们可以使用以下命令在稍后阶段更改OpenLDAP的管理员密码。
# ldappassword
在此阶段,我们已安装和重新配置OpenLDAP服务器。
要在OpenLDAP数据库中查找admin的条目,我们将使用ldapsearch命令。
Ldapsearch将提示我们在重新配置OpenLDAP期间提供的管理员密码。
# ldapsearch -x -W -D cn=admin,dc=theitroad,dc=com -b dc=theitroad,dc=com -LLL Enter LDAP Password: dn: dc=theitroad,dc=com objectClass: top objectClass: dcObject objectClass: organization o: theitroad dc: theitroad dn: cn=admin,dc=theitroad,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator userPassword:: e1NTSEF9MkdIK2p1enlxQ3hFNmtMSE56TUE5NzZzOFQxVGdxSUE=
添加组织单位(OU)
要添加OU,我们将创建一个LDIF(LDAP数据交换格式)文件,该文件是旨在从LDAP服务器交换信息的标准文本格式。
按名称"组"添加组织单位。
# vi ou_group.ldif dn: ou=groups,dc=theitroad,dc=com changetype: add objectClass: organizationalUnit objectClass: top ou: groups
我们将使用LDAPADD添加上述组织单位。
# ldapadd -W -D "cn=admin,dc=theitroad,dc=com" -f ou_group.ldif
修改组织单位(OU)
要修改组织单位,请使用以下内容创建LDIF文件。
在此示例中,我们正在为现有OU添加邮政编码的条目。
# vi modify_ou.ldif dn: ou=groups,dc=theitroad,dc=com changetype: modify add: postalCode postalCode: 788109
使用ldapmodify修改OU
# ldapmodify -x -W -D "cn=admin,dc=theitroad,dc=com" -f modify_ou.ldif Enter LDAP Password: modifying entry "ou=groups,dc=theitroad,dc=com"
删除组织单位(OU)
要删除组织单位,请使用ldapdelete指定ou的可分辨名称
# ldapdelete -W -D "cn=admin,dc=theitroad,dc=com" "ou=groups,dc=theitroad,dc=com" Enter LDAP Password:
添加组
要添加POSIX组,我们将为IT创建一个LDIF文件。
# vi irc_users.ldif dn: cn=ircusers,ou=groups,dc=theitroad,dc=com objectClass: posixGroup objectClass: top cn: ircusers gidNumber: 4000
使用之前使用ldapadd命令添加组
# ldapadd -x -W -D "cn=admin,dc=theitroad,dc=com" -f irc_users.ldif Enter LDAP Password: adding new entry "cn=ircusers,ou=groups,dc=theitroad,dc=com"
修改组
定义用于修改组的LDIF文件,我们将为现有的IRCusers组添加"描述"。
# vi modify_irc_users.ldif dn: cn=ircusers,ou=groups,dc=theitroad,dc=com changetype: modify add: description description: Groups under OU
使用ldapmodify修改该组
# ldapmodify -x -W -D "cn=admin,dc=theitroad,dc=com" -f modify_irc_users.ldif Enter LDAP Password: modifying entry "cn=ircusers,ou=groups,dc=theitroad,dc=com"
删除组
要删除组使用LDAPDelete指定组的可分辨名称。
# ldapdelete -W -D "cn=admin,dc=theitroad,dc=com" "cn=ircusers,ou=groups,dc=theitroad,dc=com" Enter LDAP Password:
添加用户
首先使用slappasswd生成用户的SSHA密码
# slappasswd -h {SSHA} -s mypass {SSHA}d9NeiNx4RLSEtXNuMxq7+jWK/5yxwCWT
接下来为用户创建一个LDIF文件
# vi mike_user.ldif dn: uid=mike,ou=groups,dc=theitroad,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: mike sn: smith givenName: mike cn: mike uidNumber: 4000 gidNumber: 4000 userPassword: {SSHA}d9NeiNx4RLSEtXNuMxq7+jWK/5yxwCWT loginShell: /bin/bash homeDirectory: /home/mike
确保在我们的情况下提供正确的组ID号(GIDNumber),这是4000。
使用ldapadd命令添加上述用户。
# ldapadd -x -W -D "cn=admin,dc=theitroad,dc=com" -f mike_user.ldif Enter LDAP Password: adding new entry "uid=mike,ou=users,dc=theitroad,dc=com"
删除用户
删除用户使用ldapdelete命令
# ldapdelete -W -D "cn=admin,dc=theitroad,dc=com" "uid=mike,ou=groups,dc=theitroad,dc=com"
检查是否已使用以下命令删除条目。
# ldapsearch -x -b "dc=theitroad,dc=com"
修改用户
要修改用户,请创建LDIF文件,然后使用LDAPmodify来实现它。
# vi modify_mike.ldif dn: uid=mike,ou=groups,dc=theitroad,dc=com changetype: modify replace: smith sn: smt add: title title: Grand Poobah add: jpegPhoto jpegPhoto: /tmp/smith.png
现在执行ldapmodify命令
# ldapmodify -x -W -D "cn=admin,dc=theitroad,dc=com" -f modify_mike.ldif Enter LDAP Password: modifying entry "uid=mike,ou=users,dc=theitroad,dc=com"
搜索OpenLDAP数据库
从服务器本身,我们现在可以检查是否可以读取数据库。
下面的命令将转储整个目录。
# ldapsearch -x -LLL -H ldap:///-b dc=theitroad,dc=com dn: dc=theitroad,dc=com objectClass: top objectClass: dcObject objectClass: organization o: theitroad dc: theitroad dn: cn=admin,dc=theitroad,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator dn: ou=groups,dc=theitroad,dc=com objectClass: organizationalUnit objectClass: top ou: groups dn: ou=users,dc=theitroad,dc=com objectClass: organizationalUnit objectClass: top ou: users dn: cn=dbagrp,ou=groups,dc=theitroad,dc=com objectClass: top objectClass: posixGroup gidNumber: 678 cn: dbagrp dn: cn=ircusers,ou=groups,dc=theitroad,dc=com objectClass: posixGroup objectClass: top cn: ircusers gidNumber: 4000 dn: uid=mike,ou=users,dc=theitroad,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount uid: mike sn: smith givenName: mike cn: mike uidNumber: 4000 gidNumber: 4000 loginShell: /bin/bash homeDirectory: /home/mike
使用phpmyadmin.
我们通过命令行创建/编辑/搜索了OU,组,用户。
但是,我们可以使用名为phpldapadmin的Web界面执行相同的操作。
默认情况下,phpldapadmin与Ubuntu一起发货。
使用apt-get安装它。
# sudo apt-get install phpldapadmin
编辑phpldapadmin的配置文件以反映我们之前创建的目录结构。
# vi /etc/phpldapadmin/config.php $servers->setValue('server','name','My LDAP Server'); $servers->setValue('server','host','LDAP-SERVER-IP'); $servers->setValue('server','base',array('dc=theitroad,dc=com')); $servers->setValue('login','auth_type','session'); $servers->setValue('login','bind_id','cn=admin,dc=theitroad,dc=com');
我们现在可以通过http://ldap-server-ip/phpldapadmin访问phpldapadmin。
使用用户登录默认目录结构和密码作为"密码"。
密码保护PHPLDAPADMIN位置,使用Apache Utils HTPassWD创建用户。
# sudo htpasswd -c /etc/apache2/htpasswd ldapadminuser New password: Re-type new password: Adding password for user ldapadminuser
在Apache的主要配置文件/etc/apache2/apache2.conf中添加以下部分
# vi /etc/apache2/apache2.conf <Location /phpldapadmin> AuthType Basic AuthName "Restricted Files" AuthUserFile /etc/apache2/htpasswd Require valid-user </Location>
重新启动Apache.
# systemctl restart apache2
刷新PHPLDAPADMIN页面,我们将看到使用HTPASSWD UTILS配置的密码提示。
安装OpenLDAP客户端
我们将在客户端计算机中安装一些包,以使用OpenLDAP服务器正确地进行身份验证功能。
# apt-get install ldap-auth-client nscd
我们将被问到一系列类似于在服务器配置期间被问到的问题。
→LDAP服务器统一资源标识符:LDAP://10.0.0.196
→搜索基础的专有名称:DC = OnItoad,DC = COM
→LDAP版本:3
→制作本地根数据库管理员:<是>
→LDAP数据库是否需要登录?
<no>
→root的LDAP帐户:cn = admin,dc = onitread,dc = com
→LDAP root帐户密码:密码
我们可以始终通过在终端中执行以下命令来更改配置。
# sudo dpkg-reconfigure ldap-auth-config
配置OpenLDAP客户端
我们需要编辑文件/etc/nsswitch.conf以通知身份验证文件有关OpenLDAP服务器的存在。
编辑/etc/nsswitch.conf文件并修改以passwd,group,影子开始的行,如下所示。
# vi /etc/nsswitch.conf passwd: ldap compat group: ldap compat shadow: ldap compat
在文件末尾编辑/etc/pam.d/common-session和以下行。
# vi /etc/pam.d/common-session .................... .................... session required pam_mkhomedir.so skel=/etc/skel umask=0022
使用带有LDAP的Auth-Client-Config设置NSS
# auth-client-config -t nss -p lac_ldap # cd /usr/share/pam-configs/ # vi mkhomedir Name: Create home directory on login for theitroad Default: yes Priority: 0 Session-Type: Additional Session-Interactive-Only: yes Session: required pam_mkhomedir.so umask=0022 skel=/etc/skel
上面文件的最后一行将在LDAP用户登录时在客户端计算机上创建一个主目录,并且没有主目录。
现在更新PAM身份验证。
# pam-auth-update
启用"创建主目录在登录时创建主目录......"的行,然后选择"确定"。
重新启动nscd。
# /etc/init.d/nscd restart [ ok ] Restarting nscd (via systemctl): nscd.service.
列出使用Getent的密码文件的条目。
该列表将包括我们在服务器上之前创建的LDAP用户的"Mike"。
# getent passwd mike:x:4000:4000:mike:/home/mike:/bin/bash
如果我们之前未安装SSH,则使用SSH安装它。
# apt-get install ssh
确保在/etc/ssh/sshd_config中将以下设置为yes是yes
PermitRootLogin yes UsePAM yes
使用ssh连接到LDAP服务器
# ssh [email protected]
获得迈克shell 的另一种方法是在客户端机器中使用sudo。
# su - mike mike@ip-10-0-0-33:~$
在配置OpenLDAP服务器时,我们创建了具有可分辨名称的LDAP管理员"CN = admin,dc = onitread,dc = com"此值管理员默认情况下与Ubuntu中的管理组匹配。
我们为管理组创建的LDAP用户将访问sudo命令,因为它在/etc/sudoers文件中有一个条目,如下面 -
%admin ALL=(ALL) ALL
要撤消对管理组的sudo访问权限,请通过在行的开头放置哈希来注释上述行。
我们还可以通过添加%用户=(全部)所有到/etc/sudoers文件来授予sudo访问特定用户。