Quản lý tuổi thọ mật khẩu là một trong những trụ cột quan trọng để bảo vệ an toàn cho hệ thống Linux. Bạn đã bao giờ lo lắng về việc người dùng sử dụng một mật khẩu trong nhiều năm liền, làm tăng nguy cơ bị tấn công? Đối với các quản trị viên hệ thống, việc kiểm soát và thực thi chính sách mật khẩu cho hàng chục, thậm chí hàng trăm người dùng luôn là một thách thức không nhỏ. Việc này đòi hỏi sự chính xác và nhất quán để đảm bảo không có lỗ hổng nào bị bỏ sót. Đây chính là lúc lệnh chage phát huy sức mạnh. Lệnh chage (viết tắt của change age) là một công cụ mạnh mẽ, cho phép bạn thiết lập và kiểm tra các thông số liên quan đến tuổi thọ mật khẩu một cách chi tiết và linh hoạt. Bài viết này sẽ cùng bạn khám phá từ A-Z về lệnh chage, từ cú pháp, các tham số, cách sử dụng thực tế cho đến những mẹo quản trị hiệu quả, giúp bạn làm chủ công cụ thiết yếu này.
Giới thiệu và mục đích sử dụng lệnh chage
Lệnh chage là gì?
Lệnh chage là một tiện ích dòng lệnh trong các hệ điều hành dựa trên Linux, được thiết kế chuyên biệt để quản lý thông tin về “tuổi” của mật khẩu người dùng. Về cơ bản, nó cho phép quản trị viên hệ thống xem và sửa đổi các quy tắc liên quan đến việc hết hạn mật khẩu. Thay vì phải chỉnh sửa trực tiếp các tệp hệ thống nhạy cảm như /etc/shadow, chage cung cấp một giao diện an toàn và được kiểm soát để thực hiện các thay đổi này. Vai trò chính của chage là công cụ để thực thi chính sách bảo mật mật khẩu, một yếu tố không thể thiếu trong bất kỳ môi trường máy chủ chuyên nghiệp nào. Nó giúp đảm bảo rằng các quy tắc về mật khẩu được áp dụng một cách nhất quán trên toàn bộ hệ thống.

Tại sao cần sử dụng lệnh chage?
Việc sử dụng lệnh chage mang lại hai lợi ích cốt lõi: tăng cường bảo mật và đảm bảo tuân thủ. Thứ nhất, về mặt bảo mật, việc buộc người dùng thay đổi mật khẩu định kỳ sẽ làm giảm đáng kể rủi ro. Nếu một mật khẩu bị rò rỉ hoặc bị bẻ khóa, giới hạn thời gian hiệu lực của nó sẽ thu hẹp “cửa sổ cơ hội” cho kẻ tấn công khai thác. Kẻ xấu sẽ không thể sử dụng một mật khẩu đã bị đánh cắp trong thời gian dài. Thứ hai, nhiều tổ chức và doanh nghiệp phải tuân thủ các tiêu chuẩn bảo mật nghiêm ngặt như PCI DSS, ISO 27001, hoặc HIPAA. Các tiêu chuẩn này thường yêu cầu phải có chính sách quản lý mật khẩu rõ ràng, bao gồm việc thiết lập thời hạn sử dụng. Lệnh chage chính là công cụ trực tiếp giúp bạn đáp ứng các yêu cầu tuân thủ này một cách dễ dàng và hiệu quả.
Cú pháp và các tham số của lệnh chage
Cú pháp cơ bản
Hiểu rõ cú pháp là bước đầu tiên để làm chủ bất kỳ công cụ dòng lệnh nào, và chage cũng không ngoại lệ. Cú pháp của lệnh này rất đơn giản và dễ nhớ, giúp bạn nhanh chóng áp dụng vào công việc quản trị hàng ngày. Cấu trúc lệnh cơ bản như sau: chage [tùy chọn] tên_người_dùng Trong đó, [tùy chọn] là các tham số bạn sử dụng để chỉ định hành động muốn thực hiện (ví dụ: xem thông tin, đặt ngày hết hạn), và tên_người_dùng là tên của tài khoản bạn muốn tác động. Việc thực thi lệnh này đòi hỏi quyền quản trị viên (root) vì nó thay đổi các thiết lập bảo mật quan trọng của hệ thống.

