Dù bạn làm gì, đừng để tài khoản ở trạng thái còn lại passwd -u
, với trường mật khẩu trống: cho phép đăng nhập mà không cần nhập mật khẩu (ngoại trừ SSH, vì SSH từ chối điều đó).
Thay đổi tài khoản để không có mật khẩu, nhưng được mở khóa. Tài khoản không có mật khẩu nếu băm mật khẩu trong cơ sở dữ liệu mật khẩu không phải là băm của bất kỳ chuỗi nào. Theo truyền thống, một chuỗi một ký tự như *
hoặc !
được sử dụng cho điều đó.
Các tài khoản bị khóa cũng sử dụng một điểm đánh dấu đặc biệt trong trường mật khẩu khiến chuỗi không phải là hàm băm của bất kỳ chuỗi nào. Điểm đánh dấu phụ thuộc vào hệ thống. Trên Linux, passwd
lệnh đánh dấu mật khẩu bị khóa bằng cách đặt dấu !
ở đầu và OpenSSH coi tài khoản là bị khóa nếu trường bắt đầu bằng !
. Các biến thể Unix khác có xu hướng sử dụng các cơ chế tương tự nhưng không giống nhau, vì vậy hãy cẩn thận nếu cơ sở dữ liệu mật khẩu của bạn được chia sẻ giữa một mạng không đồng nhất.
Trên Linux, bạn có thể vô hiệu hóa quyền truy cập dựa trên mật khẩu vào tài khoản trong khi cho phép truy cập SSH (với một số phương thức xác thực khác, thường là một cặp khóa) với
usermod -p '*' username
Người dùng sẽ không thể thay đổi tài khoản trở lại bằng mật khẩu, vì điều đó yêu cầu họ nhập mật khẩu hợp lệ.
Thay vào đó, nếu bạn muốn, bạn có thể định cấu hình SSH để từ chối xác thực mật khẩu, bất kể tài khoản có mật khẩu hay không. Bạn vẫn cần sắp xếp để SSH không coi tài khoản bị khóa, vì vậy, ví dụ trên Linux, bạn sẽ cần xóa !
trường mật khẩu (nhưng không làm trống trường - đặt thành *
như đã giải thích ở trên ). Để vô hiệu hóa xác thực mật khẩu cho SSH, hãy thêm một lệnh PasswordAuthentication
vào /etc/sshd_config
hoặc /etc/ssh/sshd_config
(bất cứ khi nào nó có trên hệ thống của bạn). Sử dụng một Match
khối để làm cho lệnh đó chỉ áp dụng cho một người dùng cụ thể; Match
khối phải xuất hiện
…
Match User username
PasswordAuthentication no