我的 /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
包修改文件基本上有两种方式:
软件包中包含一个可直接覆盖原始文件的文件
包的控制文件之一
preinst
或postinst
修改现有文件
如果你已经安装了该软件包,那么你可以通过查看其文件列表来检查(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