Các tham số quan trọng
Sức mạnh của chage nằm ở các tham số linh hoạt của nó. Mỗi tham số cho phép bạn kiểm soát một khía cạnh cụ thể của vòng đời mật khẩu. Dưới đây là những tham số quan trọng nhất mà bạn cần nắm vững:
- -l (list): Đây là tham số bạn sẽ dùng thường xuyên nhất. Nó có chức năng liệt kê toàn bộ thông tin về tuổi thọ mật khẩu hiện tại của một người dùng mà không thực hiện bất kỳ thay đổi nào.
- -m (minimum days): Thiết lập số ngày tối thiểu phải trôi qua giữa hai lần thay đổi mật khẩu. Tham số này ngăn chặn việc người dùng thay đổi mật khẩu liên tục để “lách” chính sách. Ví dụ,
-m 7có nghĩa là sau khi đổi mật khẩu, người dùng phải đợi ít nhất 7 ngày mới được đổi lại. - -M (maximum days): Đặt số ngày tối đa mà một mật khẩu có hiệu lực. Sau khoảng thời gian này, người dùng sẽ bị buộc phải đổi mật khẩu mới. Đây là tham số cốt lõi để thực thi chính sách thay đổi mật khẩu định kỳ.
- -W (warning days): Đặt số ngày cảnh báo trước khi mật khẩu hết hạn. Hệ thống sẽ bắt đầu nhắc nhở người dùng đổi mật khẩu khi thời gian hiệu lực chỉ còn lại số ngày được thiết lập ở đây.
- -I (inactive days): Khóa tài khoản sau một số ngày nhất định kể từ khi mật khẩu hết hạn. Nếu người dùng không đổi mật khẩu trong khoảng thời gian “ân hạn” này, tài khoản sẽ bị vô hiệu hóa cho đến khi quản trị viên can thiệp.
- -E (expire date): Thiết lập một ngày cụ thể mà tài khoản sẽ hết hạn, theo định dạng YYYY-MM-DD. Sau ngày này, tài khoản sẽ bị vô hiệu hóa hoàn toàn. Tham số này hữu ích cho các tài khoản tạm thời, ví dụ như tài khoản cho nhà thầu hoặc thực tập sinh.
Cách kiểm tra và thiết lập chính sách mật khẩu với lệnh chage
Kiểm tra tuổi thọ mật khẩu hiện tại của người dùng
Trước khi thực hiện bất kỳ thay đổi nào, bạn cần biết trạng thái hiện tại của chính sách mật khẩu. Lệnh chage giúp bạn làm điều này một cách cực kỳ đơn giản và trực quan. Bằng cách sử dụng tham số -l, bạn có thể xem một báo cáo chi tiết về cài đặt của một người dùng cụ thể. Để kiểm tra, bạn chỉ cần mở terminal và gõ lệnh sau, thay username bằng tên người dùng thực tế: sudo chage -l username Kết quả trả về sẽ bao gồm các thông tin quan trọng như:
- Last password change: Ngày cuối cùng mật khẩu được thay đổi.
- Password expires: Ngày mật khẩu sẽ hết hạn.
- Password inactive: Ngày tài khoản sẽ bị khóa nếu mật khẩu không được đổi sau khi hết hạn.
- Account expires: Ngày tài khoản sẽ hết hạn vĩnh viễn.
- Minimum number of days between password change: Số ngày tối thiểu giữa các lần đổi mật khẩu.
- Maximum number of days between password change: Số ngày tối đa mật khẩu có hiệu lực.
- Number of days of warning before password expires: Số ngày cảnh báo trước khi hết hạn.
Việc kiểm tra này giúp bạn xác nhận lại các chính sách đang được áp dụng và là bước không thể thiếu trước khi tiến hành cấu hình.

