HPC搭建手册(二)

集群用户权限控制

(一)OpenLdap 服务端安装与配置

  1. 安装OpenLdap服务端(管理节点)

    yum -y install openldap openldap-servers openldap-clients migrationtools
    
  2. OpenLdap 服务初始化

    sed -i -e 's/olcSuffix:.*/olcSuffix: dc=example,dc=edu/g' /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
    
    sed -i -e 's/olcRootDN:.*/olcRootDN: cn=admin,dc=example,dc=edu/g' /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
    
    echo 'olcRootPw: PASSWORD@EDU' >> /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
    
    sed -i -e 's/dn.base="cn=.*"/dn.base="cn=admin,dc=example,dc=edu"/g' /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif
    
    cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
    chown -R ldap.ldap /var/lib/ldap
    
    LDAP 超级管理员为 cn=admin,dc=example,dc=edu 密码为:PASSWORD@EDU
    
    systemctl restart slapd
    systemctl enable slapd
    
    cd /etc/openldap/schema/
    find . -name '*.ldif' -exec ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f {} \;
    
    cd /usr/share/migrationtools/
    sed -i -e 's/"ou=Group"/"ou=Groups"/g' migrate_common.ph
    
    sed -i -e 's/$DEFAULT_MAIL_DOMAIN = .*/$DEFAULT_MAIL_DOMAIN = "example.edu.cn";/g' migrate_common.ph
    
    sed -i -e 's/$DEFAULT_BASE = .*/$DEFAULT_BASE = "dc=example,dc=edu";/g' migrate_common.ph
    
    sed -i -e 's/$EXTENDED_SCHEMA = 0;/$EXTENDED_SCHEMA = 1;/g' migrate_common.ph 
    
    ./migrate_base.pl > /root/base.ldif
    ldapadd -x -w PASSWORD@EDU -D "cn=admin,dc=example,dc=edu" -f /root/base.ldif
    
  3. 生成系统用户、用户组 ldif

    tail -n 5 /etc/passwd > system
    tail -n 10 /etc/group > group
    /usr/share/migrationtools/migrate_passwd.pl system people.ldif
    /usr/share/migrationtools/migrate_group.pl group group.ldif
    ldapadd -x -w PASSWORD@EDU -D "cn=admin,dc=example,dc=edu" -f /root/people.ldif
    ldapadd -x -w PASSWORD@EDU -D "cn=admin,dc=example,dc=edu" -f /root/group.ldif
    
  4. 添加密码策略模块

    vim addmodule.ldif
    dn: cn=module,cn=config
    cn: module
    objectClass: olcModuleList
    olcModulePath: /usr/lib64/openldap
    olcModuleLoad: ppolicy.la
    
    ldapadd -Y EXTERNAL -Q -H ldapi:/// -f addmodule.ldif
    
  5. 添加访问权限

    vim addAccess.ldif
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=default,ou=pwpolicies,dc=example,dc=edu" write by anonymous auth by * read
    olcAccess: {1}to * by self write by dn="cn=default,ou=pwpolicies,dc=example,dc=edu" write by * read
    
    ldapadd -Y EXTERNAL -Q -H ldapi:/// -f addAccess.ldif
    
  6. 添加策略重写

    vim overlay.ldif
    dn: olcOverlay=ppolicy,olcDatabase={2}hdb,cn=config
    objectClass: olcPPolicyConfig
    olcOverlay: ppolicy
    olcPPolicyDefault: cn=default,ou=policy,dc=example,dc=edu
    olcPPolicyHashCleartext: True
    olcPPolicyUseLockout: True
    olcPPolicyForwardUpdates: FALSE
    structuralobjectClass: olcPPolicyConfig
    creatorsName: cn=config
    
    ldapadd -Y EXTERNAL -Q -H ldapi:/// -f overlay.ldif
    
  7. 配置SSL

    cd /etc/openldap/cacerts
    #生成证书
    创建CA
    openssl genrsa -out private/cakey.pem 2048
    chmod 600 private/cakey.pem
    openssl req -new -x509  -days 36500 -key private/cakey.pem -out cacert.pem
    cp /etc/pki/tls/openssl.cnf ./
    touch index.txt
    echo "01" > serial
    
    生成服务器私钥
    openssl genrsa -out ldapserverkey.pem 2048
    生成请求文件
    openssl req -new -key ldapserverkey.pem -out ldapserver.csr
    
    vim openssl.cnf
    修改第42行, 目录修改为当前目录
    
    签署证书
    openssl ca -days 36500 -cert cacert.pem -keyfile cakey.pem -in ldapserver.csr -out ldapserver.crt -config openssl.cnf
    
    mkdir /etc/openldap/certs
    
    cp ldapserver.crt ldapserverkey.pem /etc/openldap/certs/
    
    #OpenLdap配置证书
    vim ~/certs.ldif
    dn: cn=config
    changetype: modify
    add: olcTLSCertificateFile
    olcTLSCertificateKeyFile: /etc/openldap/certs/ldapserver.crt
    
    dn: cn=config
    changetype: modify
    add: olcTLSCACertificateFile
    olcTLSCACertificateFile: /etc/openldap/cacerts/cacert.pem
    
    dn: cn=config
    changetype: modify
    add: olcTLSCertificateKeyFile
    olcTLSCertificateKeyFile: /etc/openldap/certs/ldapserverkey.pem
    
    ldapmodify -Y EXTERNAL  -H ldapi:/// -f certs.ldif
    
    vim /etc/sysconfig/slapd
    SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"
    
    重启slapd 服务
    systemctl restart slapd
    
  8. 添加密码策略

    vim ppolicyadd.ldif
    
    dn: cn=default,ou=ppolicy,dc=example,dc=edu
    cn: default
    objectClass: pwdPolicy
    objectClass: person
    pwdAllowUserChange: TRUE
    pwdAttribute: userPassword
    pwdExpireWarning: 259200
    pwdFailureCountInterval: 0
    pwdGraceAuthNLimit: 5
    pwdInHistory: 5
    pwdLockout: TRUE
    pwdLockoutDuration: 300 
    pwdMaxAge: 2592000
    pwdMaxFailure: 5
    pwdMinAge: 0
    pwdMinLength: 8
    pwdMustChange: TRUE
    sn: summy value
    
    ldapadd -x -D "cn=admin,dc=example,dc=edu" -w PASSWD@EDU -f ppolicyadd.ldif
    

