环境(两台虚拟机):

rstudio--192.168.1.88--centos7.6

ldap--192.168.1.89--centos7.6

关闭防火墙、selinux,配置hosts、yum源

一、安装Rstudio Server

登录rstudio服务器终端,先安装R(需要epel源)

# yum install R

下载安装包并安装

# wget https://download2.rstudio.org/server/centos7/x86_64/rstudio-server-rhel-1.4.1717-x86_64.rpm

# yum localinstall rstudio-server-rhel-1.4.1717-x86_64.rpm

修改配置文件

# vim /etc/rstudio/rserver.conf

rsession-which-r=/usr/bin/R

启动服务并登录浏览器测试

# systemctl start rstudio-server

URL: 192.168.1.88:8787

二、安装openLDAP

1.安装

登录ldap服务器,安装openldap

# yum install openldap openldap-servers openldap-clients

在启动服务前,复制默认配置文件,否则生成密码时会报错

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

# chown -R ldap. /var/lib/ldap/DB_CONFIG

启动服务并设置开机自启动

# systemctl enable slapd --now

2.配置密码

从openldap2.4.23版本开始,所有配置都保存在/etc/openldap/slapd.d目录下的cn=config文件夹内,配置文件的后缀为 ldif。

每个配置文件都是通过命令自动生成的,任意打开一个配置文件,在开头都会有一行注释,说明此为自动生成的文件,请勿编辑,使用ldapmodify命令进行修改。

生成管理员密码(注意后面脚本中都是用的这个密码)

# slappasswd -s 123456

{SSHA}vrndYB4LUei9Kj190fdNIHmE4fDwCOo4

编辑配置密码文件

# vim changepwd.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}vrndYB4LUei9Kj190fdNIHmE4fDwCOo4

注:第一行指要编辑的配置文件,这里就是/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif,第二行指编辑类型为修改,第三行是具体动作即添加一个olcRootPW属性,第四行是添加的值。

# ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif

设置rstudio server和ldap账号同步一起工作_vim

此时在olcDatabase={0}config.ldif文件中多处一行:olcRootPW:: e1NTSEF9dnJuZFlCNExVZWk5S2oxOTBmZE5JSG1FNGZEd0NPbzQ=

3.配置schema

schema主要用于控制目录树中各种条目所拥有的对象类以及各种属性的定义,参考:schema介绍

设置rstudio server和ldap账号同步一起工作_vim_02

# for i in `ls /etc/openldap/schema/*.ldif`;do ldapadd -Y EXTERNAL -H ldapi:/// -f $i;done

4.配置域名

此处配置的域名为pm.com,管理员账号为admin

# vim changedomain.ldif

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=pm,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=pm,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=pm,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}vrndYB4LUei9Kj190fdNIHmE4fDwCOo4

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=pm,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=pm,dc=com" write by * read

 

# ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif

设置rstudio server和ldap账号同步一起工作_vim_03

5.配置memberof功能

# vim add-memberof.ldif

dn: cn=module{0},cn=config
cn: modulle{0}
objectClass: olcModuleList
objectclass: top
olcModuleload: memberof.la
olcModulePath: /usr/lib64/openldap

dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfUniqueNames
olcMemberOfMemberAD: uniqueMember
olcMemberOfMemberOfAD: memberOf

# vim refint1.ldif

dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint

# vim refint2.ldif

dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: refint
olcRefintAttribute: memberof uniqueMember manager owner

按顺序执行

# ldapadd -Q -Y EXTERNAL -H ldapi:/// -f add-memberof.ldif
# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
# ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif

6.创建组织单元

