У меня есть много устройств на базе 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
Пакет содержит только один двоичный файл /usr/sbin/update-passwd
.
Его цель описана в странице справочника (man update-passwd
):
ОПИСАНИЕ
update-passwd
обновления дескрипторов/etc/passwd
,/etc/shadow
и/etc/group
при выполнении систем Debian. Это сравнивает текущие файлы с основными копиями, распределенными в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, аудио, резервное копирование, мусорное ведро, CD-ROM, демон, dialout, падение, диск, факс, дискета, игры, комары, irc, kmem, список, альбом, почта, человек, новости, nogroup, оператор, plugdev, прокси, корень, sasl, тень, src, штат, sudo, sys, лента, tty, пользователи, utmp, uucp, видео, речь, www-данные.
Можно прочитать локальную документацию о стандартных группах в /usr/share/doc/base-passwd/users-and-groups.html
(или онлайн).
Предупреждение: не продолжайте, если не уверенный, что Вы делаете или если Вы - новичок.
Запустите с
sudo update-passwd --verbose
и затем если Вы установили другое программное обеспечение из репозиториев и затем повредили Ваш /etc/passwd
и/или /etc/group
можно попытаться переустановить все такие пакеты с командой на основе @muru предложения:
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
и затем попробуйте еще раз с командой выше.
Если Вы удалили systemd-связанный systemd-журнал групп, systemd-timesync, systemd-сеть, systemd-твердость, systemd-bus-proxy от/etc/group затем удаляют их из /etc/passwd
и переустановите systemd
пакет с
sudo apt-get install --reinstall systemd
затем попробуйте еще раз с командой выше
/etc/passwd
Если Вы удалили записи из /etc/passwd
Вы столкнетесь с сообщениями об ошибках как
dpkg: unrecoverable fatal error, aborting:
unknown user 'hplip' in statoverride file
Необходимо удалить соответствующую строку из /var/lib/dpkg/statoverride
и затем попробуйте еще раз с командой выше.