如何检查哪个包/进程更新了 nsswitch?

N. *_*. J 4 ldap apt

我的 /etc/nsswitch.conf 遇到问题。我无法再使用 sudo 作为我的个人用户 (ldap)。

我检查了 dpkg.log,似乎对软件包进行了一些升级,与 /etc/nsswitch.conf 修改的日期相匹配。

如何进一步验证哪个包编辑了 /etc/nsswitch.conf?当我运行 grep -rHi nsswitch /var/log 时,我没有得到任何有用的结果。

我怀疑 sudo-ldap,但我不确定。

编辑:我发现了这个:https://answers.launchpad.net/ubuntu/+source/sudo/+question/706189。但是,我想知道是否可以在系统本身上解决这个问题!

ste*_*ver 5

包修改文件的方式本质上有两种:任何一个

  1. 包中包含一个文件,直接覆盖原来的

  2. 包的控制文件之一preinstpostinst修改现有文件

如果您已经安装了该软件包,那么您可以通过查看其文件列表来检查 (1),例如

dpkg -L sudo-ldap | grep nsswitch
Run Code Online (Sandbox Code Playgroud)

如果您尚未安装该软件包,则可以在 packages.ubuntu.comapt-file上在线检查其内容,或者如果您已安装该软件包,则可以使用

apt-file list sudo-ldap | grep nsswitch
Run Code Online (Sandbox Code Playgroud)

另请参阅如何找到提供文件的包?


对于情况(2),如果您已经安装了该软件包,您应该在/var/lib/dpkg/info/so中找到它的控制脚本

grep nsswitch /var/lib/dpkg/info/sudo-ldap.{pre,post}inst
Run Code Online (Sandbox Code Playgroud)

或者更一般地说

grep -l --include=\*.{pre,post}{inst,rm} '/etc/nsswitch.conf' /var/lib/dpkg/info/*
Run Code Online (Sandbox Code Playgroud)

列出提及该文件的所有控制文件/etc/nsswitch.conf。如果您想检查已卸载软件包的控制文件,您可以执行以下操作

apt download sudo-ldap

ar x sudo-ldap_*.deb

tar xvf control.tar.zst ./postinst
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用寻呼机或 grep 查看该文件。对于包裹,sudo-ldap您可能会发现以下内容

$ grep -A3 nsswitch ./postinst 
# modify nsswitch.conf if needed
if [ -z "`grep \"^sudoers:\" /etc/nsswitch.conf`" ]
then
        echo "sudoers:  files ldap" >> /etc/nsswitch.conf
fi

# make sure sudoers has the correct permissions and owner/group
Run Code Online (Sandbox Code Playgroud)