Thiết lập thời hạn thay đổi mật khẩu và chính sách mật khẩu
Sau khi đã nắm được thông tin hiện tại, bạn có thể bắt đầu áp dụng các chính sách bảo mật mong muốn. Lệnh chage cho phép bạn tùy chỉnh từng quy tắc một cách độc lập hoặc kết hợp nhiều quy tắc trong cùng một lệnh. Dưới đây là một vài ví dụ phổ biến trong quản trị hệ thống. Giả sử bạn muốn thiết lập chính sách cho người dùng có tên là nhanvien_A theo yêu cầu của công ty:
- Thiết lập mật khẩu hết hạn sau 90 ngày: Đây là một yêu cầu bảo mật rất phổ biến. Bạn sử dụng tham số
-M(Maximum days).sudo chage -M 90 nhanvien_A - Thiết lập cảnh báo 7 ngày trước khi hết hạn: Để người dùng có đủ thời gian chuẩn bị và thay đổi mật khẩu, bạn nên đặt cảnh báo. Tham số
-W(Warning days) sẽ giúp bạn làm điều này.sudo chage -W 7 nhanvien_A - Thiết lập tài khoản bị khóa sau 30 ngày nếu không đổi mật khẩu: Để tăng cường kỷ luật, bạn có thể đặt ra một khoảng thời gian “ân hạn”. Nếu người dùng vẫn không đổi mật khẩu sau khi hết hạn, tài khoản sẽ bị khóa. Tham số
-I(Inactive days) được dùng cho mục đích này.sudo chage -I 30 nhanvien_A
Bạn hoàn toàn có thể kết hợp các tham số này trong một lệnh duy nhất để tiết kiệm thời gian: sudo chage -M 90 -W 7 -I 30 nhanvien_A.

Ví dụ thực hành quản lý người dùng với lệnh chage
Trường hợp thiết lập chính sách mật khẩu cho user mới
Hãy cùng xem xét một kịch bản thực tế. Công ty bạn vừa có một nhân viên mới tên là tuan_anh và bạn cần tạo tài khoản cũng như áp dụng chính sách mật khẩu ngay từ đầu. Chính sách của công ty yêu cầu mật khẩu phải được đổi sau mỗi 60 ngày, cảnh báo trước 14 ngày, và người dùng không được đổi mật khẩu trong vòng 2 ngày sau lần đổi gần nhất. Đầu tiên, bạn tạo người dùng mới: sudo useradd tuan_anh. Sau đó, bạn đặt mật khẩu ban đầu cho họ: sudo passwd tuan_anh. Tiếp theo, bạn kiểm tra thông số mặc định của tài khoản này bằng lệnh: sudo chage -l tuan_anh. Bạn sẽ thấy hầu hết các giá trị được đặt là “never” (không bao giờ). Bây giờ, hãy áp dụng chính sách của công ty. Bạn sẽ sử dụng một lệnh chage duy nhất để thiết lập tất cả các quy tắc cần thiết: sudo chage -M 60 -m 2 -W 14 tuan_anh Cuối cùng, hãy kiểm tra lại một lần nữa với sudo chage -l tuan_anh để đảm bảo rằng các thay đổi đã được áp dụng chính xác. Giờ đây, tài khoản tuan_anh đã hoàn toàn tuân thủ chính sách bảo mật của tổ chức ngay từ khi được tạo.

Trường hợp xử lý tài khoản hết hạn mật khẩu
Một tình huống phổ biến khác là người dùng quên đổi mật khẩu và tài khoản của họ bị khóa. Giả sử người dùng thanh_tam phàn nàn rằng cô ấy không thể đăng nhập được nữa. Bước đầu tiên của bạn là điều tra. Bạn chạy lệnh: sudo chage -l thanh_tam. Kết quả có thể cho thấy “Password expires” đã là một ngày trong quá khứ và “Password inactive” cũng vậy, điều này xác nhận tài khoản đã bị khóa do không đổi mật khẩu. Để giải quyết vấn đề, bạn có hai lựa chọn chính. Bạn có thể yêu cầu người dùng tự đổi mật khẩu ngay lần đăng nhập tiếp theo bằng lệnh passwd. Lệnh này sẽ yêu cầu người dùng đặt lại mật khẩu mới: sudo passwd --expire thanh_tam. Lệnh này sẽ buộc mật khẩu hiện tại hết hạn ngay lập tức, và khi người dùng thanh_tam đăng nhập lần sau, hệ thống sẽ yêu cầu họ tạo mật khẩu mới. Ngoài ra, nếu bạn muốn đặt lại toàn bộ thông số tuổi thọ, bạn có thể cập nhật ngày thay đổi mật khẩu cuối cùng thành ngày hôm nay. Điều này sẽ “reset” lại chu kỳ 90 ngày (hoặc bất kỳ giá trị -M nào bạn đã đặt). Bạn có thể làm điều này bằng lệnh: sudo chage -d $(date +%Y-%m-%d) thanh_tam. Sau khi thực hiện, tài khoản sẽ hoạt động trở lại bình thường và chu kỳ hết hạn sẽ được tính lại từ đầu.

