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 / 问题 / 1169010
Accepted
Bala Sambandam
Bala Sambandam
Asked: 2024-12-18 10:37:42 +0800 CST2024-12-18 10:37:42 +0800 CST 2024-12-18 10:37:42 +0800 CST

无法让 useradd 使用 LDAP

  • 772

操作系统是 Amazon Linux 2023。我尝试使用 LDAP 对所有新用户进行用户/组管理。我安装了 openldap-servers、openldap-clients 和 nss-pam-ldapd 软件包。我在 slapd 上配置了 SSL,并且

ldapwhoami -x -H ldaps://myserver.mydomain.com
ldapwhoami -x -H ldapi:///

均返回匿名。

sudo ldapwhoami -H ldapi:///

返回 dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth。

我已将 nsswitch.conf 设置为:

passwd:       ldap sss files
shadow:       ldap files
group:        ldap sss files

我已将 nslcd.conf 设置为:

uid root
gid root
uri ldapi:///
base dc=mydomain,dc=com

当我跑步时:

sudo useradd -b /home balaguru1

它似乎没有将用户添加到 LDAP 数据库。/var/lib/ldap/ 中的文件保持不变。/etc/passwd 已使用新用户进行了修改。

我错过了什么?

ldap
  • 1 1 个回答
  • 60 Views

1 个回答

  • Voted
  1. Best Answer
    grawity
    2024-12-18T13:47:37+08:002024-12-18T13:47:37+08:00

    nsswitch 接口是只读的——它没有名称服务模块可以提供的任何添加或修改操作,并且所有这些工具都直接对后端执行修改。

    例如,您的useradd工具是专门通过 /etc/passwd 和 /etc/shadow 更新本地帐户数据库而编写的,仅用于更新本地帐户数据库。(实际上,它来自“shadow”软件包,该软件包仅用于维护 passwd/shadow/group 文件。)

    您将需要一个不同的工具来管理 LDAP 帐户。¹


    ¹(我不知道还有什么会继续维护;我最终或多或少地编写了自己的代码。一个 shell 脚本ldapadd就可以工作。)

    看来我的实现没有支持标准 unix 用户字段的架构。例如,当我转储 cn=config 时,架构中没有主目录或 shell 的概念

    典型的 LDAP 实现设计为具有可配置模式;OpenLDAP 附带了几种传统的模式配置/etc/(open)ldap/schema。

    您正在寻找posixAccountobjectClass,正如您已经找到的那样,它位于nis架构文件中。但是,它是一个辅助类,通常附加到person或inetOrgPerson对象(在本例中来自cosine架构);尽管没有什么可以阻止您将其附加到device对象或applicationProcess对象。(后者是 OSI 和 X.500 的遗留,但在某种程度上适合表示例如需要自己的 LDAP 密码和/或自己的 POSIX 帐户的服务。)

    我尝试使用 ldif 文件创建用户,但收到“无此对象 (32)”错误。我猜这是因为我引用的 ou(人员和组)不存在。

    是的,您必须先创建“父”条目,然后才能将任何内容放在其下。如果您刚开始使用空数据库,您甚至需要创建与您的数据库后缀相对应的顶层条目(例如dc=example,dc=org作为objectClass: domain条目或o=My Little Org作为organization条目)。然后创建 OU 作为organizationalUnit对象 - 虽然不需要将用户和组放在 OU 下;可以在顶层条目下创建它们;无论如何,它们可以稍后移到 OU 中。

    (请注意,您只需添加DB 后缀之前的父级- 在此示例中无需添加dc=org。)

    假设您有一个如下配置的数据库条目:

    dn: olcDatabase={1}mdb,cn=config
    objectClass: olcDatabaseConfig
    olcSuffix: o=Widgets Corp
    

    这意味着您需要创建这些条目(假设您想要典型的 OU=Users 类型的层次结构):

    dn: o=Widgets Corp
    objectClass: organization
    
    dn: ou=People,o=Widgets Corp
    objectClass: organizationalUnit
    
    dn: cn=Fred Foobar,ou=People,o=Widgets Corp
    objectClass: inetOrgPerson
    objectClass: posixAccount
    cn: Fred Foobar
    givenName: Fred
    sn: Foobar
    uid: fredfoo
    uidNumber: 1001
    gidNumber: 1000
    homeDirectory: /home/fredfoo
    [...]
    

    而如果您有olcSuffix: dc=example,dc=com(AD 样式),则需要添加:

    dn: dc=example,dc=com
    objectClass: domain
    
    dn: ou=Users,dc=example,dc=com
    objectClass: organizationalUnit
    
    dn: uid=fredfoo,ou=Users,dc=example,dc=com
    objectClass: [...]
    

    (如果所有程序都支持“绑定为应用程序、搜索、绑定为用户”模型,那么是否使用dn: cn=或dn: uid=作为用户条目的 DN 取决于您。大多数程序都支持这种方式,因为这就是 Active Directory 所做的。但如果某些程序仅支持“根据uid=%s,ou=Users,etcDN 模板绑定”模型,则需要使用uid=。)

    • 1

相关问题

  • 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