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 / 问题

问题[nss](server)

Martin Hope
mveroone
Asked: 2021-08-21 01:06:58 +0800 CST

nss-pam-ldapd 密码验证仅在使用 `su` 时在 CentOS 7 上不起作用

  • 0

语境

我这里有 2 台不同的机器,它们的主要区别是一个运行 CentOS6,另一个运行 CentOS7。两者都运行最新的可用分发版本的 lib:COS7 为 0.8.13,CentOS6 为 0.7.5 两者都运行“正常”配置的 nss-pam-ldapd:

/etc/nslcd.conf

uid nslcd
gid ldap

uri ldap://ldap.example.org/
base dc=example,dc=org

ssl no
tls_cacertdir /etc/openldap/cacerts
idle_timelimit 240

base   group  ou=groups,dc=example,dc=org

binddn cn=Readonly,dc=example,dc=org
bindpw **************

服务器权限:

olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=cube-net,dc=org" write by dn="cn=Readonly,dc=example,dc=org" none by anonymous auth by self write by * none
olcAccess: {1}to dn.base="cn=Readonly,dc=example,dc=org" by dn="cn=Manager,dc=example,dc=org" write by * none
olcAccess: {2}to dn.base="" by * read
olcAccess: {3}to * by dn="cn=Manager,dc=example,dc=org" write by dn="cn=Readonly,dc=example,dc=org" read by self write by * read

问题

我可以很好地查找用户,但我无法以su在 CentOS 7 上使用的用户身份登录。我得到:

mveroone@vm:~$ passwd
Changing password for user mveroone.
(current) LDAP Password: 
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
mveroone@vm:~$ su - mveroone
Password: 
su: Permission denied
mveroone@vm:~$ ssh localhost
Authorized uses only. All activity may be \ monitored and reported.
mveroone@localhost's password: 
Last login: Fri Aug 20 16:10:24 2021

Authorized uses only. All activity may be \ monitored and reported.
mveroone@vm:~$ 

所以是的,我可以使用 SSH 登录,更改我的密码,但不能使用 su。

我试过的

使用简单的绑定方法在两台服务器上执行 aldapwhoami工作,但不是 SASL(无可用机制)

root@vm:~# ldapwhoami -D uid=user,ou=users,dc=example,dc=org -W -H ldap://ldap.example.org  
Enter LDAP Password: 
dn:uid=user,ou=users,dc=example,dc=org

nslcd -d在尝试使用密码验证时运行su仅在 COS7 中显示:

nslcd: DEBUG: accept() failed (ignored): Resource temporarily unavailable

尽管根据几个邮件列表线程,这似乎是一个可以忽略的错误。

当使用附加调试()运行 nslcd 时nslcd -dd,我可以看到它首先尝试与用户绑定,这成功了,然后它搜索'(objectClass=*)',过滤属性:dn和 base = 本身有效:

ldap_free_request (origid 1, msgid 1)
ldap_parse_result
ldap_msgfree
ldap_search_ext
put_filter: "(objectClass=*)"
put_filter: simple
put_simple_filter: "objectClass=*"
ldap_build_search_req ATTRS: dn
ldap_send_initial_request
ldap_send_server_request
ldap_result ld 0x7f7a9800cf60 msgid 2
wait4msg ld 0x7f7a9800cf60 msgid 2 (timeout 10000000 usec)
wait4msg continue ld 0x7f7a9800cf60 msgid 2 all 0
** ld 0x7f7a9800cf60 Connections:
 * host: ldap.example.org  port: 389  (default)
  refcnt: 2  status: Connected
  last used: Fri Aug 20 11:42:05 2021


** ld 0x7f7a9800cf60 Outstanding Requests:
 * msgid 2,  origid 2, status InProgress
   outstanding referrals 0, parent count 0
  ld 0x7f7a9800cf60 request count 1 (abandoned 0)
** ld 0x7f7a9800cf60 Response Queue:
   Empty
  ld 0x7f7a9800cf60 response count 0
