1. 程式人生 > >CENTOS7部署LDAP伺服器並實現RUNDECK的登陸認證

CENTOS7部署LDAP伺服器並實現RUNDECK的登陸認證

系統環境:centos7

1、關閉SELINUX和防火牆
setenforce 0
修改/etc/selinux/config
SELINUX=disabled
service firewalld stop
chkconfig firewalld off

2、安裝軟體
yum -y install openldap compat-openldap openldap-clients openldap-servers openldap-servers-sql openldap-devel migrationtools

3、配置
slappasswd -s yourpassword
記住生成的這一段字串,類似於這樣的{SSHA}VDkARCy6V7aJHpF2oq1aJIgRxYVRADre

修改前最好先備份:

cp /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif.bak
cp /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif.bak

修改後的內容如下:
[[email protected] ~]# cat /etc/openldap/slapd.d/cn=config/olcDatabase\=\{2\}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 fb9f59f5
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=bcdgptvs,dc=com
olcRootDN: cn=Manager,dc=bcdgptvs,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 5a85e3a6-85c8-1038-9c14-757b822e1671
creatorsName: cn=config
createTimestamp: 20181126131012Z
entryCSN: 20181126131012.947412Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20181126131012Z
olcRootPW: {SSHA}VDkARCy6V7aJHpF2oq1aJIgRxYVRADre

這個檔案改了域名和加入最後一行,後面的字串來自於slappasswd -s yourpassword的輸出

[[email protected] ~]# cat /etc/openldap/slapd.d/cn=config/olcDatabase\=\{1\}monitor.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 5fba0628
dn: olcDatabase={1}monitor
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth" read by dn.base="cn=Manager,dc=bcdgptvs,dc=com" read by * none
structuralObjectClass: olcDatabaseConfig
entryUUID: 5a85ddca-85c8-1038-9c13-757b822e1671
creatorsName: cn=config
createTimestamp: 20181126131012Z
entryCSN: 20181126131012.947262Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20181126131012Z

這個檔案改了域名

 

systemctl start slpad

lsof -i:389

配置OpenLDAP資料庫:

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap -R /var/lib/ldap
chmod 700 -R /var/lib/ldap

 

匯入基本Schema

 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
 ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif

修改migrate_common.ph檔案
 cp /usr/share/migrationtools/migrate_common.ph /usr/share/migrationtools/migrate_common.ph.bak

 

開啟71行開始編輯,關注沒有註釋的這三行

vim +71 /usr/share/migrationtools/migrate_common.ph

#  Default DNS domain
$DEFAULT_MAIL_DOMAIN = "bcdgptvs.com";

# Default base
$DEFAULT_BASE = "dc=bcdgptvs,dc=com";


$EXTENDED_SCHEMA = 1;

 

先新增系統使用者和組,再匯入到LDAP

 groupadd ldapgroup1
 groupadd ldapgroup2
 groupadd g1
 groupadd g2
 useradd -g g1 u1
 useradd -g g2 u2
 echo '123456' | passwd --stdin u1
 echo '123456' | passwd --stdin u2

 

cat /etc/passwd | grep u1 >> /ldapuser
cat /etc/passwd | grep u2 >> /ldapuser
cat /etc/group | grep g1 >> /ldapgroup
cat /etc/group | grep g2 >> /ldapgroup
cat /ldapgroup /ldapuser 
/usr/share/migrationtools/migrate_passwd.pl /ldapuser > /users.ldif
/usr/share/migrationtools/migrate_group.pl /ldapgroup > groups.ldif 

準備匯入前先配置好openldap基礎的資料庫,如下:

注意所有dn:的這一行前面必須空出一行,其它行前面不能有空行,為避免出錯,後面的配置也遵循這個規則

[[email protected] ~]# cat /base.ldif 

dn: dc=bcdgptvs,dc=com
o: bcdgptvs com
dc: bcdgptvs
objectClass: top
objectClass: dcObject
objectclass: organization

dn: cn=Manager,dc=bcdgptvs,dc=com
cn: Manager
objectClass: organizationalRole
description: Directory Manager

dn: ou=People,dc=bcdgptvs,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=bcdgptvs,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit

匯入ldif格式的使用者和組資料及基礎的資料庫,這裡用的是大寫的W,輸入命令以後再輸入密碼,如果是小寫w,直接在引數後面跟密碼,密碼就是開始slappasswd -s yourpassword那個

ldapadd -x -W -D "cn=Manager,dc=bcdgptvs,dc=com" -f /base.ldif 

ldapadd -x -W -D "cn=Manager,dc=bcdgptvs,dc=com" -f /users.ldif 
ldapadd -x -W -D "cn=Manager,dc=bcdgptvs,dc=com" -f /groups.ldif

 

檢視BerkeleyDB資料庫檔案

[[email protected] ~]# ll /var/lib/ldap/
總用量 484
-rwx------ 1 ldap ldap     2048 11月 26 21:59 alock
-rw------- 1 ldap ldap     8192 11月 26 21:59 cn.bdb
-rwx------ 1 ldap ldap   262144 11月 26 22:59 __db.001
-rwx------ 1 ldap ldap    32768 11月 26 22:59 __db.002
-rwx------ 1 ldap ldap    93592 11月 26 22:59 __db.003
-rwx------ 1 ldap ldap      845 11月 26 21:23 DB_CONFIG
-rwx------ 1 ldap ldap     8192 11月 26 21:59 dn2id.bdb
-rwx------ 1 ldap ldap    32768 11月 26 21:59 id2entry.bdb
-rwx------ 1 ldap ldap 10485760 11月 26 21:59 log.0000000001
-rw------- 1 ldap ldap     8192 11月 26 21:59 mail.bdb
-rw------- 1 ldap ldap     8192 11月 26 21:59 objectClass.bdb
-rw------- 1 ldap ldap     8192 11月 26 21:59 ou.bdb
-rw------- 1 ldap ldap     8192 11月 26 21:59 sn.bdb