(二)OpenLdap 客户端部分配置

  1. 安装相关组件

    yum install sssd

  2. 配置名称服务交换机

    vim /etc/nsswitch.conf
    # looked up first in the databases
    #
    # Example:
    #passwd:    db files nisplus nis
    #shadow:    db files nisplus nis
    #group:     db files nisplus nis
    
    passwd:     files sss        # 修改这
    shadow:     files sss        # 修改这
    group:      files sss        # 修改这
    #initgroups: files sss
    
    #hosts:     db files nisplus nis dns
    hosts:      files dns myhostname
    
    # Example - obey only what nisplus tells us...
    #services:   nisplus [NOTFOUND=return] files
    #networks:   nisplus [NOTFOUND=return] files
    #protocols:  nisplus [NOTFOUND=return] files
    #rpc:        nisplus [NOTFOUND=return] files
    #ethers:     nisplus [NOTFOUND=return] files
    #netmasks:   nisplus [NOTFOUND=return] files
    
    bootparams: nisplus [NOTFOUND=return] files
    
    ethers:     files
    netmasks:   files
    networks:   files
    protocols:  files
    rpc:        files
    services:   files sss
    
    netgroup:   files sss        # 修改这
    
    publickey:  nisplus
    
    automount:  files sss        # 修改这
    aliases:    files nisplus
    
  3. 配置PAM

    authconfig --enablesssdauth --update

  4. 配置SSSD服务

    配置参考:

    vim /etc/sssd/sssd.conf(如果没有就新建)
    [domain/default]
    autofs_provider = ldap
    cache_credentials = True
    ldap_search_base = dc=example,dc=edu
    id_provider = ldap
    auth_provider = ldap
    chpass_provider = ldap
    ldap_uri = ldaps://192.168.101.1:636
    ldap_chpass_uri= ldaps://192.168.101.1:636
    ldap_id_use_start_tls = True
    ldap_tls_cacertdir = /etc/openldap/cacerts
    ldap_schema = rfc2307bis
    ldap_default_bind_dn= cn=admin,dc=example,dc=edu
    ldap_default_authtok= PASSWD@EDU
    ldap_tls_reqcert= allow
    access_provider = ldap
    ldap_pwd_policy = shadow
    ldap_access_order = pwd_expire_policy_renew
    ldap_account_expire_policy= shadow
    ldap_chpass_update_last_change = True
    [sssd]
    services = nss, pam, autofs
    config_file_version = 2
    domains = default
    [nss]
    homedir_substring = /rhome/
    [pam]
    reconnection_retries = 3
    offline_credentials_expiration = 2
    offline_failed_login_attempts = 3
    offline_failed_login_delay = 5
    
  5. 启动SSSD 服务并测试

    systemctl start sssd
    systemctl enable sssd
    
    使用LDAP Admin 连接Ldap,在LDAP中新建用户,新建完毕后,若在终端中执行如下命令:
    id [用户名] 
    可以获得UID以及用户组,则表示成功。
    
    注意:
    当在LDAP中设置用户 shadowLastChange 为0时,则强制用户登录时修改密码。
    

(三) 限制用户访问无计算任务的节点

  1. 确认相关so文件存在

find / -name pam_slurm_adopt.so 若存在文件,且位置在/usr/lib64/security/,则继续

  1. 编辑/etc/pam.d/sshd

在如下位置,添加内容。

auth include password-auth
#newadd-start
account sufficient pam_listfile.so item=user sense=allow file=/etc/ssh/allowed_users onerr=fail
account required pam_slurm_adopt.so
#newadd-end
account required pam_nologin.so
  1. 新建 /etc/ssh/allowed_users 白名单

编辑sshd用户白名单文件。在步骤3完成后,所有用户(root除外)在没有作业运行的情况下是不能ssh登陆计算节点的。如果想对某些用户进行进行排除(即不受pam配置限制),可以在/etc/ssh/allowed_users中添加。

vim /etc/ssh/allowed_users
root
youruser

chmod 600 /etc/ssh/allowed_users
  1. 修改其他Pam配置

    在 system-auth、passowrd-auth 中注释掉以下内容
    
    account sufficient pam_localuser.so
    -session optional pam_systemd.so
    
  2. 确保SSH 使用了PAM

    cat /etc/ssh/sshd_config | grep UsePAM 结果应为 UsePAM yes

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容