• OpenLDAP支持SAMBA特性


    内网群晖 NAS 由本地账号改成 OpenLDAP 认证,使用的 OpenLDAP 版本默认没有开启 samba 属性,因此不能使用账号进行 SMB 协议认证,也就是使用 \\IP\路径 的方式进行访问。如改成 FTP 的方式那共享中的图片将不能进行预览,要支持预览的话就需要下载专门的 FTP 的客户端进行访问,如 SmartFTP ,那这样一来体验就有所下降,综上决定对账号添加 SMB 特性。

    一、开启SMB特性

    OpenLDAP 和 Self-Service 使用容器安装,版本如下:

    系统版本OpenLDAPSelf-Service
    CentOS 7.6bitnami/openldap:2.4.56tiredofit/self-service-password

    1、安装SMB

    添加 SMB 属性到 OpenLDAP,可以通过引入Samba LDAP schema(模式)来获得此类属性。该模式已存在于现在安装的 SAMBA 包中,通过 ldif 格式来导入。

    # yum install samba -y 
    # find / -type f -name "samba.ldif"
    /usr/share/doc/samba-4.10.16/LDAP/samba.ldif
    # cp /usr/share/doc/samba-4.10.16/LDAP/samba.ldif /data/bitnami/conf/
    
    • 1
    • 2
    • 3
    • 4

    2、添加SMB特性

    # ldapadd -Q -Y EXTERNAL -H ldapi:/// -f samba.ldif
    adding new entry "cn=samba,cn=schema,cn=config"
    
    # 查看是否启用了samba
    # ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
    dn: cn=config
    
    dn: cn=module{0},cn=config
    
    dn: cn=schema,cn=config
    
    dn: cn={0}core,cn=schema,cn=config
    
    dn: cn={1}cosine,cn=schema,cn=config
    
    dn: cn={2}inetorgperson,cn=schema,cn=config
    
    dn: cn={3}nis,cn=schema,cn=config
    
    dn: cn={4}samba,cn=schema,cn=config
    
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    二、验证SMB访问

    1、添加SMB用户

    命令行添加支持 SMB 特性的用户,配置中关于 SMB 的字段不能缺失,缺失后将不支持 SMB 协议访问群晖 NAS

    控制台先在组织架构下建立一个 Entry,选择 Samba Domain

    在这里插入图片描述

    # cat ldapuser.ldif
    dn: cn=张三,cn=运维组,ou=发行系统,dc=ldap,dc=cn
    cn: 张三
    gidnumber: 1816016195
    homedirectory: /home/user/feb
    loginshell: /usr/sbin/nologin
    mail: zhangsan@ldap.cn
    objectclass: inetOrgPerson
    objectclass: top
    objectclass: posixAccount
    objectclass: shadowAccount
    objectclass: sambaSamAccount
    sambalmpassword: 123456
    sambantpassword: 123456
    sambapwdcanchange: 1660470662
    sambapwdlastset: 1660038662
    sambapwdmustchange: 1660039590
    sambasid: S-1-5-21-3004
    shadowwarning: 8
    sn: feb
    uid: feb
    uidnumber: 100268
    userpassword: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    # 进入到容器内部执行
    # ldapadd -h localhost -p 1389 -D "cn=admin,dc=ldap,dc=cn" -W -x -f ldapuser.ldif
    
    • 1
    • 2

    2、测试SMB访问

    Window 中使用如下方式访问,也就是使用 SMB 协议访问

    在这里插入图片描述

    三、修改SMB密码

    1、修改配置

    自助修改密码以 tiredofit/self-service-password 服务为例子,如果我们要支持修改密码的同时修改掉SAMBA 的密码,我们把配置如下注释打开即可。

    # vim htdocs/conf/config.inc.php
    ......
    # Samba mode
    # true: update sambaNTpassword and sambaPwdLastSet attributes too
    $samba_mode = true;
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、密码修改出错

    执行上述操作后,修改密码会出现如下操作,是因为 LDAP 管理员账号没有修改 SAMBA 属性相关的权限。

    在这里插入图片描述
    查看 PHP 日志会出现如下错误

    ......
    [16-Aug-2022 17:34:44] WARNING: [pool www] child 2600 said into stderr: "NOTICE: PHP message: LDAP - Modify password error 50 (Insufficient access)"
    ......
    
    • 1
    • 2
    • 3

    查看 OpenLDAP 日志会出现如下错误

    ......
    62f1dbfb conn=1016 op=3 SRCH base="cn=common-feb2,ou=sz,dc=ldap,dc=cn" scope=0 deref=0 filter="(objectClass=*)"
    62f1dbfb conn=1016 op=3 SRCH attr=userPassword
    62f1dbfb conn=1016 op=3 SEARCH RESULT tag=101 err=0 nentries=1 text=
    62f1dbfb conn=1016 op=4 MOD dn="cn=common-feb2,ou=sz,dc=ldap,dc=cn"
    62f1dbfb conn=1016 op=4 MOD attr=sambaNTPassword sambaPwdLastSet sambaPwdCanChange sambaPwdMustChange userPassword
    62f1dbfb conn=1016 op=4 RESULT tag=103 err=50 text=
    62f1dbfb conn=1016 op=5 UNBIND
    62f1dbfb conn=1016 fd=15 closed
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、添加修改权限

    # cat updatepass.ldif 
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcAccess
    olcAccess: to attrs=sambaNTPassword
            by dn="cn=admin,dc=ldap,dc=cn" write
            by dn.children="cn=admin,dc=ldap,dc=cn" write
            by anonymous auth
            by self write
            by * none
    olcAccess: to attrs=sambaPwdLastSet
            by dn="cn=admin,dc=ldap,dc=cn" write
            by dn.children="cn=admin,dc=ldap,dc=cn" write
            by anonymous auth
            by self write
            by * none
    olcAccess: to attrs=sambaPwdCanChange
            by dn="cn=admin,dc=ldap,dc=cn" write
            by dn.children="cn=admin,dc=ldap,dc=cn" write
            by anonymous auth
            by self write
            by * none
    olcAccess: to attrs=sambaPwdMustChange
            by dn="cn=admin,dc=ldap,dc=cn" write
            by dn.children="cn=admin,dc=ldap,dc=cn" write
            by anonymous auth
            by self write
            by * none
    olcAccess: to attrs=sambalmpassword
            by dn="cn=admin,dc=ldap,dc=cn" write
            by dn.children="cn=admin,dc=ldap,dc=cn" write
            by anonymous auth
            by self write
            by * none
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    # ldapmodify -Y EXTERNAL -H ldapi:/// -f updatepass.ldif
    
    • 1

    到这还是不能修改,因为在一开始为了修改支持修改密码我添加了一个 read 规则,这个规则是在当前 samba 规则前面,会导致修改 samba 密码时依旧报错 密码被 LDAP 服务器拒绝。所以我们必须调整一下 read 的位置,将 read 放在最后面。 直接通过命令行去调整配置的顺序目前还不了解,但是可以手动去调整该配置。

    这是在支持 SAMBA 属性修改之前的配置,目的是为了能在控制台修改密码,未加的修改密码依旧会报 密码被 LDAP 服务器拒绝 错误

    # cat updatepass.ldif 
    dn: olcDatabase={2}hdb,cn=config
    changetype: modify
    add: olcAccess
    olcAccess: to attrs=userPassword
            by dn="cn=admin,dc=ldap,dc=cn" write
            by dn.children="cn=admin,dc=ldap,dc=cn" write
            by anonymous auth
            by self write
            by * none
    olcAccess: to *
            by dn="cn=admin,dc=ldap,dc=cn" write
            by dn.children="cn=admin,dc=ldap,dc=cn" write
            by * read
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    先停止 OpenLDAP 服务,打开配置文件,进行手动修改

    # vim slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
    
    # 修改这个配置顺序,将一开始的 read 配置移到最后,并修改 {x} 的顺序,实际就是 olcAccess 后面括号的顺序问题
    ......
    olcAccess: {6}to attrs=* 
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    启动 OpenLDAP 服务,接下来修改密码就不会报 密码被 LDAP 服务器拒绝 的错误了。

  • 相关阅读:
    Blender+fSpy实现3D渲染结果与2D图像融合
    Java Seata使用常见错误
    旅游寄递自助化教程
    电容笔和触屏笔一样吗?高性价比电容笔排行
    访问Apache Tomcat的manager页面
    手写vue响应式
    如何查询一组文件夹中的总字节数 (LINQ) (C#)
    人工智能对决:ChatGLM与ChatGPT,探索发展历程
    反序列化漏洞介绍
    什么是Jmeter?Jmeter使用的原理步骤是什么?
  • 原文地址:https://blog.csdn.net/qq_25854057/article/details/126368155