openldap管理系统

openldap管理系统

 

1、背景

在企业创办初期,少于50台服务器的情况下基本不会遇到帐号管理的问题。

但是随着时间的推移,服务器数量增加及经常变更服务器密码,就会频繁导致有些服务器忘记密码,登录不上去的情况。

使用配置管理工具,可以将系统的Passwdshadows等文件进行统一管理,达到账号密码的统一。

针对企业中的角色,管理员角色、业务角色、观察角色、个人角色等,对所有的员工根据权限的不同进行分组,并对组进行授权,不同的组拥有不同的权限。

 

设计的理念:所有的用户名、密码、权限都通过ldap去管理

 

2、目标

1LDAP Server集中管理帐号及存放SSHPublic key

2、每开一个用户自动建立家目录

3、用户在LDAP Server中停权后,该用户无法使用SSHkey的方式登录任何一台服务器。

4LDAP Server设定用户可使用的sudo权限

5、限制某些用户无法登录某些服务器

6、方便使用phpldapadmin来管理

 

 

3、基本架构

技术分享

 

 

 

4Openldap Server的安装设定

4.1、环境说明

系统:centos 6.6

LDAP Server    192.168.1.50

LDAP Client      192.168.1.81

 

4.2、安装说明

4.2.1LDAP Server端安装

a.采用yum方式安装

#yuminstall openldap-* -y

OpenLDAP 使用Berkely-DB来作为数据库存储信息,Yum的话,会默认安装依赖包,我们只要在安装完后检查一下是否安装了db4*相关的rpm包就可以了

#rpm-qa | grep db4

b.拷贝LDAP配置文件到LDAP目录

# cd/etc/openldap/
# cp /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf

c.创建LDAP管理员密码:加密

# slappasswd
这里我输入的密码是redhat,输入完密码后,返回一串密文,先保存到剪贴板,之后要复制到LDAP配置文件中使用:{SSHA}pfAJm+JJa4ec2y8GjTc8uMEJpoR5YKLy

d.编译配置文件

# vi /etc/openldap/slapd.conf

# enable server status monitoring (cn=monitor)
database monitor
access to *
        bydn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"read
        bydn.exact="cn=root,dc=zzc,dc=com" read
        by * none

database        bdb
suffix          "dc=zzc,dc=com"
checkpoint      1024 15
rootdn          "cn=root,dc=zzc,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw                secret
# rootpw               {crypt}ijFYNcSNctBYg
rootpw {SSHA}pfAJm+JJa4ec2y8GjTc8uMEJpoR5YKMn

.......

保存退出。

e.拷贝DB_CONFIG文件到指定目录

# cp/usr/share/openldap-servers/DB_CONFIG.example  /var/lib/ldap/DB_CONFIG
删除默认/etc/openldap/slapd.d下面的所有内容,否则后面在使用ldapadd的时候会报错:
# rm -rf /etc/openldap/slapd.d/*

f.启动LDAPslapd服务,并设置自启动:

# service slapd restart
# chkconfig slapd on
赋予配置目录相应权限:
# chown -R ldap:ldap /var/lib/ldap
# chown -R ldap:ldap /etc/openldap/

g.测试并生成配置文件:

slaptest  -f /etc/openldap/slapd.conf -F/etc/openldap/slapd.d
返回config file testing succeeded,则配置成功。
赋予生成的配置文件予权限并重启:
# chown -R ldap:ldap /etc/openldap/slapd.d
# service slapd restart

h.创建一个base.ldif做初始化

#cd /tmp

#vi base.ldif

dn: dc=zzc,dc=com

objectClass: dcObject

objectClass: organization

dc: zzc

o : zzc

i.base.ldif导入

# ldapadd -x -W -D "cn=root,dc=zzc,dc=com"-f base.ldif

输入密码后出现adding new entry “dc=zzc,dc=com” 就好了。

j.设定LDAPServer写入日志

#vim /etc/rsyslog.conf

增加一行local4.* /var/log/ldap.log

然后重启rsyslog

#service rsyslog restart

这样就可以在 /var/log/ldap.log下看到日志了

K.LDAPServer支持ssh以及sudo