ldap_chkResponseList ld 0x7f7a9800cf60 msgid 2 all 0
ldap_chkResponseList returns ld 0x7f7a9800cf60 NULL
ldap_int_select
read1msg: ld 0x7f7a9800cf60 msgid 2 all 0
read1msg: ld 0x7f7a9800cf60 msgid 2 message type search-entry
ldap_get_dn
nslcd: [0e0f76] <authc="user"> DEBUG: ldap_result(): uid=user,ou=users,dc=example,dc=org
ldap_msgfree
ldap_abandon 2
ldap_abandon_ext 2
do_abandon origid 2, msgid 2
ldap_msgdelete ld=0x7f7a9800cf60 msgid=2
ldap_free_request (origid 2, msgid 2)
ldap_free_connection 0 1
ldap_free_connection: refcnt 1
ldap_msgfree
nslcd: [0e0f76] <authc="user"> DEBUG: ldap_unbind()
ldap_unbind

所以路径是:

  • 绑定(确定)
  • 搜索自己的DN(ok)
  • 放弃
  • 解绑

然后告诉我它无法验证用户。(“权限被拒绝”,所以它与“身份验证失败”不同)我执行了一个数据包捕获,它显示了同样的事情。

我已经尝试通过 nslcd 的 0.8.x 版本的变更日志来查看是否发生了一些变化,但是有很多变化,没有足够的细节。

pam-ldap nss
  • 1 个回答
  • 218 Views
Martin Hope
JellyTea
Asked: 2021-07-21 05:22:56 +0800 CST

NSS 响应者未使内存缓存失效

  • 3

我正在删除一个用户。

# userdel u1
The memcache was not invalidated by nss responder.

但最终用户被删除。"The memcache was not invalidated by nss responder" 是什么意思?

软呢帽 34

谢谢

user-management memcached sssd nss
  • 1 个回答
  • 1273 Views
Martin Hope
javanix
Asked: 2021-06-02 09:47:10 +0800 CST

OpenSSH / NSS 如何确定用于具有多个 DNS 条目的主机名的地址?

  • 2

假设我有一些具有多个地址的设备(由于 AD 和 VMWare NAT 名称解析的某种组合,但这并不密切):

[centos@localhost ~]$ getent hosts my-weird-AD-device.company.com
192.168.1.10   my-weird-AD-device.company.com
192.168.4.13   my-weird-AD-device.company.com

我有路由到的地址是192.168.1.10,来自与 相同网段上的设备192.168.4.13。

如果我尝试直接 SSH 到192.168.1.10,一切正常,但通过主机名SSH失败,因为它尝试连接到192.168.4.13.

...
debug2: resolving "my-weird-ad-device.company.com" port 22
debug1: Connecting to my-weird-ad-device.company.com [192.168.4.13] port 22.

我可以从 SSH 客户端以某种方式控制这种行为吗?我不想将 IP 硬编码到~/.ssh/config或者/etc/hosts因为工作 IP 不是静态的 - 如果可能的话,我想通过名称查找来做到这一点。

centos ssh nss
  • 1 个回答
  • 112 Views
Martin Hope
rm95
Asked: 2021-04-22 09:02:44 +0800 CST

将 LDAP 组文件的权限授予特定用户

  • -1

情况如下:

  • 我希望用户usr在系统中的任何位置都具有组grp的相同权限。
  • grp不是本地组,它来自我无法控制的 LDAP 服务器。

我对 Linux 没有太多经验,所以我做了一些研究,发现了两种可能的方法来实现这一点:

  • 创建一个同名的本地组,并使usr成为其中的一部分。但是,我不太确定这将如何影响来自原始grp的远程用户。我是否需要更改 NSS 配置文件才能使其正常工作?在这种情况下,配置应该是什么?
  • 使用 ACL 授予usr权限。我的问题是它看起来有点复杂。据我所知,没有自动的方法来做我想做的事,我必须制作一个遍历文件系统的脚本,检查每个文件和目录的组权限,然后给usr相同的权限。我是否遗漏了什么,或者这将是唯一的方法?
linux permissions ldap access-control-list nss
  • 1 个回答
  • 502 Views
Martin Hope
Brian Bauman
Asked: 2021-03-05 16:42:07 +0800 CST

为 SSH 和 Samba 身份验证设置可组合 POSIX 组的最简单方法是什么?

  • 2

背景

