Як перевірити, який пакет створив користувач?


14

Існує підозра, що деякі пакети мають сценарії, запущені під час встановлення, які створюють облікові записи користувачів у /etc/passwd. Як я можу перевірити, який пакет створив конкретний користувач?

Відповіді:


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для команди adduserабо useraddвідповідного користувача та переглядає, який пакет відповідає за створення цього користувача. Результат передається на sed, тому він повертає лише ім'я самого пакета замість повного імені файлу сценарію.

Пояснення

  • grep -RlE шукайте рекурсивно та друкуйте лише імена файлів, що містять збіги, використовуйте розширені регулярні вирази
  • '(adduser|useradd).*<user>' /var/lib/dpkg/info --include='*inst'шукайте команду adduseror або 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прийняти подстановочні символи / регекс ...), щоб я міг змусити його відрізати суфікси попереднього і після інстастування (але я не знайшов жодних сценаріїв преінстінду з аддусером, тому знизайте плечима )
Занна

@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 і заявляє, що вони створюються відповідними пакетами.

Також дивіться:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.