Các lưu ý và mẹo khi sử dụng lệnh chage trong quản trị hệ thống
Những điều cần tránh khi cấu hình chage
Mặc dù chage là một công cụ mạnh mẽ, việc cấu hình sai có thể gây ra những phiền toái không đáng có cho người dùng hoặc tạo ra lỗ hổng bảo mật. Điều đầu tiên cần tránh là đặt thời hạn mật khẩu quá ngắn. Việc buộc người dùng thay đổi mật khẩu mỗi 15 hoặc 30 ngày có thể gây khó chịu, dẫn đến việc họ chọn những mật khẩu yếu, dễ nhớ hoặc ghi chúng ra giấy. Ngược lại, đặt thời hạn quá dài (ví dụ: 365 ngày) lại làm giảm tính hiệu quả của chính sách bảo mật. Một khoảng thời gian từ 60-90 ngày thường được xem là hợp lý. Một sai lầm phổ biến khác là quên kiểm tra lại trạng thái sau khi thực hiện thay đổi. Luôn sử dụng chage -l username để xác nhận rằng các tham số bạn vừa thiết lập đã được áp dụng đúng như mong đợi.
Mẹo hỗ trợ quản lý người dùng hiệu quả
Để nâng cao hiệu quả, bạn không nên chỉ sử dụng chage một cách độc lập. Hãy kết hợp nó với các công cụ quản lý người dùng khác. Ví dụ, bạn có thể chỉnh sửa tệp /etc/login.defs để thiết lập các giá trị mặc định cho tất cả người dùng mới được tạo bằng lệnh useradd. Điều này giúp đảm bảo tính nhất quán ngay từ đầu. Một mẹo nâng cao hơn là tự động hóa quy trình. Bạn có thể viết một script Bash đơn giản để quét tất cả người dùng trên hệ thống, sử dụng chage -l để kiểm tra các tài khoản sắp hết hạn mật khẩu và gửi email cảnh báo tự động cho cả người dùng và quản trị viên. Việc tự động hóa này giúp bạn quản lý một cách chủ động thay vì phải xử lý sự cố một cách bị động khi tài khoản đã bị khóa.

Các vấn đề thường gặp và cách xử lý
Không thể thay đổi thông số do thiếu quyền
Một trong những lỗi phổ biến nhất mà người mới bắt đầu gặp phải khi sử dụng chage là nhận được thông báo lỗi “permission denied” (từ chối quyền truy cập). Nguyên nhân của vấn đề này rất đơn giản: lệnh chage thực hiện các thay đổi trên tệp /etc/shadow, một tệp hệ thống cực kỳ nhạy cảm chứa thông tin mật khẩu đã được mã hóa của người dùng. Chỉ có người dùng root (quản trị viên cao nhất) mới có quyền ghi vào tệp này. Do đó, để thực thi lệnh chage thành công, bạn phải có đặc quyền root. Giải pháp là sử dụng lệnh sudo trước mỗi lệnh chage. Ví dụ, thay vì gõ chage -M 90 username, bạn cần gõ sudo chage -M 90 username. Lệnh sudo cho phép bạn thực thi một lệnh duy nhất với quyền của người dùng root, đảm bảo bạn có đủ thẩm quyền để sửa đổi các cài đặt bảo mật.

