/var(または他のシステムディレクトリ)で破損した権限を修正する

/var(または他のシステムディレクトリ)で破損した権限を修正する

簡単に言えば、私は/varそれを破棄し、バックアップから復元しました。ただし、バックアップには正しい権限が設定されておらず、すべてが/varルート所有です。これはいくつかのプログラムを不幸にするようです。

/var/cache/man提案されているようにfopenが失敗する問題を修正しました。ここ/var/lib/apache2apache2は起動しません(〜に所有権を与えて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

/varしたがって、あらゆる種類のファイルまたはサブディレクトリを含む107のパッケージがあります。以下を使用して再インストールできます。

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)

要約:

方法 1: 仮想マシン

方法 2: Debian パッケージで

方法3:適性を使用して再インストール

関連情報