我将我认为是相当普通的基础设施块放在一起,但遇到了很多问题,我不禁想知道是否有更简单的方法。


我需要能够执行以下操作:

  • 使用委派身份验证和基于组的权限将文件从 Linux 服务器安全地共享给 OSX、Linux 和 Windows 计算机上的数百名用户。
  • 允许基于组的 SSH 访问数十个 Linux 服务器,具有委派的身份验证和基于组的权限。
  • 能够创建由其他组和用户组成的组,最好是任意深度。
  • 能够允许基本任务的自助服务(密码更改和恢复,个人信息的有限编辑等)
  • 能够以最少的配置迁移现有服务器(运行各种 Linux 风格) - 因此尽可能坚持“标准”配置,尤其是客户端。

我希望能够选择执行以下操作:

  • 除基于密码的身份验证外,还支持公钥身份验证

对我来说,上述所有听起来都像是 LDAP + Samba 是唯一可行的方法,尤其是因为之前的实现使用了 FreeIPA/Samba。团队决定使用 OpenLDAP 和 LDAP Account Manager 来提供身份验证和目录服务,但实施过程却是一场噩梦。


OpenLDAP 设置

我的目录树具有以下结构:

 - dc=example,dc=com
   - ou=groups
     - cn=groupA
     - ...
   - ou=policies
     - cn=passwordDefault
     - ...
   - ou=services
     - cn=service1
     - ...
   - ou=users (
     - uid=user1
     - ...

用户有以下类别:

  • inetOrgPerson(结构)
  • posixAccount
  • 影子账户
  • sambaSamAccount
  • ppolicyUser
  • 密码自复位
  • ldapPublicKey
  • 一般信息

用户工作得很好。大多数 Linux 机器都使用sshd -> libpam-ldap -> libnss-ldapd -> nscd -> nslcdand coreutils -> libnss-ldapd -> nscd -> nslcd,因此getent passwd根本id [username]不需要任何特殊配置即可工作。

服务有以下类:

  • applicationProcess(结构)
  • 简单安全对象

服务只是内部服务(如 Gitlab)的简单 DN/pw 实体,可以直接联系 LDAP,这样我们就可以关闭匿名绑定而不切断它们。他们也工作得很好。(注意 - 一些服务实际上需要作为 POSIX 帐户存在,因此为简单起见将它们配置为用户)

策略是诸如密码策略之类的实体,它们不在此问题的范围内。

组一直是真正的问题,因此我将在下一节中详细讨论它们。


团体的问题

无论我做什么,我似乎都无法创建可组合的 POSIX 兼容组。在这种情况下,我使用“可组合”来表示以下内容。假设配置了这些组 - GroupA(User1、User2、User3)、GroupB(User4、User5)和 GroupC(User1、User5)。可组合组将允许创建动态 GroupD (GroupA, GroupC),有效成员资格为 (User1, User2, User3, User5)。 理想情况下,GroupD 也可以定义为 (GroupA, GroupC, User6)。此外,理想情况下,您可以继续嵌套多于一层的组。

OpenLDAP 和 LAM 有一些工具似乎适用于这类事情,但我不断遇到模式问题、设计问题、实现问题或三者的某种组合。

  • dynlist - 这个 OpenLDAP 覆盖允许您基于 LDAP 过滤器即时填充属性列表。您甚至可以拥有由用户和其他组组成的混合组!不幸的是,覆盖仅在直接查看它所附加的实体时触发。这意味着getent group [group](直接查看一个或多个组)有效,但groups [user](搜索用户在组中的存在)无效。nss这使得如果不将您自己的映射层或其他 LDAP 使用者写入,就不可能基于动态组进行 SSH 。此外,可能出于类似原因,您无法从其他 dynlist 组创建 dynlist 组。

  • memberof - 此 OpenLDAP 覆盖将自动更新memberOf用户的属性,以对应用户在组中的添加和删除。然而,它似乎需要使用基于 RFC2307 的类以外的组类posixGroup,因为它memberof需要基于 DN 的成员资格,而不是基于 uid 的成员资格。它实际上也无助于管理组本身。

  • 自动组 - 此OpenLDAP覆盖将自动从可配置属性中添加或删除用户 DN,对应于用户在可配置 LDAP 过滤器结果中的存在或不存在。这个覆盖似乎需要memberof安装,因为autogroup除非我包含olcAGmemberOfAd配置属性,否则安装会失败。它似乎也需要基于 DN 的成员资格,所以memberof它需要一个基于 RFC2307 以外的类posixGroup

我最初尝试使用 class 实现静态组posixGroup (structural),并使用附加labeledURIObject类来附加dynlist过滤器的动态组。这基本上奏效了,但我遇到了dynlist上面列出的缺点。

然后我尝试改用autogroup覆盖,但遇到了似乎需要基于 DN 的成员资格的问题。在这一点上,我觉得我必须尝试摆脱posixGroup结构类,因为似乎没有任何东西支持它。LAM似乎更喜欢使用 和 的组合groupOfNames,因为它包含一个功能,当两个属性都存在于同一个对象上时RFC2307bis-posixGroup,它可以自动member将属性与属性同步。memberUid所以我修改了posixAccountOpenLDAP 附带的模式,使其成为辅助而不是结构,并使用groupOfNames(结构)和修改的posixAccount类创建组。破解 OpenLDAP 的objectClass使用 RFC2307bis-esque 类来欺骗它的模式感觉就像 Not The Right Thing To Do™,但 OpenLDAP/LAM 似乎接受了它。这样做也使我能够memberof成功安装,这很好。

autogroup,但是,只有一半有效。虽然它会将用户添加到动态组(使用 可见groups [user]),但在将用户从基本组中删除时不会将其删除。 groupOfNames还要求其members字段始终至少有一个用户在其中,这对于与autogroup. 您必须使用初始设置它,但是一旦锁定属性member就无法删除虚拟成员。autogroupmember


配置

cn=模块{0},cn=配置

dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_mdb
olcModuleLoad: {1}ppolicy
olcModuleLoad: {2}autogroup
olcModuleLoad: {3}memberof

olcOverlay={1}memberof,olcDatabase={1}mdb,cn=config

dn: olcOverlay={1}memberof
objectClass: top
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcMemberOf
olcOverlay: {1}memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

olcOverlay{2}autogroup,olcDatabase={1}mdb,cn=config

olcOverlay: {2}autogroup
structuralObjectClass: olcAutomaticGroups
olcAGattrSet: {0}labeledURIObject labeledURI member
olcAGmemberOfAd: memberOf

问题

最具体到最少:

  1. 为什么autogroup能够将用户添加到动态组,但不能删除它们?
  2. 有没有更简单的方法来实现这个用例?
  3. 我是否使用了错误的工具来完成这项工作?使用不同的 LDAP 实现、一些简单的客户端配置或完全非 LDAP 的东西,这个用例会更容易吗?
ldap openldap pam nss
  • 1 个回答
  • 509 Views
Martin Hope
user1210304
Asked: 2021-02-06 05:08:53 +0800 CST

使用任何应用程序升级 NSS 后无法使用自签名证书访问网站

  • 1

我们最近将 NSS 从版本 3.44 ( nss-3.44.0-4.el7.x86_64) 升级到版本 3.53 ( nss-3.53.1-3.el7_9.x86_64)。此次升级后,对我们内部网站的任何使用自签名证书的调用都会失败。卷曲或尝试使用 GIT 等任何应用程序访问时,我们会看到以下错误 -

#When Curling
curl https://internalsite.com -k
curl: (35) security library: invalid arguments.

#When using GIt
git clone https://internalsite.com/stash/scm/repo/my_repo.git
Cloning into 'my_repo'...

fatal: unable to access 'https://internalsite.com/stash/scm/repo/my_repo.git/': security library: invalid arguments.

降级回 NSS 3.44 时,问题已解决。如果我们访问一个不使用自签名证书的站点,它会按预期工作。

有没有人有任何想法如何解决?我读到的所有内容都说这些更改是向后兼容的,所以我不明白为什么我们需要再次将证书导入 NSSDB。即使在导入之后,我也看到了同样的错误。

故障排除时,我将证书/密钥转换为 PK12 ( openssl pkcs12 -export -out certandkey.pfx -inkey /home/me/stuff/cert.key -in cert.pem),然后使用pk12util -i certandkey.pfx -d sql:/etc/pki/nssdb. 这样做之后,我仍然看到同样的问题。

谢谢。

linux nss
  • 1 个回答
  • 588 Views
Martin Hope
Christoph
Asked: 2016-06-08 03:25:23 +0800 CST

ldap 和 getent 或 repquota 的奇怪行为

  • 0

我在我的网络中观察到一种奇怪的行为。

我将我的网络用户存储在 OpenLDAP 2.4 中,它也为 samba 3.6 域提供服务。

我的 NFS 服务器上有用户配额,这就是我偶然发现“问题”的地方。

当我调用repquota -up它时,它会显示数字 ID,而不是某个数字 ID 的 uid。

如果我调用repquota -upC所有 LDAP 用户 UID 都会显示,所以我认为目前这不是一个真正的问题。

据我所知,一切正常。我可以登录,id显示正确的信息。ls还显示正确的 UID 而不是数字 ID。

到目前为止,repquota -up可以重现来自的行为,即不显示某个点之后的 LDAP 用户。genent passwd

而且,在进一步考虑这一点时,我们也有问题,那个手指只能在两个方向上工作,直到有问题的 UID。这意味着,这finger <Realname>只会为具有较小(因此较旧的数字 ID)的用户产生结果。finger uid总是产生正确的结果。

我继续阅读nscd并nslcd玩弄了 nscd max-db-size,但这并没有改变。我nscd在所有执行 LDAP 身份验证的机器上安装并运行,但只安装nslcd在一台机器上以试验这个问题。

操作系统从 Debian 7 和 8 到 Ubuntu Server LTS 14.04 和 16.04 不等。我使用 libnss-ldap 和 libpam-ldap。

正如我所说,我没有真正的问题,除了,如果用户超过配额,我有时只会看到数字 ID。我可以通过更改repquota. 但我有点害怕,我有一些错误配置,可能会在某些时候导致问题。

所以我的问题是,如果有人知道我可以在哪里解决这个问题?或者,如果这是某种预期的行为。目前我不知道在哪里寻找线索。

干杯,克里斯托夫

ldap quota pam-ldap nss
  • 1 个回答
  • 334 Views
Martin Hope
Shtééf
Asked: 2010-04-17 12:36:59 +0800 CST

`shadow` 组是做什么用的?

  • 7

在我的 Ubuntu 9.10 系统上,有一个shadow系统组。似乎根本没有任何用户分配给该组。我能找到属于该组的唯一文件是/etc/shadow和/etc/gshadow.

我知道这些文件的目的是单独存储密码,让那些passwd出于其他原因仍可能想要访问的普通用户无法访问。

但是shadow 组的目的是什么?

我对此感到好奇的原因是因为我正在考虑将其配置nsswitch.conf为将其存储在其他地方,并且想知道是否有任何东西实际上正在尝试使用组凭据访问shadow数据库。shadow

linux ubuntu groups shadow nss
  • 3 个回答
  • 19609 Views
Martin Hope
Insyte
Asked: 2010-03-24 12:22:29 +0800 CST

将其用于 PAM/NSS 时处理 LDAP 故障?

  • 3

我使用一对冗余的 OpenLDAP 服务器通过 NSS 进行 PAM 身份验证和目录服务。到目前为止,它是 100% 可靠的,但没有什么能永远完美运行。

我现在应该采取哪些步骤,以便有机会从 LDAP 服务器的故障中恢复?在我的非正式测试中,似乎即使已经过身份验证的 shell 在很大程度上也没用,因为所有用户名/uid 查找都会挂起,直到目录服务器恢复。

到目前为止,我只想到了两件事:

  1. 不要在 LDAP 服务器本身上使用 NSS-LDAP 和 PAM-LDAP。
  2. 在仅接受来自我们本地子网的公钥身份验证的所有盒子上创建一个根级帐户,并很好地保护该密钥。我不确定这对我有多大好处,因为一旦我登录,我怀疑我将无法完成任何事情,因为所有用户 ID 查找都会挂起。

还有其他建议吗?

ldap pam nss
  • 1 个回答
  • 552 Views

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