Как проверить, какой пакет создал пользователь?

14

Предполагается, что в некоторых пакетах во время установки запускаются сценарии, в которых создаются учетные записи пользователей /etc/passwd. Как я могу проверить, какой пакет создан конкретным пользователем?

Cyker
источник

Ответы:

16

Это будет работать достаточно надежно, если пакет был установлен через dpkg(в том числе с apt install). См . Ответ Muru для получения списка пользователей, созданных в стандартной установке Ubuntu, и пакета, который их создает. Для этих пользователей этот метод не будет выдавать никаких результатов.

Вы можете использовать команду:

grep -RlE '(adduser|useradd).*systemd' /var/lib/dpkg/info --include='*inst' | sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'

замените <user>имя интересующего вас пользователя, например,systemd

При этом выполняется поиск сценариев preinstи postinstвсех пакетов, известных dpkgдля команды adduseror useraddи рассматриваемого пользователя, чтобы определить, какой пакет отвечает за создание этого пользователя. Результат передается в sed, поэтому он возвращает только само имя пакета, а не полное имя файла сценария.

объяснение

  • grep -RlE выполнять рекурсивный поиск и печатать только имена файлов, содержащих совпадения, использовать расширенные регулярные выражения
  • '(adduser|useradd).*<user>' /var/lib/dpkg/info --include='*inst'найдите команду adduserили useraddпользователя и пользователя, которого вы хотите найти в одной строке ( .*сопоставит любые символы между ними, перехватывает любые параметры команды) в каталоге, где dpkgхранятся сценарии, в файлах, имена которых заканчиваются наinst
  • sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'удалите все до и включая последнее /в полном пути и / .preinstили .postinstрасширение

Спасибо @muru за более удобный и быстрый способ поиска, чем findздесь :)

Занна
источник
Вы также должны проверить preinstэто, поскольку в этом скрипте есть несколько пакетов, создающих пользователей. Но я понял идею, поэтому приму ее.
Cyker
@Cyker Да, спасибо :) Я отредактирую ... Я сейчас проверяю, могу ли я поймать их всех
Zanna
grep -Rl 'adduser.*<user>' /var/lib/dpkg/info --include='*inst'упростить find -exec grepвещь.
Муру
спасибо @muru, это потрясающе ... (теперь мне просто нужно basename -sпринять подстановочные знаки / регулярные выражения ...), чтобы я мог отрубить суффиксы pre и post inst (но я не нашел никаких preinst-скриптов с adduser, так что пожмите плечами )
Занна
@Zanna рекомендует Политика Debian postinst, так что вряд ли вы найдете что-либо, что использует preinst(но я предполагаю, что редкий случай может существовать).
Муру
15

Здесь есть важное исключение для обычных adduserпользователей и групп: те, которые поставляются с Ubuntu по умолчанию. Они предоставляются base-passwdпакетом. Список пользователей и групп, добавленных этим пакетом, приведен (и описан) в /usr/share/doc/base-passwd/users-and-groups.{html,txt.gz}. Список:

Пользователи (обычно с соответствующими группами)

root    man     majordom    irc         gdm
daemon  lp      postgres    gnats       saned
bin     mail    www-data    nobody      klog
sys     news    backup      messagebus  syslog
sync    uucp    operator    postfix
games   proxy   list        haldaemon

Группы (без соответствующих пользователей)

adm     fax     audio       staff       sshd
tty     voice   src         users       fetchmail
disk    cdrom   shadow      lpadmin     cupsys
kmem    floppy  utmp        sasl        nogroup
dialout tape    video       scanner
dip     sudo    plugdev     ssh

Пакет README ( /usr/share/doc/base-passwd/README) также перечисляет некоторых пользователей с UID в диапазоне 60000-64999 и заявляет, что они созданы соответствующими пакетами.

Также см:

Мур
источник