Как проверить правильность моих пользователей и групп?

У меня есть много устройств на базе 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
задан 22 June 2018 в 23:05

1 ответ

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

Пакет содержит только один двоичный файл /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 (или онлайн).

2. Более глубокий подход

Предупреждение: не продолжайте, если не уверенный, что Вы делаете или если Вы - новичок.

Запустите с

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

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

и затем попробуйте еще раз с командой выше.

Если Вы удалили systemd-связанный systemd-журнал групп, systemd-timesync, systemd-сеть, systemd-твердость, systemd-bus-proxy от/etc/group затем удаляют их из /etc/passwd и переустановите systemd пакет с

sudo apt-get install --reinstall systemd

затем попробуйте еще раз с командой выше

2.2. Поврежденный /etc/passwd

Если Вы удалили записи из /etc/passwd Вы столкнетесь с сообщениями об ошибках как

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

Необходимо удалить соответствующую строку из /var/lib/dpkg/statoverride и затем попробуйте еще раз с командой выше.

2
ответ дан 2 December 2019 в 03:32

Другие вопросы по тегам:

Похожие вопросы: