Tìm hiểu cấu trúc của file /etc/passwd


Nếu bạn từng làm công tác quản trị người dùng trên Linux, hẳn bạn đã biết đến file /etc/passwd. Nghe tên file là passwd bạn có thể đoán chừng nó có chứa thông tin về mật khẩu của người dùng trên máy tính, liệu như vậy đã đủ chưa? Bài viết dưới đây sẽ giải thích định dạng của file này.

1> File /etc/passwd – xưa và nay

File passwd (dạng plain-text) nằm ở thư mục /etc chứa danh sách các tài khoản trên hệ thống, cung cấp thông tin hữu ích về mỗi tài khoản như: User ID, Group ID, Home Directory, Shell…

Thường thì nó cũng chứa mật khẩu dạng mã hóa (encoded password) của mỗi tài khoản. Mặc định, mọi user thông thường đều chỉ có duy nhất quyền đọc (read) đối với file này, điều này rất cần thiết cho nhiều chương trình, ví dụ lệnh ls cần đọc file này để biết được ánh xạ giữa Username và User ID. Chỉ riêng root được chỉnh sửa file này (quyền write).

Hồi xưa thì không có vấn đề gì khi encoded password được lưu trong file passwd với quyền read được gán cho tất cả mọi người. Bởi vì lúc đó tốc độ xử lý của phần cứng còn chậm, nên dù hacker biết được mật khẩu đã mã hóa này thì việc giải mã để tìm lại mật khẩu nguyên gốc (chưa mã hóa) rất khó và mất nhiều thời gian, nhất là với những mật khẩu có độ phức tạp cao (strong password) và được mã hóa sử dụng các giải thuật “băm” 1 chiều như MD5, SHA-1…

Giờ đây, khi mà sức mạnh phần cứng ngày càng “khủng” thì các hệ điều hành họ *nix sau này như System V Release 3.2 (1987), BSD4.3 Reno (1991) và Linux (1992) ứng dụng cơ chế shadow password nhằm khắc phục nguy cơ hacker sử dụng phương thức brute force, dictionary attack để dò tìm mật khẩu nguyên gốc từ encoded password được lưu trong file /etc/passwd. Theo đó thì:

+ Encoded password được đưa vào file /etc/shadow, trường password trong file /etc/passwd được thay bằng dấu x.

+ Chỉ có root mới có toàn quyền với file shadow, các user thông thường khác vẫn có quyền đọc file /etc/passwd nhưng không có bất cứ quyền hạn truy cập nào tới file shadow.

+ File thực thi usr/bin/passw được gán bit SUID để khi user chạy lệnh passwd nhằm đổi lại mật khẩu thì họ vẫn có thể ghi vào file shadow hoặc khi đọc encoded password từ shadow trong quá trình chứng thực lúc đăng nhập.

2> Định dạng của file /etc/passwd

Mỗi dòng trong file /etc/passwd là thông tin về 1 user. Có tất cả 7 trường trên mỗi dòng, các trường được phân tách bởi dấu 2 chấm ( : ). Dưới đây là 1 ví dụ về thông tin của user oracle.

1. Username: Tên người dùng, được sử dụng khi user đăng nhập, không nên chứa các ký tự in hoa trong username.

2. Password: Nếu sử dụng shadow password thì nên sử dụng dấu x hoặc ký tự * (gõ man pwcnv, và man shadow để hiểu rõ hơn)

3. User ID (UID): Đây là 1 chuỗi số duy nhất được gán cho user, hệ thống sử dụng UID hơn là username để nhận dạng user.

4. Group ID (GID): Là 1 chuỗi số duy nhất được gán cho Group đầu tiên mà user này tham gia (thông tin các Group có trong file /etc/group)

5. User ID Info (còn gọi là GECOS): Trường này không quan trọng lắm, bạn để trống cũng được vì chỉ dùng cho mục đích khai báo các thông tin cá nhân về user như: tên đầy đủ, số điện thoại… Lệnh finger sẽ cung cấp thêm những thông tin phụ này.

6. Home directory: Phải là đường dẫn đầy đủ tới thư mục sẽ làm thư mục chủ cho user, mặc định đây sẽ là thư mục hiện hành (working direcroty) khi user đăng nhập. Nếu bạn chỉ đến 1 thư mục không tồn tại thì hệ thống sẽ tự gán là thư mục gốc (/) làm thư mục chủ.

7. Shell: Đường dẫn đầy đủ tới login shell. Nếu để trống trường này thì login shell mặc định là file /bin/sh, nếu chỉ tới 1 file không tồn tại thì user không thể đăng nhập vào hệ thống từ giao diện console hoặc qua SSH bằng lệnh login. Nhưng user vẫn có thể đăng nhập thông qua giao diện đồ họa bằng cách sử dụng non-login shell.

–manthang.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s