Câu hỏi này ban đầu được đề cập passwd --delete <username>
là không an toàn : với điều đó, trường mật khẩu được mã hóa trong /etc/shadow
sẽ hoàn toàn trống rỗng.
username::...
Nếu bạn đã định cấu hình sshd
để từ chối xác thực mật khẩu, thì điều đó an toàn với SSH ... Nhưng nếu bất kỳ dịch vụ nào khác trên hệ thống của bạn sử dụng xác thực mật khẩu và không được định cấu hình để từ chối mật khẩu null, điều này cho phép truy cập mà không cần mật khẩu! Bạn không muốn điều này.
adduser --disabled-passwd
sẽ tạo ra một /etc/shadow
mục trong đó trường mật khẩu được mã hóa chỉ là dấu hoa thị, tức là
username:*:...
Đây là "mật khẩu được mã hóa không bao giờ có thể nhập thành công", nghĩa là tài khoản này hợp lệ và về mặt kỹ thuật cho phép đăng nhập, nhưng nó khiến việc xác thực bằng mật khẩu không thể thành công . Vì vậy, nếu bạn có bất kỳ dịch vụ dựa trên xác thực mật khẩu nào khác trên máy chủ của mình, người dùng này sẽ bị chặn khỏi chúng.
Chỉ các phương thức xác thực sử dụng thứ gì đó không phải mật khẩu tài khoản tiêu chuẩn (ví dụ: khóa SSH) mới hoạt động cho người dùng này, cho bất kỳ dịch vụ nào sử dụng tệp mật khẩu hệ thống trong hệ thống này. Khi bạn cần một người dùng chỉ có thể đăng nhập bằng các khóa SSH, đây là những gì bạn muốn.
Nếu bạn cần đặt tài khoản hiện tại ở trạng thái này, bạn có thể sử dụng lệnh này:
echo 'username:*' | chpasswd -e
Có một giá trị đặc biệt thứ ba cho trường mật khẩu được mã hóa : adduser --disabled-login
, sau đó trường sẽ chỉ chứa một dấu chấm than duy nhất.
username:!:...
Giống như dấu hoa thị, điều này làm cho xác thực mật khẩu không thể thành công, nhưng nó cũng có một ý nghĩa bổ sung: nó đánh dấu mật khẩu là "bị khóa" đối với một số công cụ quản trị. passwd -l
có nhiều tác dụng tương tự bằng cách thêm tiền tố băm mật khẩu hiện tại bằng dấu chấm than, điều này một lần nữa làm cho việc xác thực mật khẩu không thể sử dụng.
Nhưng đây là một cái bẫy cho người không thận trọng: vào năm 2008, phiên bản passwd
lệnh xuất phát từ shadow
gói cũ đã được thay đổi để định nghĩa lại passwd -l
từ "khóa tài khoản" thành "khóa mật khẩu". Lý do đã nêu là "để tương thích với phiên bản passwd khác".
Nếu bạn (như tôi) đã học được điều này từ lâu, nó có thể là một bất ngờ khó chịu. Nó cũng không giúp gì cho những vấn đề adduser(8)
dường như chưa nhận thức được sự khác biệt này.
Phần vô hiệu hóa tài khoản cho tất cả các phương thức xác thực thực sự đang đặt giá trị ngày hết hạn là 1 cho tài khoản : usermod --expiredate 1 <username>
. Trước năm 2008, passwd -l
điều đó bắt nguồn từ bộ shadow
nguồn được sử dụng để làm điều này ngoài việc thêm tiền tố vào mật khẩu bằng dấu chấm than - nhưng không còn làm điều đó nữa.
Thay đổi gói Debian nói:
- debian / patch / 494_passwd_lock-no_account_lock: Khôi phục hành vi trước đó của passwd -l (đã thay đổi trong # 389183): chỉ khóa mật khẩu người dùng, không phải tài khoản của người dùng. Cũng rõ ràng tài liệu về sự khác biệt. Điều này khôi phục một hành vi phổ biến với các phiên bản trước của passwd và với các triển khai khác. Đóng: # 492307
Lịch sử lỗi cho lỗi Debian 492307 và lỗi 389183 có thể hữu ích trong việc tìm hiểu suy nghĩ đằng sau điều này.
sudo
truy cập (do không có quyền sudo nào cả, hoặc có quyền sudo vớiNOPASSWD
), câu trả lời bạn chọn phải phù hợp. Tôi đã gửi một bản chỉnh sửa cho câu trả lời đó để bao gồm mối quan tâm sudo nhưng trong khi đó tôi sẽ gọi nó cho bạn ở đây.