把OpenLDAP資料庫中的使用者新增到使用者組,按如下內容編輯檔案:

[[email protected] ~]# cat /add_user_to_groups.ldif

dn: cn=g1,ou=Group,dc=bcdgptvs,dc=com
changetype: modify
add: memberuid
memberuid: u1

再新增:

ldapadd -x -W -D "cn=Manager,dc=bcdgptvs,dc=com" -f add_user_to_groups.ldif

查詢:

[[email protected] ~]# ldapsearch -x -b "dc=bcdgptvs,dc=com" -H ldap://192.168.156.77

可以看到已經成功新增到組:

 

開啟日誌功能:

[[email protected] ~]# cat /loglevel.ldif 

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats

 

匯入重啟

ldapmodify -Y EXTERNAL -H ldapi:/// -f /loglevel.ldif 
systemctl restart slapd

修改/etc/rsyslog.conf

加入一行:

local4.* /var/log/slapd.log

並重啟服務:

systemctl restart rsyslog

這樣就能看到日誌了

 

通過LDAP Browser工具檢視資訊:

 

 

4、可以通過 phpldapadmin管理openldap

先安裝好這些工具

yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml

下載,拷貝,解壓,重新命名:

wget http://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.zip

cp phpldapadmin-1.2.3.zip /tmp/

cd /tmp/

unzip phpldapadmin-1.2.3.zip

mv phpldapadmin-1.2.3 /var/www/html/phpldapadmin

cd /var/www/html/phpldapadmin/config

cp config.php.example config.php

 

修改config.php,在後面,在?>前新增:

$config->custom->appearance['hide_template_warning'] = true;
$config->custom->appearance['minimalMode'] = true;
$config->custom->appearance['friendly_attrs'] = array(
        'facsimileTelephoneNumber' => 'Fax',
        'gid'                      => 'Group',
        'mail'                     => 'Email',
        'telephoneNumber'          => 'Telephone',
        'uid'                      => 'User Name',
        'userPassword'             => 'Password'
);
$servers = new Datastore();
$servers->newServer('ldap_pla');
$servers->setValue('server','name','bcdgptvs LDAP Server');
$servers->setValue('appearance','password_hash','');
$servers->setValue('login','attr','dn');
$servers->setValue('server','host','192.168.156.77');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=bcdgptvs,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('server','tls',false);
$servers->setValue('unique','attrs',array('uid','sn'));

 

重啟http服務,登入:

 

大約是這樣用的:

 

 

5、再將運維工具rundeck整合到LDAP進行認證

測試的rundeck是以war包的方式啟動的,進入到與包所在目錄的server/config目錄中,確認該目錄下有

jaas-loginmodule.conf  realm.properties等檔案,一般rundeck的war包啟動過一次就會用

 

rundeck的配置如下,最後一行是為了保證rundeck原有的使用者也能正常登陸

[[email protected] etc]# cat /runtest/server/config/jaas-m2.conf 
multiauth {

  com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule sufficient
    debug="true"
    contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
    providerUrl="ldap://192.168.156.77:389"
    bindDn="cn=Manager,dc=bcdgptvs,dc=com"
    bindPassword="yourpassword"               #此處填寫有LDAP查詢許可權的使用者密碼,這裡用了Manager
    authenticationMethod="simple"
    forceBindingLogin="true"
    userBaseDn="ou=People,dc=bcdgptvs,dc=com"
    userRdnAttribute="cn"
    userIdAttribute="cn"
    userPasswordAttribute="unicodePwd"
    userObjectClass="posixAccount"
    roleBaseDn="ou=Group,dc=bcdgptvs,dc=com"
    roleNameAttribute="cn"
    roleUsernameMemberAttribute="member"
    roleMemberAttribute="member"
    roleObjectClass="groupOfNames"
    cacheDurationMillis="300000"
    supplementalRoles="user"
    nestedGroups="false"
    reportStatistics="true";

  org.eclipse.jetty.jaas.spi.PropertyFileLoginModule required
    debug="true"
    file="/runtest/server/config/realm.properties";
};

 

許可權的配置,這裡測試的許可權放得比較開,抄襲了admin的許可權:

[[email protected] etc]# cat /runtest/etc/user.aclpolicy 
description: Admin, all access.
context:
  project: '.*' # all projects
for:
  resource:
    - allow: '*' # allow read/create all kinds
  adhoc:
    - allow: '*' # allow read/running/killing adhoc jobs
  job: 
    - allow: '*' # allow read/write/delete/run/kill of all jobs
  node:
    - allow: '*' # allow read/run for all nodes
by:
  group: user

---

description: Admin, all access.
context:
  application: 'rundeck'
for:
  resource:
    - allow: '*' # allow create of projects
  project:
    - allow: '*' # allow view/admin of all projects
  project_acl:
    - allow: '*' # allow admin of all project-level ACL policies
  storage:
    - allow: '*' # allow read/create/update/delete for all /keys/* storage content
by:
  group: user

 

6、rundeck的啟動,用如下引數啟動

[[email protected] etc]# java -Drundeck.jaaslogin=true      -Dloginmodule.conf.name=jaas-m2.conf      -Dloginmodule.name=multiauth -jar rundeck-3.0.7-20181008.war &

 

登陸測試,用LDAP使用者成功登陸:

 

 

登出出來,用rundeck的admin使用者也能正常登陸: