AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1152778
Accepted
VladC
VladC
Asked: 2024-02-02 18:05:50 +0800 CST2024-02-02 18:05:50 +0800 CST 2024-02-02 18:05:50 +0800 CST

访问权限不足 (50) LDAP

  • 772

我试图在 OpenLDAP 服务器启动开始时执行自定义 .ldif 文件,并使用以下命令成功:

ldapadd -x -D cn=admin,dc=vlad,dc=lan -w admin -H ldap:// -f ldap/ldap-test.ldif

遗憾的是,我希望能够使用以下命令将自定义属性和对象类添加到架构中:

dn: cn=schema,cn=config
changetype: modify
add: olcObjectClasses
olcObjectClasses: ( 1.2.3.4.5.6.7.8.9.0 NAME 'myCustomObjectClass'
  DESC 'My Custom Object Class'
  AUXILIARY
  MAY ( customAttribute1 $ customAttribute2 $ customAttribute3 $
        customAttribute4 $ customAttribute5 $ customAttribute6 $
        customAttribute7 $ customAttribute8 $ customAttribute9 $
        customAttribute10 $ customAttribute11 $ customAttribute12 $
        customAttribute13 $ customAttribute14 $ customAttribute15 ) )

遗憾的是,它抛出了访问不足 50 错误。这是 slapcat -n0 的输出

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth manage by * break
olcRootDN: cn=admin,cn=config
structuralObjectClass: olcDatabaseConfig
entryUUID: 3e49b716-55fd-103e-8582-a14a85261557
creatorsName: cn=config
createTimestamp: 20240202095739Z
olcRootPW:: e1NTSEF9d3J4NGVYaUFvaGRmc2dDOXlqT0V0cEFmSWhZYklxWXo=
entryCSN: 20240202095739.321947Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20240202095739Z

dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=vlad,dc=lan
olcLastMod: TRUE
olcRootDN: cn=admin,dc=vlad,dc=lan
olcRootPW:: -----
olcDbCheckpoint: 512 30
olcDbMaxSize: 1073741824
structuralObjectClass: olcMdbConfig
entryUUID: 3e49fae6-55fd-103e-8589-a14a85261557
creatorsName: cn=admin,cn=config
createTimestamp: 20240202095739Z
olcDbIndex: uid eq
olcDbIndex: mail eq
olcDbIndex: memberOf eq
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq
olcDbIndex: objectClass eq
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth manage by * break
olcAccess: {1}to attrs=userPassword,shadowLastChange by self write by dn="cn
 =admin,dc=vlad,dc=lan" write by anonymous auth by * none
olcAccess: {2}to * by self read by dn="cn=admin,dc=vlad,dc=lan" wri
 te by dn="cn=user-ro,dc=vlad,dc=lan" read by * none
entryCSN: 20240202095739.438344Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20240202095739Z

如何才能使用 ldapadd 或 ldapmodify 运行上述命令?需要什么用户进行身份验证。

更新: dn: cn=schema,cn=config changetype: modify add: olcObjectClasses olcObjectClasses: ( 1.2.3.4.5.6.7.8.9.0 NAME 'myCustomObjectClass' DESC 'My Custom Object Class' AUXILIARY MAY ( name ) )

将上面的代码与命令一起使用: ldapmodify -Y EXTERNAL -H ldapi:// -f ldap/ldap-modify.ldif

一切似乎都很好,应该添加。

尝试使用该类:

dn: OU=CustomOU,DC=vlad,DC=lan
ou: CustomOU
objectClass: top
objectClass: organizationalUnit
objectClass: myCustomObjectClass

通过命令,它说:

ldapadd -x -D cn=admin,dc=vlad,dc=lan -w admin -H ldap:// -f ldap/ldap-test.ldif 

additional info: objectClass: value #2 invalid per syntax

并且在检查 slapcat -n0 时,似乎没有添加自定义对象。

ldap
  • 1 1 个回答
  • 89 Views

1 个回答

  • Voted
  1. Best Answer
    u1686_grawity
    2024-02-02T18:40:35+08:002024-02-02T18:40:35+08:00

    您有两个独立的数据库(“cn=config”数据库和“普通”数据库),您需要记住它们配置了不同的访问策略。

    该 DN仅cn=admin,dc=vlad,dc=lan被列为“普通”数据库的 rootDN – 它不会自动获得其他数据库的“root”权限 – 并且属性同样是按数据库设置的,仅授予该 DN 一些权限(并且是冗余的) “普通”数据库,而“配置”数据库则没有这些访问权限。olcAccess

    由于您要尝试修改 下的条目..., cn=config,因此必须首先查看“olcDatabase={0}config”的配置。它具有完全不同的 olcRootDN 用于“超级用户”访问(密码可能相同,也可能不同),并且其 olcAccess 属性仅授予对本地、UID 标识的连接的完全访问权限,而不授予您当前所在的 DN尝试绑定(登录)为。

    所以你有两个选择:

    • 要么绑定cn=admin,cn=config为该数据库的 rootDN(假设您知道密码):

       ldapmodify -x -D cn=admin,cn=config ...
      
    • 或者建立由您的 Linux UID 标识的本地连接(然后通过 olcAccess 授予访问权限)。访问列表指定 uidNumber=0 ,即 root,因此您需要“sudo”整个操作。

       sudo ldapmodify -H ldapi:// -Y EXTERNAL ...
      

      请注意,在这种情况下没有-x或;-D相反,您可以使用带有该选项的 SASL 绑定-Y。URLldapi://将通过本地 Unix 套接字进行连接,从而允许基于 UID 的身份验证工作。(如果是 TCP 连接,则 EXTERNAL 意味着 mTLS 客户端证书身份验证,这不是您在这里需要的。)

      这类似于 Postgres 和最近 MariaDB 的工作方式(例如,在 Debian 上,这样做sudo mariadb将立即以 MariaDB root 用户身份连接)。

    • 2

相关问题

  • Cygwin sshd 和 LDAP 身份验证

  • 从 OpenLDAP 检索操作属性

  • 为 Mac 网络使用 Linux 和 Open LDAP

  • 使用LDAP服务器身份验证的Linux中单个用户的多个登录名

  • 使用 smbldap 管理用户/组的 Web 前端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve