เหตุใด / etc / passwd จึงถูกใช้ทุกครั้งที่มีคนดำเนินการคำสั่ง `ls -l`


28

อ่านจากAPUEเพียงแค่รู้สึกอยากรู้อยากเห็น:

ไฟล์รหัสผ่านถูกใช้ทุกครั้งที่ผู้ใช้ล็อกอินเข้าสู่ระบบ UNIX และทุกครั้งที่มีคนดำเนินการls -lคำสั่ง


3
ฉันลองstrace ls -lอีกครั้งในภายหลังฉันเห็นopenat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4คำสั่ง
Rick

7
แน่นอนความเป็นจริงในปัจจุบันมีความซับซ้อนมากขึ้น มันไม่ได้/etc/passwdอยู่ใน BSD การใช้งานnscdจะเปลี่ยนสิ่งต่าง ๆ ; เช่นเดียวกับ NSS ดังนั้นโปรดทราบว่าคำถามนี้ตั้งอยู่บนพื้นฐานของมุมมองโลกทัศน์ครั้งที่ 7
JdeBP

4
@JdeBP การเขียนโปรแกรมโบราณใน Unix Environmentใช่ไหม
Andrew Henle

@JdeBP มันไม่ใช่เหรอ? ฉันประหลาดใจเมื่อคุณพูดว่าเพราะฉันคิดว่าหลาย ๆ โปรแกรม (สคริปต์และไบนารี) จะแตกซึ่งต้องอาศัย (อาจผิดพลาด แต่ก็ยัง) ต่อหน้า / etc / passwd
Peter - Reinstate Monica

มันไม่ได้เป็นการอ่านหน้าคู่มืออย่างถูกต้องรวมถึงส่วนไฟล์ของมันจะเปิดเผย (-:
JdeBP

คำตอบ:


50

ระบบไฟล์เชื่อมโยงโดยตรงกับค่า UID ตัวเลข (ID ผู้ใช้) และ GID (ID กลุ่ม) กับไฟล์ไม่ใช่ชื่อผู้ใช้และชื่อกลุ่ม (ซึ่งเป็นสตริง) ดังนั้นls -lคำสั่ง (และคำสั่งอื่น ๆ ที่แสดงผู้ใช้และเจ้าของกลุ่มของไฟล์) จำเป็นต้องได้รับชื่อผู้ใช้และกลุ่มจากที่อื่น /etc/passwdไฟล์เป็นหนึ่งในแหล่งดังกล่าว (อาจจะเป็นแหล่งที่มาของเดิมและที่พบมากที่สุด) คู่มือนี้ออก - จากPASSWD (5) (เช่นหน้าคนสำหรับ/etc/passwdไฟล์):

ยูทิลิตี้มากมายเช่น ls (1) ใช้เพื่อแม็พ ID ผู้ใช้กับชื่อผู้ใช้


17
เพื่อเติมเต็มคำตอบ: ตัวเลือก POSIX ระบุสำหรับ-n lsสิ่งนี้ป้องกันการแปล UID และ GID เป็นชื่อผู้ใช้และชื่อกลุ่ม ฉันได้ทดสอบls -nกับ GNU core utils ' lsและตัวเลือกป้องกันการเข้าถึงทั้งสอง/etc/passwdและ/etc/groupตามที่คาดไว้
pabouk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.