เหตุใดจึงมีรายการผู้ชายใน / etc / passwd


23

ฉันสังเกตเห็นว่ามีรายการสำหรับผู้ใช้ man ใน/etc/passwdไฟล์ของฉัน วัตถุประสงค์ของผู้ใช้นี้คืออะไร?

man:x:6:12:man:/var/cache/man:/bin/sh

คำตอบ:


31

man(คำสั่งไม่ใช่ผู้ใช้) เป็นแอปพลิเคชันความช่วยเหลือ แอปพลิเคชั่นจัดเตรียม man page ไว้ในแพ็คเกจ แต่manจำเป็นต้องรู้ว่าพวกเขาอยู่ที่ไหนและช่วยเหลืออะไรบ้าง สิ่งที่ความเร็วขึ้น - ดังนั้นmanจะไม่ค้นหาแฟ้มทั้งหมดเมื่อคุณพิมพ์man <command>- mandbหน้าคนเหล่านี้จะมีการจัดทำดัชนีลงในฐานข้อมูลโดยใช้คำสั่งที่เรียกว่า

ใน Ubuntu mandbเก็บดัชนีไว้ในฐานข้อมูล GNU gdbm ที่/var/cache/man/index.db(และภาษาเฉพาะสองสามรุ่นในไดเรกทอรีเดียวกัน) นี่คือฐานข้อมูลการแฮ็ชคีย์ - ค่าที่ไม่แตกต่างจาก memcache หรือการนำไปใช้งานอื่น ๆ อีกร้อยรายการบนแนวคิดที่คล้ายกัน มันเป็นไบนารีเบาและรวดเร็ว ฉันจะโยนตัวอย่างของวิธีการเล่นกับมันในตอนท้าย

/etc/cron.daily/man-dbการจัดทำดัชนีนี้มีกำหนดที่จะทำงานทุกวันในอูบุนตูโดย สคริปต์ทั้งหมดทำงานเป็นรูทและทำการล้างบางส่วนก่อน แต่ในตอนท้ายเราจะเห็นmandbว่าmanผู้ใช้นั้นทำงาน:

# --pidfile /dev/null so it always starts; mandb isn't really a daemon,
# but we want to start it like one.
start-stop-daemon --start --pidfile /dev/null \
                  --startas /usr/bin/mandb --oknodo --chuid man \
                  $iosched_idle \
                  -- --no-purge --quiet

มันไม่ได้เปลี่ยนกลุ่มซึ่งเป็นสาเหตุที่ความเป็นเจ้าของกลุ่ม/var/cache/manทั้งหมดยังคงเป็นรูท

แต่ทำไมถึงmandbทำงานในฐานะผู้ใช้ที่แตกต่างออกไป? มันสามารถ (อาจ) เรียกใช้เช่นเดียวกับrootแต่กำลังประมวลผลอินพุตจากแหล่งข้อมูลที่หลากหลาย (ดูmanpath) การทำงานในฐานะผู้ใช้ของตัวเองทำให้ระบบไม่สามารถป้องกันกระบวนการที่เกิดขึ้นหรือแย่ลง - ถูกใช้ประโยชน์จากหน้าเว็บที่มีรูปแบบไม่ถูกต้องเสียหายหรือเป็นอันตราย

สิ่งที่แย่ที่สุดที่อาจเกิดขึ้นจะมีผลกับmanดัชนีหน้าเว็บเท่านั้น บูฮู คุณสามารถยืนยันด้วยสิ่งที่ชอบ:

sudo -u man find / -writable 2>/dev/null

และคุณสามารถใช้วิธีการนั้นเพื่อดูว่าผู้ใช้สามารถสร้างความเสียหายได้มากเพียงใดในระบบ เป็นความคิดที่ดีที่จะตรวจสอบการอนุญาตไฟล์ของคุณ (ฉันเพิ่งพบว่าผู้ใช้สามารถลบคอลเลกชันเพลงทั้งหมดของฉันได้)


accessdbคุณสามารถมองที่ฐานข้อมูลด้วย นี่คือบันทึกสุ่มบางส่วน:

$ accessdb | shuf -n3
fpurge -> "- 3 3 1380819168 A - - gz purge a stream"
fcgetlangs -> "FcGetLangs 3 3 1402007131 A - - gz Get list of languages"
ipython -> "- 1 1 1393443907 A - - gz Tools for Interactive Computing in Python."

แม้ว่าจะไม่ชัดเจนจากด้านบน แต่จริงๆแล้วมีฟิลด์คั่นด้วยแท็บ:

<name> -> <ext> <sec> <mtime> <ID> <ref> <comp> <whatis> 

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเนื้อหาข้อมูลที่เกิดขึ้นจริงในคู่มือทางเทคนิค


3
บางทีคุณสามารถเพิ่มคำอธิบายว่าทำไมบริการนี้ (และอื่น ๆ อีกมากมาย) มีผู้ใช้ของตัวเองและไม่เพียงแค่ทำงานในฐานะรูทหรืออะไรบางอย่าง?
Thomas Padron-McCarthy

@ ThomasPadron-McCarthy อย่างละเอียดเพียงพอหรือไม่
Oli

ยอดเยี่ยมมาก!
โทมัส Padron-McCarthy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.