修复 /var(或任何其他系统目录)上损坏的权限

修复 /var(或任何其他系统目录)上损坏的权限

长话短说,我销毁了/var它并从备份中恢复它 - 但备份没有设置正确的权限,现在所有内容/var都归root所有。这似乎让一些程序不高兴。

我已经/var/cache/man按照建议修复了 apt 失败 fopen 的问题这里以及 apache2 无法启动(通过授予/var/lib/apache2to的所有权www-data)。然而,现在解决所有问题的唯一方法似乎是在出现问题时手动修改权限 - 这似乎非常困难,因为我必须等待程序开始出现问题,确定问题与权限有关一些文件/var然后我自己把它们设置好。

有没有简单的方法来纠正这个问题?我已经尝试重新安装(普通aptitude reinstall x) 中列出的每个软件包dpkg -S /var,但这不起作用。

答案1

实际上apt-get --reinstall install package应该可以工作,至少有文件:

➜  ~  ls -l /usr/share/lintian/checks/version-substvars.desc        
-rw-r--r-- 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
➜  ~  sudo chmod +x /usr/share/lintian/checks/version-substvars.desc
➜  ~  ls -l /usr/share/lintian/checks/version-substvars.desc        
-rwxr-xr-x 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
➜  ~  sudo apt-get --reinstall install lintian  
(Reading database ... 291736 files and directories currently installed.)
Preparing to unpack .../lintian_2.5.27_all.deb ...
Unpacking lintian (2.5.27) over (2.5.27) ...
Processing triggers for man-db (2.6.7.1-1) ...
Setting up lintian (2.5.27) ...
➜  ~  ls -l /usr/share/lintian/checks/version-substvars.desc
-rw-r--r-- 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc

现在,您可能没有获得/var目录中包含文件的所有软件包,因此最好找到他们全部:

➜  ~ find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | wc -l 
460

就我而言,它占了 460 个包含包的路径,如果您考虑到同一个包可以有多个路径,则实际上会更少,通过一些后处理,我们可以发现大约有 122 个路径:

➜  ~  find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sort | uniq | wc -l
122

这当然计算了具有相同路径的几个包,例如wamerican, aspell-en, ispanish, wspanish, aspell-es, myspell-es.这很容易修复:

➜  ~  find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sed 's/, /\n/g' | sort | uniq | wc -l
107

所以,我有 107 个包,其中包含任何类型的文件/var或子目录。您可以使用以下方法重新安装它们:

sudo apt-get --reinstall install $(find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sed 's/, /\n/g')

这应该修复权限。

现在,还有另一个选择,找到一个好的安装并复制安装的文件权限:

chmod --recursive --reference good/var bad/var

答案2

我刚刚看到这个问题在这个博客上得到了很好的处理:

https://matoski.com/article/debian-restore-var-ownership-permissions/Archive.org

概括:

方法一:虚拟机

方法 2:从 debian 软件包

方法3:使用 aptitude 重新安装

相关内容