Tôi có nên xóa mật khẩu của người dùng sau khi thiết lập xác thực khóa chung cho SSH không?


19

Tốt nhất là sử dụng khóa chung cho SSH. Vì vậy, tôi sshd_configPasswordAuthentication no.

Một số người dùng không bao giờ đăng nhập, ví dụ người dùng sftp có shell /usr/sbin/nologin. Hoặc một tài khoản hệ thống.

Vì vậy, tôi có thể tạo một người dùng như vậy mà không cần mật khẩu adduser gary --shell /usr/sbin/nologin --disabled-password.

Đó có phải là một ý tưởng tốt / xấu? Có sự phân nhánh nào tôi chưa xem xét?


3
Miễn là đây không phải là tài khoản của người dùng thực hoặc họ không cần mật khẩu của họ để sudotruy cập (do không có quyền sudo nào cả, hoặc có quyền sudo với NOPASSWD), 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.
Doktor J

Câu trả lời:


35

Nếu bạn có quyền truy cập root vào máy chủ và có thể tạo lại khóa ssh cho người dùng của bạn trong trường hợp họ mất chúng

bạn chắc chắn rằng một người dùng (với tư cách là một người) sẽ không có nhiều tài khoản người dùng và họ cần chuyển đổi giữa các tài khoản trên một phiên SSH (tốt, họ cũng có thể mở nhiều phiên SSH nếu có nhu cầu)

họ sẽ không bao giờ cần truy cập "vật lý" (thông qua bàn phím + màn hình hoặc qua bảng điều khiển từ xa cho máy ảo) vào máy chủ

không có người dùng nào có sudoquyền truy cập bằng mật khẩu (nghĩa là họ hoàn toàn không có quyền truy cập sudo hoặc có quyền truy cập sudo với NOPASSWD)

Tôi nghĩ bạn sẽ tốt thôi.

Chúng tôi có nhiều máy chủ hoạt động được cấu hình như thế này (chỉ một số tài khoản cần truy cập vào VM thông qua bảng điều khiển từ xa vmware, những máy chủ khác chỉ kết nối qua SSH với pubkey auth).


9
Tôi cũng nói thêm "bạn biết người dùng sẽ không bao giờ phải truy cập hệ thống từ các hệ thống từ xa thiếu khóa SSH riêng tư của họ". Và "Bạn sẵn sàng đối phó với những người dùng gặp phải tình huống mà bạn không nghĩ tới."
Andrew Henle

7
Điều kiện đầu tiên là IMO không cần thiết. Người dùng của bạn nên tự tạo khóa của họ. Bạn chỉ cần ủy quyền các khóa công khai của họ khi họ đưa chúng cho bạn. Nếu họ mất một khóa, họ sẽ tạo một khóa khác và bạn sẽ thay thế khóa cũ trên máy chủ.
Barshe Drevet-Droguet

1
@AndrewHenle Đó là một điểm tốt, tuy nhiên nếu sshd có PasswordAuthentication nothì đó là một vấn đề khác (người dùng sẽ không thể đăng nhập bằng mọi cách).
lonix

1
"Không bao giờ" là một thời gian dài như vậy. Quản trị viên có thể dễ dàng thêm lại xác thực mật khẩu, nếu cần.
hyde

2
Chà, câu hỏi rõ ràng liên quan đến các tài khoản chắc chắn không (và có lẽ không nên) đăng nhập, như tài khoản hệ thống được sử dụng bởi các dịch vụ cụ thể hoặc người dùng chỉ sử dụng sftp. Câu hỏi cũng nói rằng người dùng không có vỏ đăng nhập. Đối với các loại người dùng này, tôi nghĩ nên tắt thông tin đăng nhập qua mật khẩu một cách rõ ràng.
Christian Gawron

27

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/shadowsẽ 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-passwdsẽ tạo ra một /etc/shadowmụ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 -lcó 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 passwdlệnh xuất phát từ shadowgói cũ đã được thay đổi để định nghĩa lại passwd -ltừ "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ộ shadownguồ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 492307lỗi 389183 có thể hữu ích trong việc tìm hiểu suy nghĩ đằng sau điều này.


Cảm ơn đã cảnh báo ... Tôi sẽ chỉnh sửa câu hỏi để không ai mắc lỗi đó!
lonix

Có phải cảnh báo của bạn cũng áp dụng cho trường hợp tôi sử dụng adduser --disabled-passwd- vì vậy nếu một số dịch vụ khác cho phép xác thực mật khẩu, thì người dùng có thể đăng nhập mà không cần mật khẩu?
lonix

1
Không, adduser --disabled-passwordđặc biệt làm cho xác thực mật khẩu không thể thành công cho tài khoản đó.
telcoM

Bởi vì việc xóa mật khẩu có vẻ rất ngây thơ nhưng rất nguy hiểm, tôi khuyên bạn nên chuyển đoạn văn về nó bằng đoạn văn về việc sử dụng *để nó là điều đầu tiên mọi người đọc.
Thuyền trưởng Man

1
Wow, đó là một bất ngờ khó chịu đang chờ xảy ra ... và như thường lệ, rõ ràng có một vấn đề tương thích để đổ lỗi cho nó. Nó xuất hiện trong passwdmã nguồn vào năm 2008. Bạn không thích nó khi thứ gì đó bạn từng học và sau đó dựa vào hóa ra không còn nữa?
telcoM
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.