我的 遇到了问题/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
一种可能的解决方案是使用audit
守护进程。只需像这样创建记录:
auditctl -w /etc/nsswitch.conf -p w -k monitor-nsswitch
这将在/etc/nsswitch.conf
文件中的每个写入上创建日志。
答案2
我的第一个想法是,像 Romeo 一样尝试捕获谁/什么在更改文件 - 但实际上它会非常令人惊讶的是,如果那不是 root/apt 或 dpkg。它似乎您的问题不是这些文件是如何更改的,而是如何恢复/防止将来再次发生。如果您正在查看日志文件,那么我猜您有 root 访问权限,并且只需重新应用所需的配置即可恢复。这只剩下防止将来再次发生的问题。
您可能已经知道,apt 是 dpkg 的前端。
man dpkg
是一个很好的起点。在其他选项中,你会发现选项--force-things
。--force-conffold
将保留您的配置。要在交互式更新中应用它:
apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" update
您还可以在 /etc/apt/apt.conf.d/ 中设置 apt 的调用(使用“Dpkg::Options {...}”)。
我认为不可能为特定包设置这些选项 - 但我可能是错的。
另一种方法是在您想要保留的配置上设置不可变标志 - 但这需要经过测试/可能会导致更新失败。