我libnss_wrapper
在 docker 容器的入口点实现了此功能,以便“创建”通过 传递的用户docker run -u UID
。此脚本还创建了一个/etc/sudoers.d/USER
文件以允许 sudo 访问。
当我尝试运行时sudo
,出现错误sudo: you do not exist in the passwd database
。
我该怎么做才能告诉 sudo 使用$NSS_WRAPPER_PASSWD
而不是/etc/passwd
?
编辑正如@todd-c-miller 指出的那样,这是不可能的。正如他指出,可以使用适当的 NSS 模块,例如nss-alt文件(Fedora,...)或者nss-额外用户(Debian、Ubuntu)如果文件位于其他位置则允许使用。
答案1
由于 nss_wrapper 依赖于 LD_PRELOAD,因此您无法将其与 sudo 一起使用。动态链接器会忽略设置用户 ID 可执行文件(如 sudo)的 LD_PRELOAD(使用 su 之类的程序时也会遇到同样的问题)。
有关详细信息,请参阅 ld.so 手册中的“安全执行模式”描述。