Phần này giới thiệu về mật khẩu người dùng cục bộ trên hệ thống Linux. Ở đây, bạn sẽ học cách thay đổi mật khẩu, thiết lập mật khẩu bằng các phương pháp khác nhau.
- Phương pháp đầu tiên là sử dụng lệnh passwd.
- Phương pháp thứ hai là sử dụng lệnh openssel passwd.
Người dùng có thể đặt mật khẩu bằng lệnh passwd. Họ cần phải nhập mật khẩu cũ hai lần trước khi nhập mật khẩu mới.
Cú pháp:
passwd <username>
Ví dụ:
root@wp-hoanghd:~# passwd hoanghd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Shadow File
Tập tin /etc/shadow là một tập tin hệ thống trong Linux chứa thông tin mật khẩu của người dùng hệ thống. Nó chỉ có thể đọc được bởi người dùng root và lưu trữ các thông tin nhạy cảm như mật khẩu của người dùng, thời gian đổi mật khẩu lần cuối, thời hạn hiệu lực mật khẩu, số ngày tối thiểu để đổi mật khẩu, cảnh báo mật khẩu, số ngày sau khi hết hạn để tài khoản bị vô hiệu hóa và ngày vô hiệu hóa tài khoản. Tập tin /etc/shadow được sử dụng để bảo mật mật khẩu của người dùng hệ thống và được bảo vệ bởi quyền truy cập của người dùng root.
root@wp-hoanghd:~# tail -n 6 /etc/shadow
sshd:*:19320:0:99999:7:::
ubuntu:$6$.5w/iCeu$nIM68/kLvsXXj3t12IuCl8UUhnbCn0tP91EuNANvpWv1NSSl8joX4pZL.tlrLwaOzZNFGX14YlHC8zEPA424E0:19321:0:99999:7:::
bind:*:19322:0:99999:7:::
hoanghd:$6$O8kw2rEK$uqUW24ut3.1uCLydlkfmthJDR9u1.wNdvDR1UD/59sePPP4spdHuINkPgffuPhru9jFrKDwYbpC/T9I3YQ3331:19450:0:99999:7:::
demo:!:19450:0:99999:7:::
xyz:!:19450:0:99999:7:::
Đây là một dòng trong file /etc/shadow của Linux và được sử dụng để lưu trữ mật khẩu của người dùng trong hệ thống. Dòng này chứa các giá trị được phân tách bằng dấu hai chấm (:).
Cụ thể, từ trái sang phải, các giá trị này lần lượt là: tên người dùng (ở đây là “hoanghd”), mật khẩu đã được mã hóa, ngày thay đổi mật khẩu lần cuối, số ngày mật khẩu không được thay đổi, ngày hết hạn mật khẩu, số ngày cảnh báo trước khi mật khẩu hết hạn, số ngày tài khoản bị vô hiệu hóa sau khi mật khẩu hết hạn, và ngày tài khoản bị vô hiệu hóa.
Ví dụ:
$6$O8kw2rEK$uqUW24ut3.1uCLydlkfmthJDR9u1.wNdvDR1UD/59sePPP4spdHuINkPgffuPhru9jFrKDwYbpC/T9I3YQ3331 là mật khẩu đã được mã hóa của người dùng "hoanghd".
Encryption With passwd
Mật khẩu luôn được lưu trữ dưới dạng được mã hóa. Việc mã hóa được thực hiện bằng chức năng crypt. Cách đơn giản nhất để thêm một người dùng với mật khẩu là thêm người dùng với lệnh useradd -m và sau đó thiết lập mật khẩu của người dùng bằng lệnh passwd.
Mã hóa bằng openssl
Để tạo một người dùng với mật khẩu, ta có thể sử dụng tùy chọn -p, tuy nhiên điều đó yêu cầu một mật khẩu được mã hóa.
Mật khẩu được mã hóa này có thể được tạo ra bằng lệnh openssl passwd.
Lệnh openssl passwd có thể tạo ra nhiều loại băm (hash) khác nhau cho cùng một mật khẩu. Để làm điều này, nó sử dụng salt.
root@wp-hoanghd:~# openssl passwd hoanghd
FQpWMNM/Oe/X.
root@wp-hoanghd:~# openssl passwd hoanghd
zWtvNyoltM266
root@wp-hoanghd:~# openssl passwd hoanghd
ObOsmIvNNHGfA
“Salt” là một chuỗi ngẫu nhiên được thêm vào mật khẩu để tăng tính bảo mật. Nó được sử dụng để tạo ra một mã băm khác nhau cho cùng một mật khẩu. “Salt” có thể được chọn và hiển thị dưới dạng hai ký tự đầu tiên của mã băm như được thể hiện bên dưới.
root@wp-hoanghd:~# openssl passwd -salt 32 hoanghd
326VJwnWE28ng
root@wp-hoanghd:~# openssl passwd -salt 32 hoanghd
326VJwnWE28ng
root@wp-hoanghd:~# openssl passwd -salt 32 hoanghd
326VJwnWE28ng
root@wp-hoanghd:~# openssl passwd -salt 32 hoanghd
326VJwnWE28ng
Cú pháp sử dụng lệnh openssl passwd để tạo mật khẩu cho người dùng.
useradd -m -p $(openssl passwd hunter2) <userName>
Ví dụ
useradd -m -p $(openssl passwd hoanghd_pass) hoanghd
Đây là lệnh tạo một người dùng mới trên hệ thống Linux và thiết lập mật khẩu cho người dùng đó bằng cách sử dụng openssl để mã hóa mật khẩu. Cụ thể, lệnh này thực hiện các hành động sau:
- useradd: lệnh để tạo một người dùng mới
- -m: tùy chọn để tạo thư mục home cho người dùng mới
- -p: tùy chọn để thiết lập mật khẩu cho người dùng mới bằng cách cung cấp mật khẩu được mã hóa. Ở đây, mật khẩu được mã hóa bằng cách sử dụng openssl.
- $(openssl passwd hoanghd_pass): tạo mật khẩu được mã hóa sử dụng lệnh openssl passwd và chuỗi “hoanghd_pass” được sử dụng làm mật khẩu của người dùng mới
- hoanghd: tên người dùng mới được tạo.
/etc/login.defs
File /etc/login.defs chứa các cài đặt cấu hình để điều chỉnh hành vi đăng nhập của người dùng trong hệ thống. Các cài đặt này bao gồm, giới hạn độ dài mật khẩu, số lần thử sai đăng nhập, thời gian tự động đăng xuất và nhiều hơn nữa. Các cài đặt này có thể được sửa đổi để tùy chỉnh hành vi đăng nhập của hệ thống theo nhu cầu của người quản trị.
root@wp-hoanghd:~# grep PASS /etc/login.defs
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_WARN_AGE Number of days warning given before a password expires.
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
#PASS_CHANGE_TRIES
#PASS_ALWAYS_WARN
#PASS_MIN_LEN
#PASS_MAX_LEN
# NO_PASSWORD_CONSOLE
chage
Trong hệ thống Linux, lệnh “chage” được sử dụng để thay đổi các thông số về ngày hết hạn của tài khoản người dùng. Các thông số này bao gồm ngày thay đổi mật khẩu lần cuối, ngày hết hạn mật khẩu, số ngày trước khi hết hạn mật khẩu để hệ thống cảnh báo người dùng thay đổi mật khẩu, số ngày sau khi hết hạn mật khẩu mà tài khoản vẫn còn hoạt động, và ngày vô hiệu hóa tài khoản. Lệnh “chage” cũng có thể được sử dụng để xem các thông số này cho một tài khoản cụ thể.
chage -l <userName>
Ví dụ
root@wp-hoanghd:~# chage -l hoanghd
Last password change : Apr 03, 2023
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
Đây là thông tin về các quy định bảo mật liên quan đến mật khẩu của người dùng được lưu trữ trong file /etc/shadow
. Cụ thể, các thông tin này là:
Last password change
: Ngày thay đổi mật khẩu cuối cùng của người dùng. Trong ví dụ này, là ngày 03 tháng 04 năm 2023.Password expires
: Thời hạn mật khẩu. Trong ví dụ này, mật khẩu sẽ không bao giờ hết hạn.Password inactive
: Thời gian không hoạt động cho phép trước khi tài khoản của người dùng bị khóa do không đăng nhập quá hạn. Trong ví dụ này, tài khoản không bao giờ bị khóa do không hoạt động.Account expires
: Thời hạn tài khoản của người dùng. Trong ví dụ này, tài khoản không bao giờ hết hạn.Minimum number of days between password change
: Số ngày tối thiểu giữa các lần thay đổi mật khẩu. Trong ví dụ này, là 0 ngày, có nghĩa là người dùng có thể thay đổi mật khẩu bất kỳ lúc nào.Maximum number of days between password change
: Số ngày tối đa giữa các lần thay đổi mật khẩu. Trong ví dụ này, là 99999 ngày, có nghĩa là người dùng có thể giữ mật khẩu hiện tại trong rất nhiều năm trước khi cần phải thay đổi.Number of days of warning before password expires
: Số ngày cảnh báo trước khi mật khẩu của người dùng hết hạn. Trong ví dụ này, là 7 ngày, có nghĩa là hệ thống sẽ thông báo cho người dùng biết về việc mật khẩu sắp hết hạn 7 ngày trước khi thực sự hết hạn.
Disabling A Password
Cú pháp
usermod -L <userName>
usermod -L hoanghd
là một lệnh trên hệ thống Linux, với tác dụng khóa tài khoản của người dùng có tên là “hoanghd”. Khi một tài khoản bị khóa, người dùng không thể đăng nhập vào hệ thống với tài khoản đó. Các lệnh sau đó sẽ không thể thực hiện được nếu người dùng đã bị khóa tài khoản. Lệnh này sử dụng option “-L” để khóa tài khoản của người dùng được chỉ định.
root@wp-hoanghd:~# usermod -L hoanghd
Kết quả username hoanghd trong file shadow.
root@wp-hoanghd:~# grep hoanghd /etc/shadow
hoanghd:!$6$O8kw2rEK$uqUW24ut3.1uCLydlkfmthJDR9u1.wNdvDR1UD/59sePPP4spdHuINkPgffuPhru9jFrKDwYbpC/T9I3YQ3331:19450:0:99999:7:::
Kết quả trên là kết quả trả về khi chạy lệnh grep hoanghd /etc/shadow
. Đây là một dòng dữ liệu trong file /etc/shadow
của user hoanghd
.
File /etc/shadow
chứa thông tin về các tài khoản người dùng trên hệ thống, bao gồm mật khẩu đã được mã hóa. Trong đó, mỗi dòng của file này chứa thông tin về một người dùng, được phân tách bởi dấu hai chấm.
Cụ thể, thông tin về mật khẩu của user hoanghd
là !$6$O8kw2rEK$uqUW24ut3.1uCLydlkfmthJDR9u1.wNdvDR1UD/59sePPP4spdHuINkPgffuPhru9jFrKDwYbpC/T9I3YQ3331
. Đây là mật khẩu đã được mã hóa bằng thuật toán SHA-512
và sử dụng salt là O8kw2rEK
. Bên cạnh đó, thông tin về ngày thay đổi mật khẩu lần cuối, thời gian mật khẩu hết hạn, thời gian không hoạt động và thời gian tài khoản bị vô hiệu hóa cũng được hiển thị trong dòng này.
Enable A Password
Cú pháp
usermod -U <userName>
Ví dụ về lệnh “usermod -U hoanghd”. Lệnh này sẽ “Unlock” (mở khóa) tài khoản người dùng “hoanghd” bằng cách xóa ký tự “!” ở đầu chuỗi hash mật khẩu trong file /etc/shadow. Khi tài khoản đã được mở khóa, người dùng có thể đăng nhập vào hệ thống bình thường.
root@wp-hoanghd:~# grep hoanghd /etc/shadow
hoanghd:$6$O8kw2rEK$uqUW24ut3.1uCLydlkfmthJDR9u1.wNdvDR1UD/59sePPP4spdHuINkPgffuPhru9jFrKDwYbpC/T9I3YQ3331:19450:0:99999:7:::
Nội dung trên đang hiển thị nội dung của file /etc/shadow
được lọc với từ khóa “hoanghd”. Tệp shadow
chứa các thông tin liên quan đến mật khẩu của người dùng hệ thống, bao gồm mật khẩu đã được mã hóa và các thông tin khác liên quan đến cấu hình bảo mật.
Trong đoạn văn bản này, chuỗi đầu tiên sau tên người dùng “hoanghd” là mật khẩu đã được mã hóa. Mật khẩu này được mã hóa bằng thuật toán sha-512
và sử dụng salt là $6$O8kw2rEK
. Các thông số còn lại là:
19450
: Ngày cuối cùng khi người dùng đổi mật khẩu (tính bằng số ngày kể từ ngày 1/1/1970)0
: Số ngày sau khi mật khẩu hết hạn mà tài khoản vẫn có thể đăng nhập. 0 có nghĩa là không có thời hạn99999
: Số ngày tối đa giữa các lần đổi mật khẩu7
: Số ngày trước khi mật khẩu hết hạn mà hệ thống sẽ cảnh báo người dùng.