Làm thế nào để kiểm tra gói nào đã tạo người dùng?


14

Người ta nghi ngờ rằng một số gói có tập lệnh chạy trong thời gian cài đặt tạo tài khoản người dùng /etc/passwd. Làm cách nào để kiểm tra gói nào đã tạo một người dùng cụ thể?

Câu trả lời:


16

Điều này sẽ hoạt động hợp lý đáng tin cậy nếu gói được cài đặt thông qua dpkg(bao gồm cả với apt install). Xem câu trả lời của muru để biết danh sách người dùng được tạo trong cài đặt Ubuntu mặc định và gói tạo ra chúng. Đối với những người dùng, phương pháp này sẽ không tạo ra bất kỳ đầu ra nào.

Bạn có thể sử dụng lệnh:

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

thay thế <user>bằng tên của người dùng mà bạn quan tâm, ví dụ,systemd

Điều này tìm kiếm các tập lệnh preinstpostinsttập lệnh của tất cả các gói được biết dpkgcho lệnh adduserhoặc useraddlệnh và người dùng đang đề cập, để xem gói nào chịu trách nhiệm tạo người dùng đó. Kết quả được chuyển sang sed để nó chỉ trả về tên gói thay vì tên đầy đủ của tệp script.

Giải trình

  • grep -RlE tìm kiếm đệ quy và chỉ in tên của các tệp chứa kết quả khớp, sử dụng các biểu thức chính quy mở rộng
  • '(adduser|useradd).*<user>' /var/lib/dpkg/info --include='*inst'tìm kiếm adduserhoặc useraddlệnh và người dùng bạn muốn tìm trên cùng một dòng ( .*sẽ khớp với bất kỳ ký tự nào giữa chúng, bắt bất kỳ tùy chọn lệnh nào) trong thư mục dpkglưu trữ tập lệnh, trong các tệp có tên kết thúc bằnginst
  • sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'loại bỏ tất cả mọi thứ trước & bao gồm cuối cùng /trong đường dẫn đầy đủ và .preinsthoặc .postinstphần mở rộng

Cảm ơn @muru đã gợi ý cách tìm kiếm gọn gàng và nhanh hơn so với sử dụng findtại đây :)


Bạn cũng nên kiểm tra preinstvì có một số gói tạo người dùng trong tập lệnh đó. Nhưng tôi có ý tưởng nên tôi sẽ chấp nhận nó.
Cyker

@Cyker Vâng cảm ơn :) Tôi sẽ chỉnh sửa ... Tôi đang xem xét ngay bây giờ để xem liệu tôi có thể bắt được tất cả không
Zanna

grep -Rl 'adduser.*<user>' /var/lib/dpkg/info --include='*inst'để đơn giản hóa find -exec grepđiều.
muru

nhờ @muru đó là tuyệt vời ... (bây giờ tôi chỉ cần basename -schấp nhận ký tự đại diện / regex ...) vì vậy tôi có thể làm cho nó chặt trước và sau inst hậu tố (nhưng tôi đã không tìm thấy bất kỳ kịch bản preinst với adduser nên nhún vai )
Zanna

@Zanna Chính sách Debian khuyến nghị postinst, vì vậy bạn không thể tìm thấy bất kỳ mục đích sử dụng nào preinst(nhưng tôi cho rằng trường hợp hiếm gặp có thể tồn tại).
muru

15

Có một ngoại lệ quan trọng đối với những adduserngười dùng và nhóm người dùng thông thường ở đây: những nhóm đi kèm với Ubuntu theo mặc định. Chúng được cung cấp bởi các base-passwdgói. Một danh sách người dùng và nhóm được thêm bởi gói này được đưa ra (và được mô tả) trong /usr/share/doc/base-passwd/users-and-groups.{html,txt.gz}. Danh sách này là:

Người dùng (thường có các nhóm tương ứng)

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

Nhóm (không có người dùng tương ứng)

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

Gói README ( /usr/share/doc/base-passwd/README) cũng liệt kê ra một số người dùng có UID trong phạm vi 60000-64999 và nói rằng những gói này được tạo bởi các gói tương ứng.

Cũng thấy:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.