如何修复 sudo:setreuid(ROOT_UID,user_uid):操作不允许错误?

如何修复 sudo:setreuid(ROOT_UID,user_uid):操作不允许错误?

我在 Ubuntu 11.10 服务器上使用 LDAP 身份验证。我安装了 libpam-ldap,并进行了相应的配置。它运行良好,只是我每次尝试 sudo 时都会收到此错误:

sudo: setreuid(ROOT_UID, user_uid): Operation not permitted

我知道我已正确设置了 sudoers,因为它大多数时候都能正常工作。这不仅仅是我的登录问题,其他人也和我一样遇到同样的问题。当出现此错误时,我根本无法使用常规系统用户进行 ssh 登录。当我直接登录时,我无法启动任何 gnome 终端。

一旦我重新启动服务器,问题就消失了。当然,这不是解决方案,如果是生产服务器,我就有麻烦了。

我该如何解决?

编辑 3/1/12:我刚刚发现,如果停止并启动 nscd 服务,问题就会消失。

service nscd stop
service nscd start

没有很好的解决方案,因为我必须直接登录到服务器,而不是通过 ssh。

答案1

这是一个已知错误这是 Debian(以及 Ubuntu)从使用OpenSSL加密传输协议OpenLDAP由于许可困难OpenSSL问题在于libgcrypt(当前加密后端加密传输协议) 初始化。这个问题自Ubuntu 9.10但还没有真正得到解决,因为上游加密传输协议正在从libgcrypt(显然还有其他问题)切换到库尼特尔。在此更改向下游进行之前,有三种可能的解决方法,所有这些解决方法都列在错误报告多于。

  1. 编译 libgnutls26从源头到使用 libnettle代替libgcrypt
  2. 编译 libldap从源头到使用 openssl代替gnutls26
  3. 使用 libnss-ldapd而不是libnss-ldap。这有几种变体。第一种使用作为依赖项libpam-ldap引入,这会使配置变得复杂。第二种使用不完整。它尤其缺乏所有libnns-ldaplibpam-ldapdpam_*配置允许限制用户子集。为了克服这一缺陷,您可以将 nssov 覆盖与 slapd 一起使用,但这不包含在 Ubuntu 的 slapd 中(因此您需要从源代码编译)。libpam-ldapd使用nslcd守护进程来处理 ldap 查找;因此它使用/etc/nslcd.conf 而不是/etc/ldap进行配置。特别值得注意的是,您可以使用来pam_authz_search限制授权。man nslcd.conf有关详细信息,请参阅。还有一个相当不错的操作方法这里, 和这里如果需要配置startTLS。

更新:截至 2012 年 5 月 29 日,建议的存储库中有一个错误修复可用清醒纳蒂, 和梦境。这解决了 LDAP 登录的问题;然而,截至 2012 年 9 月 6 日,此新补丁已被证明会破坏其他软件包1,并已被删除。此外,如这个错误,使用 nscd 的解决方法不再有效。这是一个不幸的回归,更糟糕的是,这个问题并没有真正得到解决精确的量子。最终,唯一真正的解决办法是放弃libgcrypt11libnettle4较新libgnutls28精确的量子已经这样做了,但libldap仍然使用libgnutls26

指示编译 libgnutls26来源在评论中解释2223, 和24此错误报告。但这些说明似乎只适用于精确的

答案2

不安全的措施:禁用 SSL

相关内容