web-dev-qa-db-ja.com

ユーザーとグループが正しいことを確認するにはどうすればよいですか?

私の周りには多くの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

私の質問はタイトルにあります-ユーザーとグループが正しいことを確認する方法は?そのようなファイルのスペルを間違えたり、手動で変更した場合はどうなりますか?

2
N0rbert

1.基本的なアプローチ

そのような操作に非常に便利なパッケージを見つけました。 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の標準グループをカバーします-admaudiobackupbincdromdaemondialoutdipdiskfaxfloppygamesgnatsirckmemlistlpmailmannewsnogroupoperatorplugdevproxy rootsaslshadowsrcstaffSudosystapettyusersutmpuucpvideovoicewww-data

/usr/share/doc/base-passwd/users-and-groups.html(または online )で標準グループに関するローカルドキュメントを読むことができます。

2.より深いアプローチ

警告:何をしているかわからない場合、または初心者の場合は続行しないでください。

皮切りに

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:')

2.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-journalsystemd-timesyncsystemd-networkを削除した場合systemd-resolvesystemd-bus-proxyfrom/ etc/groupその後、それらを/etc/passwdから削除し、systemdパッケージを再インストールします

Sudo apt-get install --reinstall systemd

次にthe command上記で再試行します

2.2。壊れた/etc/passwd

/etc/passwdからエントリを削除した場合、エラーメッセージが表示されます

dpkg: unrecoverable fatal error, aborting:
 unknown user 'hplip' in statoverride file

/var/lib/dpkg/statoverrideから対応する行を削除してから、上記のthe commandで再試行する必要があります。

2
N0rbert