创建一个叫做 PM Company 的组织,并在其下创建一个 admin 的组织角色(该组织角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元

# vim base.ldif

dn: dc=pm,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: PM Company
dc: pm

dn: cn=admin,dc=pm,dc=com
objectClass: organizationalRole
cn: admin

dn: ou=People,dc=pm,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=pm,dc=com
objectClass: organizationalRole
cn: Group

# ldapadd -x -D cn=admin,dc=pm,dc=com -W -f base.ldif

设置rstudio server和ldap账号同步一起工作_服务器_04

 

7.查看

# ldapsearch -x -LLL -H ldap:/// -b dc=pm,dc=com

设置rstudio server和ldap账号同步一起工作_服务器_05

dn(distinguished name):

可直译为专有名称,可以理解为一个路径,有三个属性分别是dc,ou,cn

dc(Domain Component):

可直译为域组件,例如一个DNS中被点分隔成的各个部分,pm.com ---> dc=pm,dc=com

ou(Organizational Unit):

可直译为组织单元,我们可以有多个组织单元。你可以在组织单元中组织用户组,也可以在组织单元中组织用户,你还可以在组织单元中组织组织单元。

cn(Common Name):

可直译为通用名,可理解为一个具体的实例,一般是用户名

一般按照CN - OU - DC的顺序,从具体的实例到最高级的域名,组成一个dn。

查找是逆序的,比如 cn=test,ou=People,dc=pm,dc=com可理解为文件系统的查找路径:/com/pm/People/test

8,安装openldap客户端

登录rstudio服务器,安装并配置openldap客户端

# yum install nss-pam-ldapd openldap-clients openldap -y
# authconfig --enableldap --enableldapauth --ldapserver="192.168.1.89" --ldapbasedn="dc=pm,dc=com" --update
# systemctl restart nslcd
# systemctl restart sshd

9,创建用户

# vim user.ldif

dn: uid=test,ou=People,dc=pm,dc=com
cn: test
sn: linux
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uidNumber: 1002
gidNumber: 1002
loginShell: /bin/bash
homeDirectory: /home/test
userPassword: {SSHA}vrndYB4LUei9Kj190fdNIHmE4fDwCOo4

dn: cn=test,ou=Group,dc=pm,dc=com
objectClass: posixGroup
cn: test
gidNumber: 1002
memberUid: test

# ldapadd -x -w 123456 -D 'cn=admin,dc=pm,dc=com' -f user.ldif

设置rstudio server和ldap账号同步一起工作_vim_06

此时登录到客户端可查看到此用户。

优化脚本思路:可通过命令ldapsearch -x -w 123456 -D 'cn=admin,dc=pm,dc=com' -b 'ou=People,dc=pm,dc=com'查看所有用户的信息,可将最大的uid筛选出来,在新建用户时+1即可。

10.删除用户

设置rstudio server和ldap账号同步一起工作_服务器_07

三、解决rstudio server和ldap无法通用

此时打开rstudio server无法使用通过ldap创建的用户登录

设置rstudio server和ldap账号同步一起工作_centos_08

修改pam配置文件

# cd /etc/pam.d

# mv rstudio rstudio.old

# cp login rstudio

# vim rstudio

在文末添加如下三行:

auth       sufficient     pam_ldap.so
account    required       pam_ldap.so
session    requisite      pam_ldap.so

重启服务:

# systemctl restart rstudio-server

登录测试:

设置rstudio server和ldap账号同步一起工作_客户端_09

原因:ldap不会自动创建家目录,先手动为用户创建一个家目录,即可正常登录。

四、设置自动创建家目录

在ldap服务端执行:

# yum install openssh-ldap -y

# cp /usr/share/doc/openssh-ldap-7.4p1/openssh-lpk-openldap* /etc/openldap/schema/
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openssh-lpk-openldap.ldif

在ldap客户端执行:

# yum install -y oddjob-mkhomedir oddjob openssh-ldap
# systemctl start oddjobd.service
# systemctl start messagebus
# authconfig --enablemkhomedir --update

确保在/etc/pam.d/password-auth和system-auth中有如下一行:

session     optional      pam_oddjob_mkhomedir.so umask=0077

重启服务:

# systemctl restart nslcd
# systemctl restart sshd