预设的Centos中并没有LDAP支持ssh以及sudo,需要手动安装

先来搞sudo的部分

#rpm -qal | grep sudo查看有没有/usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP

#cp/usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema

openssh部分

# rpm -qal | grep openssh-ldap查看有没有安装openssh-ldap

#cp/usr/share/doc/openssh-ldap-5.3p1/openssh-lpk-openldap.schema /etc/openldap/schema

L.将这两个schema加入到slapd.conf

include         /etc/openldap/schema/sudo.schema

include        /etc/openldap/schema/openssh-lpk-openldap.schema

 

M.重新转换一下

#slaptest  -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

# chown -Rf ldap:ldap /etc/openldap/slapd.d

# service slapd restart

 

4.2.2phpLDAPadmin安装

aCentos没有预设安装phpldapadmin,需要先安装epel再安装

#rpm -ivhhttps://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm安装epel

#yum install phpldapadmin

这种安装会连httpdphp一起安装

b、然后修改httpd的设定

#vi /etc/httpd/conf.d/phpldapadmin.conf

127.0.0.1改成192.168.0.0/255.255.0.0

#service httpd  restart

c、在浏览器输入http://192.168.1.50/ldapadmin可以打开既代表安装成功

d、修改文件/etc/phpldapadmin/config.php 

找到$servers->setValue(‘login‘,‘attr‘,‘uid‘);修改为$servers->setValue(‘login‘,‘attr‘,‘dn‘);

e、尝试登录

帐号:cn=root,dc=zzc,dc=com

密码:为之前设定的密码

fphpldapadmin支持sudo

http://phpldapadmin.sourceforge.net/wiki/index.php/TemplatesContributed:Sudo

到这个网址抓取template,但是这个网址被“墙”了,只能翻墙看

Creation Template Modification Template分别复制到这两个文件

/usr/share/phpldapadmin/templates/creation/sudo.xml

/usr/share/phpldapadmin/templates/modification/sudo.xml

CreationTemplate

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE template SYSTEM "template.dtd">
<template>
<title>Sudo Policy</title>
<regexp>^ou=sudoers,dc=.*</regexp>
<icon>images/door.png</icon>
<description>New Sudo Policy</description>
<askcontainer>1</askcontainer>
<rdn>cn</rdn>
<visible>1</visible>
 
<objectClasses>
<objectClass id="sudoRole"></objectClass>
</objectClasses>
 
<attributes>
<attribute id="cn">
        <display>Policy Name</display>
        <order>1</order>
        <page>1</page>
</attribute>
<attribute id="sudoCommand">
        <display>Sudo Command</display>
        <order>2</order>
        <page>1</page>
        <spacer>1</spacer>
</attribute>
<attribute id="sudoUser">
        <display>Sudo Users</display>
        <option>=php.MultiList(/,(objectClass=posixAccount),uid,%uid%
(%cn%),sudoUser)</option>
        <order>3</order>
        <page>1</page>
        <spacer>1</spacer>
</attribute>
<attribute id="sudoHost">
        <display>Sudo Hosts</display>
        <array>10</array>
        <order>3</order>
        <page>1</page>
        <spacer>1</spacer>
</attribute>
<attribute id="description">
        <type>textarea</type>
        <display>Description</display>
        <order>4</order>
        <page>1</page>
</attribute>
</attributes>
</template>

ModificationTemplate

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE template SYSTEM "template.dtd">
<template>
<title>Sudo Policy</title>
<regexp>^cn=.*,ou=sudoers,dc=.*</regexp>
<icon>images/door.png</icon>
<description>Sudo Policy</description>
<askcontainer>1</askcontainer>
<rdn>cn</rdn>
<visible>1</visible>
 
<objectClasses>
<objectClass id="sudoRole"></objectClass>
</objectClasses>
 
<attributes>
<attribute id="cn">
        <display>Policy Name</display>
        <order>1</order>
        <page>1</page>
</attribute>
<attribute id="sudoCommand">
        <display>Sudo Command</display>
        <order>2</order>
        <page>1</page>
        <spacer>1</spacer>
