Tại sao / etc / passwd được sử dụng mỗi khi ai đó thực thi lệnh `ls -l`?


28

Đọc từ APUE , chỉ cảm thấy tò mò:

Tệp mật khẩu được sử dụng mỗi khi người dùng đăng nhập vào hệ thống UNIX và mỗi khi ai đó thực thi ls -llệnh.


3
Tôi cố gắng strace ls -lsau này, tôi thấy một openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4tuyên bố.
Rick

7
Tất nhiên, thực tế ngày nay phức tạp hơn. Nó không có /etc/passwdtrên BSD. Một người chủ động nscdsẽ thay đổi mọi thứ; NSS cũng vậy. Vì vậy, lưu ý rằng câu hỏi này dựa trên thế giới quan Phiên bản thứ 7.
JdeBP

4
@JdeBP Lập trình cổ trong môi trường Unix thì sao?
Andrew Henle

@JdeBP Không phải sao? Tôi ngạc nhiên khi bạn nói rằng bởi vì tôi nghĩ rằng rất nhiều chương trình (tập lệnh và nhị phân) sẽ phá vỡ sự tin cậy (có lẽ sai, nhưng vẫn) về sự hiện diện của / etc / passwd.
Peter - Tái lập lại

Không phải, vì đọc đúng hướng dẫn sử dụng, bao gồm cả phần PHIM, sẽ tiết lộ. (-:
JdeBP

Câu trả lời:


50

Hệ thống tệp liên kết trực tiếp các giá trị UID (ID người dùng) và GID (ID nhóm) số với tệp, không phải tên người dùng và tên nhóm (là các chuỗi). Vì vậy, ls -llệnh (và bất kỳ lệnh nào khác hiển thị người dùng và chủ sở hữu nhóm của tệp) cần lấy tên người dùng và nhóm từ một nơi nào đó. Các /etc/passwdtập tin là một trong những nguồn như vậy (có lẽ là nguồn gốc và phổ biến nhất). Hướng dẫn thực hiện điều này - từ PASSWD (5) (tức là trang man cho /etc/passwdtệp):

nhiều tiện ích, như ls (1) sử dụng nó để ánh xạ ID người dùng thành tên người dùng


17
Để bổ sung cho câu trả lời: POSIX chỉ định tùy chọn -ncho ls. Điều này ngăn việc dịch UID và GID sang tên người dùng và tên nhóm. Tôi đã thử nghiệm ls -nvới các tiện ích lõi GNU ' lsvà tùy chọn này đã ngăn truy cập cả hai /etc/passwd/etc/groupnhư mong đợi.
pabouk
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.