openldap管理系统
1、背景
在企业创办初期,少于50台服务器的情况下基本不会遇到帐号管理的问题。
但是随着时间的推移,服务器数量增加及经常变更服务器密码,就会频繁导致有些服务器忘记密码,登录不上去的情况。
使用配置管理工具,可以将系统的Passwd、shadows等文件进行统一管理,达到账号密码的统一。
针对企业中的角色,管理员角色、业务角色、观察角色、个人角色等,对所有的员工根据权限的不同进行分组,并对组进行授权,不同的组拥有不同的权限。
设计的理念:所有的用户名、密码、权限都通过ldap去管理
2、目标
1、LDAP Server集中管理帐号及存放SSHPublic key
2、每开一个用户自动建立家目录
3、用户在LDAP Server中停权后,该用户无法使用SSHkey的方式登录任何一台服务器。
4、LDAP Server设定用户可使用的sudo权限
5、限制某些用户无法登录某些服务器
6、方便使用phpldapadmin来管理
3、基本架构
4、Openldap Server的安装设定
4.1、环境说明
系统:centos 6.6
LDAP Server 192.168.1.50
LDAP Client 192.168.1.81
4.2、安装说明
4.2.1、LDAP 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.启动LDAP的slapd服务,并设置自启动:
# 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.2、phpLDAPadmin安装
a、Centos没有预设安装phpldapadmin,需要先安装epel再安装
#rpm -ivhhttps://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm安装epel
#yum install phpldapadmin
这种安装会连httpd跟php一起安装
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
密码:为之前设定的密码
f、phpldapadmin支持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.3、ldap客户端安装
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的设定
f、vim/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服务了。客户端配置完成
5、LDAP Server管理篇
5.1、登录
帐号:cn=root,dc=zzc,dc=com
密码:为你在服务端的slapd.conf中rootpw段设定的密码
5.2、创建OU
这个ou要建立users,groups,sudoers,也就是要操作三次
点击“创建新条目”--》Generic: Organisational Unit
分别输入users groups sudoers 创建三次
5.3 groups的建立
创建一个子条目--》Generic: Posix Group,写上要创建的组名
5.4 users的建立
登录的用户名为这里的UserID:test_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登录了