</attribute>
<attribute id="sudoUser">
        <display>Sudo Users</display>
        <order>3</order>
        <page>1</page>
        <spacer>1</spacer>
</attribute>
<attribute id="sudoHost">
        <display>Sudo Hosts</display>
        <!-- <array>10</array> -->
        <order>3</order>
        <page>1</page>
        <spacer>1</spacer>
</attribute>
<attribute id="description">
        <type>textarea</type>
        <display>Description</display>
        <order>4</order>
        <page>1</page>
        <cols>200</cols>
        <rows>10</rows>
</attribute>
</attributes>
</template>

保存后phpldapadmin会自动载入

4.2.3ldap客户端安装

a.安装LDAPclient认证需要的pam包:

#yum install nss-pam-ldapd pam_ldap -y 

b.setup配置客户端,是机器使用LDAP进行账户验证:

技术分享

将带ldap的选中

技术分享

next

技术分享

ok,退出

 

c. 设定自动建立家目录

# yum install -y oddjob-mkhomedir oddjob

# chkconfig oddjobd on

# service messagebus start

Starting system message bus: [ OK ]

# service oddjobd start

Starting oddjobd: [ OK ]

# authconfig --enablemkhomedir --update

Starting oddjobd: [ OK ]

设定完后只能通过帐号密码登录,但我们还要支持ssh public key认证

d. 支持sshpublic key登录

#yum install openssh-ldap nss-pam-ldapd

#cp/usr/share/doc/openssh-ldap-5.3p1/ldap.conf /etc/ssh

#vi /etc/ssh/sshd_config

         AuthorizedKeysCommand/usr/libexec/openssh/ssh-ldap-wrapper

         PubkeyAuthenticationyes

         AuthorizedKeysCommandRunAsnobody

#vi /etc/ssh/ldap.conf添加

         urildap://192.168.1.50/

         basedc=zzc,dc=com

         sslno

# service sshd restart

 

e.让用户通过ldap支持sudo

# vi /etc/sudo-ldap.conf 加入两行

uri ldap://192.168.1.50/

sudoers_base dc=zzc,dc=com

 

#vi /etc/nsswitch.conf 加入一行

sudoers:    files ldap

会先判断本机sudo设定,再判断ldap的设定

 

fvim/etc/sssd/sssd.conf 

添加enumerate=true

#service sssd restart 并重启服务

在客户端执行

#getent passwd |grep abc 可以看到ldap的用户abc的信息

g.编辑系统认证文件,保证使用ldap来认证

 vim /etc/pam.d/system-auth
 vim /etc/pam.d/password-auth

将文件中的pam_sss.so替换成 pam_ldap.so 

#service nslcd restart

服务重启之后因该就可以使用LDAP服务了。客户端配置完成

 

 

 

 

5LDAP Server管理篇

5.1、登录

帐号:cn=root,dc=zzc,dc=com

密码:为你在服务端的slapd.confrootpw段设定的密码

5.2、创建OU

这个ou要建立usersgroupssudoers,也就是要操作三次

点击“创建新条目”--Generic: Organisational Unit

技术分享

技术分享

分别输入users  groups  sudoers 创建三次

技术分享

5.3 groups的建立

技术分享

创建一个子条目--Generic: Posix Group,写上要创建的组名

 

 

5.4 users的建立

技术分享

技术分享

登录的用户名为这里的UserIDtest_user1,密码为你自己设定的

 

5.5设定user使用SSH Public key登录

随便找台linux机器执行ssh-keygen -t rsa一直回车,在家目录的.ssh目录下有id_rsa  id_rsa.pub两个文件。

先查看下刚添加的test_user1的资料



技术分享

技术分享

技术分享

id_rsa.pub中的内容添加到sshPublickey中,私钥自己导入到crt或者xshell中,就可以用ssh public key登录了

 

 

5.6sudo的设定


技术分享

技术分享


本文出自 “民煮天下” 博客,请务必保留此出处http://pengye888.blog.51cto.com/5552219/1782524

文章来自:http://pengye888.blog.51cto.com/5552219/1782524
© 2021 jiaocheng.bubufx.com  联系我们
ICP备案:鲁ICP备09046678号-3