/etc/passwd
เป็นที่น่าสงสัยว่าแพคเกจบางคนมีการเรียกใช้สคริปต์ที่ติดตั้งเวลาซึ่งสร้างบัญชีผู้ใช้ใน ฉันจะตรวจสอบแพ็คเกจที่สร้างผู้ใช้เฉพาะได้อย่างไร
/etc/passwd
เป็นที่น่าสงสัยว่าแพคเกจบางคนมีการเรียกใช้สคริปต์ที่ติดตั้งเวลาซึ่งสร้างบัญชีผู้ใช้ใน ฉันจะตรวจสอบแพ็คเกจที่สร้างผู้ใช้เฉพาะได้อย่างไร
คำตอบ:
สิ่งนี้จะทำงานได้อย่างน่าเชื่อถือหากติดตั้งแพ็คเกจผ่าน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'
ค้นหาคำสั่งadduser
หรือuseradd
คำสั่งและผู้ใช้ที่คุณต้องการค้นหาในบรรทัดเดียวกัน ( .*
จะจับคู่อักขระใด ๆ ระหว่างพวกเขาจับตัวเลือกคำสั่งใด ๆ ) ในไดเรกทอรีที่dpkg
เก็บสคริปต์ในไฟล์ที่ชื่อลงท้ายด้วยinst
sed -r 's:.*/(.*)\.[-a-z]+inst:\1:'
ถอดทุกอย่างก่อน & รวมถึงส่วนสุดท้าย/
ในเส้นทางแบบเต็มและ.preinst
หรือ.postinst
ส่วนขยายขอบคุณ @muru สำหรับการแนะนำผู้ค้นหาและวิธีการค้นหาที่เร็วกว่าการใช้find
ที่นี่ :)
grep -Rl 'adduser.*<user>' /var/lib/dpkg/info --include='*inst'
เพื่อทำให้find -exec grep
สิ่งนั้นง่ายขึ้น
basename -s
ยอมรับ wildcard / regex ... ) ดังนั้นฉันสามารถทำให้มันตัดออกก่อนและโพสต์ต่อท้าย inst instes (แต่ฉันไม่พบสคริปต์ preinst ใด ๆ กับ adduser ดังนั้นยัก )
postinst
ดังนั้นจึงไม่น่าที่คุณจะพบสิ่งที่ใช้preinst
(แต่ฉันคิดว่ากรณีที่หายากอาจมีอยู่)
มีข้อยกเว้นที่สำคัญสำหรับ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 และระบุว่าสิ่งเหล่านี้สร้างขึ้นโดยแพ็คเกจที่เกี่ยวข้อง
ดูเพิ่มเติมที่:
base-passwd
14.04 - คุณสามารถดูรายการผู้ใช้และกลุ่มใน*.master
ไฟล์
preinst
ด้วยเนื่องจากมีแพ็คเกจบางอย่างที่สร้างผู้ใช้ในสคริปต์นั้น แต่ฉันได้รับความคิดดังนั้นฉันจะยอมรับมัน