私の周りには多くのUbuntu搭載デバイスがあります。
私が知る限り、/etc/group
、/etc/passwd
、/etc/shadow
はインストール中に作成されるため、どのパッケージにも属していません。
$ dpkg -S /etc/passwd
dpkg-query: no path found matching pattern /etc/passwd
$ dpkg -S /etc/shadow
dpkg-query: no path found matching pattern /etc/shadow
$ dpkg -S /etc/group
dpkg-query: no path found matching pattern /etc/group
私の質問はタイトルにあります-ユーザーとグループが正しいことを確認する方法は?そのようなファイルのスペルを間違えたり、手動で変更した場合はどうなりますか?
そのような操作に非常に便利なパッケージを見つけました。 base-passwd
という名前で、次の説明があります。
$ apt-cache show base-passwd
Package: base-passwd
...
Description-en: Debian base system master password and group files
These are the canonical master copies of the user database files
(/etc/passwd and /etc/group), containing the Debian-allocated user and
group IDs. The update-passwd tool is provided to keep the system databases
synchronized with these master files.
マスターファイル(前述の用語)は次の場所に配置されます。
/usr/share/base-passwd/group.master
/usr/share/base-passwd/passwd.master
パッケージには、1つのバイナリ/usr/sbin/update-passwd
のみが含まれます。
その目的はマンページで説明されています( man update-passwd
):
記述
update-passwd
は、実行中のDebianシステムで/etc/passwd
、/etc/shadow
、および/etc/group
の更新を処理します。現在のファイルを、base-passwd
パッケージで配布されているマスターコピーと比較し、グローバルシステム範囲(つまり、0〜99)のすべてのエントリを更新します。
質問の問題については、実行する必要があります。
Sudo update-passwd --sanity-check --verbose
また、シミュレーションを実行することもできます(ドライラン):
$ Sudo update-passwd --sanity-check --verbose --dry-run
Reading passwd from /usr/share/base-passwd/passwd.master
Reading group from /usr/share/base-passwd/group.master
Reading passwd from /etc/passwd
Reading shadow from /etc/shadow
Reading group from /etc/group
引数なしで実行すると、/etc/passwd
、/etc/shadow
、および/etc/group
が安全に更新されるか、静かに終了します。
$ Sudo update-passwd
$ Sudo update-passwd --verbose
No changes needed
ユーティリティは39の標準グループをカバーします-adm、audio、backup、bin、cdrom、daemon、dialout、dip、disk、fax、floppy、games、gnats、irc、kmem、list、lp、mail、man、news、nogroup 、operator、plugdev、proxy、 root、sasl、shadow、src、staff、Sudo、sys、tape、tty、users、utmp、uucp、video、voice、www-data。
/usr/share/doc/base-passwd/users-and-groups.html
(または online )で標準グループに関するローカルドキュメントを読むことができます。
警告:何をしているかわからない場合、または初心者の場合は続行しないでください。
皮切りに
Sudo update-passwd --verbose
そして、リポジトリから他のソフトウェアをインストールし、/etc/passwd
および/または/etc/group
を破棄した場合、the command based on @ muru suggestion :
Sudo apt-get install --reinstall \
$(grep -RlE '(getent|useradd|adduser|groupadd|addgroup|chrgp|chmod|gpasswd|usermod)' \
/var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-a-z]+inst:\1:')
/etc/group
/etc/group
からエントリを削除した場合、エラーメッセージが表示されます
dpkg: unrecoverable fatal error, aborting:
unknown group 'crontab' in statoverride file
E: Sub-process /usr/bin/dpkg returned an error code (2)
/var/lib/dpkg/statoverride
および/etc/passwd
から対応する行を削除してから、上記のコマンドで再試行する必要があります。
その他の考えられるエラーメッセージは
E: Internal Error, No file name for dbus:AMD64
パッケージを手動でダウンロードすることで修正できます:
apt-get download dbus
Sudo dpkg -i dbus*.deb
そして、上記のthe commandで再試行してください。
Systemd関連グループsystemd-journal、systemd-timesync、systemd-networkを削除した場合、systemd-resolve、systemd-bus-proxyfrom/ etc/groupその後、それらを/etc/passwd
から削除し、systemd
パッケージを再インストールします
Sudo apt-get install --reinstall systemd
次にthe command上記で再試行します
/etc/passwd
/etc/passwd
からエントリを削除した場合、エラーメッセージが表示されます
dpkg: unrecoverable fatal error, aborting:
unknown user 'hplip' in statoverride file
/var/lib/dpkg/statoverride
から対応する行を削除してから、上記のthe commandで再試行する必要があります。