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

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

我的 /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。但是,我想知道是否有可能在系统本身上解决这个问题!

答案1

包修改文件基本上有两种方式:

  1. 软件包中包含一个可直接覆盖原始文件的文件

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

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

dpkg -L sudo-ldap | grep nsswitch

如果你尚未安装该软件包,可以在线查看其内容 packages.ubuntu.com或者使用apt-file如果你已经安装了

apt-file list sudo-ldap | grep nsswitch

也可以看看如何找到提供文件的包?


对于情况 (2),如果你已经安装了该包,你应该可以在其中找到它的控制脚本,/var/lib/dpkg/info/例如

grep nsswitch /var/lib/dpkg/info/sudo-ldap.{pre,post}inst

或者更普遍地

grep -l --include=\*.{pre,post}{inst,rm} '/etc/nsswitch.conf' /var/lib/dpkg/info/*

列出全部提及该文件的控制文件/etc/nsswitch.conf。如果你想检查未安装软件包的控制文件,你可以这样做

apt download sudo-ldap

ar x sudo-ldap_*.deb

tar xvf control.tar.zst ./postinst

然后,您可以使用分页器或在其中使用 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

相关内容