Tệp tin /etc/shadow trong linux
#Linux
3
/etc/shadow
1
cynurus8666
2
White

Đăng Bảo viết ngày 30/06/2020

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/passwd thì 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:
alt text
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.

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 :) ).
alt text
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:chage [options] USERNAME

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


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é.

--Cynurus8666---

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Đăng Bảo

2 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
White
0 0
1. Giới thiệu Trong quá trình tìm hiểu về linux có thể lúc nào đó bạn tình cờ đọc được hướng dẫn sử dụng lệnh như sau: /tmp/bash p Câu lệnh trên...
Đăng Bảo viết 5 tháng trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
2 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!