Thông tin hiển thị không chính xác
Trong một số trường hợp hiếm gặp, bạn có thể thấy rằng thông tin ngày tháng do chage -l hiển thị có vẻ không chính xác, ví dụ như ngày hết hạn nằm ngoài dự kiến. Nguyên nhân sâu xa của vấn đề này thường không nằm ở lệnh chage mà là do thời gian của hệ thống bị sai lệch. Các tính toán về tuổi thọ mật khẩu hoàn toàn phụ thuộc vào đồng hồ hệ thống. Nếu đồng hồ của máy chủ đang chạy sai (nhanh hơn hoặc chậm hơn so với thời gian thực), tất cả các mốc thời gian liên quan đến hết hạn mật khẩu, cảnh báo và khóa tài khoản cũng sẽ bị tính toán sai theo. Để khắc phục, bạn cần đảm bảo rằng thời gian hệ thống luôn được đồng bộ hóa chính xác. Cách tốt nhất để làm điều này là cấu hình dịch vụ Linux là gì NTP (Network Time Protocol) để máy chủ của bạn tự động đồng bộ hóa thời gian với một máy chủ thời gian đáng tin cậy trên internet.
Best Practices
Để tận dụng tối đa sức mạnh của lệnh chage và duy trì một hệ thống an toàn, việc tuân thủ các thực hành tốt nhất là vô cùng quan trọng. Dưới đây là những khuyến nghị hàng đầu từ các chuyên gia quản trị hệ thống.
- Luôn sao lưu dữ liệu trước khi thay đổi: Trước khi thực hiện các thay đổi hàng loạt đối với chính sách mật khẩu, đặc biệt là thông qua script, hãy tạo một bản sao lưu của tệp
/etc/shadowvà/etc/passwd. Điều này đảm bảo bạn có thể khôi phục lại trạng thái cũ nếu có sự cố xảy ra. - Thử nghiệm trên môi trường test: Đừng bao giờ áp dụng một chính sách mật khẩu mới trực tiếp lên môi trường sản xuất (production). Hãy thử nghiệm các thay đổi trên một máy chủ thử nghiệm (VirtualBox là gì) trước để đánh giá tác động và đảm bảo mọi thứ hoạt động như mong đợi.
- Đặt thời hạn mật khẩu hợp lý: Như đã đề cập, một chính sách quá khắt khe có thể phản tác dụng. Thời hạn hiệu lực của mật khẩu trong khoảng 60-90 ngày được coi là tiêu chuẩn vàng, cân bằng giữa bảo mật và sự tiện lợi cho người dùng.
- Kết hợp cảnh báo và khóa tài khoản: Sử dụng tham số
-Wđể cảnh báo sớm cho người dùng và tham số-Iđể thiết lập một khoảng thời gian “ân hạn” trước khi khóa tài khoản. Sự kết hợp này tạo ra một quy trình thực thi chính sách vừa mềm dẻo vừa hiệu quả. - Theo dõi thường xuyên bằng script tự động: Đừng chờ đến khi có vấn đề. Hãy chủ động viết các script đơn giản để tự động kiểm tra định kỳ trạng thái mật khẩu của tất cả người dùng và gửi báo cáo về các tài khoản sắp hết hạn. Điều này giúp bạn phát hiện và giải quyết các vấn đề tiềm ẩn từ sớm.

Kết luận
Qua bài viết này, chúng ta đã cùng nhau khám phá sâu sắc về lệnh chage – một công cụ tuy nhỏ nhưng lại có vai trò vô cùng quan trọng trong việc củng cố bảo mật và quản lý tài khoản người dùng trên hệ thống Linux. Từ việc tìm hiểu cú pháp, ý nghĩa của từng tham số cho đến các ví dụ thực tế và mẹo quản trị hiệu quả, có thể thấy chage không chỉ đơn thuần là một lệnh để đặt ngày hết hạn mật khẩu. Nó là một công cụ toàn diện giúp quản trị viên thực thi các chính sách bảo mật phức tạp một cách nhất quán và chính xác, đảm bảo tuân thủ các tiêu chuẩn an ninh thông tin của tổ chức. Việc áp dụng thành thạo chage sẽ giúp bạn nâng cao đáng kể khả năng bảo vệ hệ thống trước các mối đe dọa liên quan đến mật khẩu yếu hoặc bị chiếm đoạt. Chúng tôi khuyến khích bạn bắt đầu áp dụng ngay những kiến thức này, tùy chỉnh các cấu hình sao cho phù hợp nhất với chính sách bảo mật của doanh nghiệp mình. Để tiếp tục nâng cao kỹ năng, bước tiếp theo bạn có thể tìm hiểu là cách viết các script tự động hóa, kết hợp chage với các lệnh quản trị người dùng khác như useradd, usermod, và passwd để xây dựng một quy trình quản lý người dùng toàn diện và hiệu quả hơn.