Tệp tin /etc/shadow trong linux
Đề mục 1. Giới thiệu 2. Cấu trúc lưu trữ các trường 3. Thay đổi giá trị của các trường với chage 4. Tham khảo 1. Giới thiệu ...
Đề mục
1. Giới thiệu
2. Cấu trúc lưu trữ các trường
3. Thay đổi giá trị của các trường với chage
4. Tham khảo
1. Giới thiệu
Có một số lược đồ xác thực được sử dụng để lưu trữ thông tin định danh người dùng trong linux. Trong đó có thường gặp nhất là /etc/passwd và /etc/shadow. Và trong bài này mình sẽ viết về shadow thôi.
Thông tin được lưu trữ trong file /etc/shadow trong file này an toàn hơn file /etc/passwd vì chỉ khi có quyền root mới có thể truy cập được thông tin trong file này. Đồng thời thông tin được lưu trữ trong file này bao gồm cả thông tin mã hóa của mật khẩu (bên file /etc/passwdthì lưu là dấu (x) thôi).
Để xem thông tin file thì ta sử dụng quyền root và sử dụng câu lệnh 'sudo cat /etc/shadow'. Kết quả thu được sẽ như một ví dụ dưới đây:
Trong file shadow, dòng đầu tiên mô tả thông tin về root user (user có quyền root). Những dòng tiếp theo, mỗi dòng mô tả một tài khoản user thông thường. Nếu có một trường mới thì sẽ được thêm vào cuối file (như ví dụ trên là có 4 trường thôi).
Trong mỗi dòng thông tin sẽ có nhiều trường dữ liệu, mỗi trường mang một ý nghĩa riêng và được phân cách nhau bởi dấu ':'. Và tổng cộng có 9 trường.
2. Cấu trúc lưu trữ các trường
Lấy 1 thông tin ở phần trên để phân tích. Giữa mỗi 2 giấu : sẽ là mỗi trường (trường đầu với trường cuối thì khác :) ).
Phân tích các trường:
- Trường 1 - Username: Là tên được sử dụng để đăng nhập vào hệ thống. Hay còn được gọi là account.
- Trường 2 - Encrypted Password: Là mật khẩu đã được mã hóa. Giá trị lưu ở đây sẽ dùng format $type$salt$hashed (dấu $ dùng để phân cách các trường luôn ấy). Trong đó $type dùng để biểu thị giải thuật mã hóa được sử dụng, giá trị của type có thể là:
1 - MD5
2a - Blowfish
2y - Eksblowfish
5 - SHA-256
6 - SHA-512
Giá trị $salt dùng để biểu thị giá trị salt được sử dụng. Và giá trị $hashed biểu thị giá trị hash của mật khẩu sau khi mã hóa (mã hóa là ra cái hash này :D).
Nếu trường này có giá trị là (*) hoặc (!), thì người dùng không thể đăng nhập tài khoản này với việc định danh bằng password (phải dùng phương thức khác :v).
- Trường 3 - Last password change: Thời gian lần cuối password được thay đổi. Thời gian này tính theo ngày từ thời điểm ngày 1/1/1970. Như trên ví dụ thì 17298 sẽ thể hiện thời gian là ngày 10/10/2017 (lâu lắm rồi mình chưa đổi thì phải :) ).
- Trường 4 - Minimum password age: Biểu thị số ngày mà user được đổi password mới. Nếu trường này là 2 thì sau khi thay đổi mật khẩu 2 ngày, người dùng mới được đổi mật khẩu mới. Thông thường, trường này có giá trị là 0 và do đó người dùng có thể thay đổi password lúc nào cũng được.
- Trường 5 - Maximum password age: Biểu thị số ngày mà password phải thay đổi. Điều này sẽ đảm bảo password được thay đổi thường xuyên hơn (coi như một biện pháp bảo mật). Khi đạt tới giá trị này thì hệ thống sẽ yêu cầu (yêu cầu thôi) người dùng đổi. Nếu giá trị này bằng 0 thì có nghĩa là mật khẩu đó sẽ không bị yêu cầu thay đổi
- Trường 6 - Warning period: Khoảng thời gian tính theo ngày trước khi password expire (hết hạn) (do trường 5 quy định) sau khi nhận được cảnh báo. (Account sau khi bị expire password thì vẫn có thể xài được một số lệnh - chắc bài nào đó sẽ nói tới).
- Trường 7 - Inactivity period: Khoảng thời gian tính theo ngày sau khi account của người dùng bị expire (do trường 6) cho tới khi account đó bị disable (giờ mới không đăng nhập được lun nè). Thông thường trường này được để trống.
- Trường 8 - Expiration date: Biểu thị số ngày mà tài khoản bị disable. Khác với trường 7 bên trên, trường này có thể được dùng để xác định "tuổi" của một account được tạo. (Như chơi net mà nạp tiền chơi cho 1 ngày -> trường này set = 1, hết thời gian thì account bị disable).
- Trường 9 - Unused: Trường phòng xa xem tương lai cần thêm tính năng gì không.
Các trường này đều có vai trò ảnh hưởng đến việc sử dụng của người dùng. Nên việc chỉnh sửa (nếu có) phải cẩn thận.
3. Thay đổi giá trị của các trường với chage
Phần này thì mình sẽ sử dụng công cụ chage để thay đổi một số trường thông tin của file shadow được nói đến ở trên. Công cụ này được tích hợp sẵn nên không cần cài đặt gì đâu (quá khỏe).
Cấu trúc cơ bản của lệnh như sau:
Một số option hỗ trợ như:
-E : Dùng để thay đổi giá trị Expiration date (trường 8), giá trị nhận vào dưới định dạng YYYY-MM-DD.
-I (chữ i hoa) : Dùng để thay đổi giá trị Inactivity period (trường 7). Giá trị nhận vào dưới dạng số (ngày).
-l (chữ l thường) : Dùng để liệt kê danh sách thông tin expire của tài khoản. Thông tin hiển thị lấy từ các trường 3,4,5,6,7,8.
-m : Dùng để thay đổi Minimum password age(trường 4). Giá trị nhận vào dưới dạng số (ngày).
-M : Dùng để thay đổi Maximum password age(trường 5). Giá trị nhận vào dưới dạng số (ngày).
-W : Dùng để thay đổi Warning period (trường 6). Giá trị nhận vào dưới dạng số (ngày).
Khi thay đổi cần lưu ý format tham số truyền vào và username của account cần thay đổi. Có thể thay đổi cùng một lúc nhiều trường. Nhưng những giá trị này ảnh hưởng trực tiếp tới account của người dùng nên cần cân nhắc trước khi thay đổi.
4. Tham khảo
- Sách: Security Strategies in Linux Platforms and Applications
Thông tin trong bài được mình biên soạn lại có thể có nhiều thiếu sót. Nếu có gì hãy góp ý cho mình nhé.
--cyn---
Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất