zoukankan      html  css  js  c++  java
  • 设置rstudio server和ldap账号同步一起工作

    环境(两台虚拟机):

    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

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

    3.配置schema

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

    # 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

    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

    7.查看

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

    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

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

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

    10.删除用户

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

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

    修改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

    登录测试:

    原因: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

  • 相关阅读:
    经典的标量子查询
    Perl 正则二
    v$sql和v$sqlarea
    Flex中TabNavigator隐藏和显示选项卡
    如何优化buffer_cache
    perl 限制用户操作
    perl 正则
    latch 为什么消耗CPU
    Oracle 写脏数据的不同场景
    block放入哪个hash bucket算法
  • 原文地址:https://www.cnblogs.com/1016391912pm/p/15252630.html
Copyright © 2011-2022 走看看