Làm cách nào để tạo mật khẩu người dùng hiển thị dưới dạng văn bản rõ ràng trong Linux?


28

Chúng tôi biết rằng mật khẩu của người dùng được lưu vào /etc/passwd, nhưng theo cách được mã hóa, do đó, ngay cả root cũng không thể nhìn thấy chúng:

jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash

Như được hiển thị ở trên, :x:đại diện cho mật khẩu.

Có cách nào (cấu hình có thể) để lưu mật khẩu trong /etc/passwdvăn bản rõ ràng và sao cho root có thể nhìn thấy chúng?


10
Không. Và đó là một tính năng. Cũng không có lý do thực sự nào cho nó vì tài khoản root không cần mật khẩu người dùng để truy cập các tệp của họ. Trong hoàn cảnh nào bạn sẽ muốn điều này?
HalosGhost

1
Tôi chỉ tò mò về điều này, tại sao quản trị viên (gốc) của hệ thống không thể nhìn thấy mật khẩu của những người dùng khác?
dùng78050

5
@ user78050 vì người dùng root không có lý do để biết mật khẩu của những người dùng khác và sẽ là một rủi ro bảo mật lớn khi cho phép họ làm như vậy.
David Z

16
Bởi vì nó vi phạm nguyên tắc bảo mật đơn giản nhất trong doanh nghiệp: "không bao giờ lưu trữ mật khẩu ở dạng văn bản thuần túy". Khi bảo mật được thực hiện tốt, chỉ người dùng nên biết mật khẩu của họ, không ai khác. Thêm vào đó, hoàn toàn không có lý do để làm điều này. Tôi không thể nghĩ về một tình huống quản trị duy nhất nơi nó sẽ giúp người dùng root biết mật khẩu của người dùng khác.
HalosGhost

3
Sử dụng "phương pháp mã hóa" MD5 sau đó bẻ khóa mật khẩu bằng bảng cầu vồng .
Cristian Ciupitu

Câu trả lời:


58

Hai câu trả lời còn lại đã nói với bạn chính xác về điều đó! Giành điều đó là một ý tưởng tồi ™ . Nhưng họ cũng nói với bạn là khó thực hiện, đòi hỏi phải thay đổi một loạt các chương trình.

Đo không phải sự thật. Nó rất dễ. Bạn chỉ cần thay đổi một hoặc hai tệp cấu hình. Tôi cảm thấy điều quan trọng là phải chỉ ra điều này, bởi vì bạn nên biết về nó khi đăng nhập vào các hệ thống mà bạn không kiểm soát. Chúng sẽ không thực sự đặt mật khẩu văn bản đơn giản vào /etc/passwdhoặc /etc/shadow, nó sẽ chuyển sang một tệp khác. Lưu ý tôi chưa kiểm tra những thứ này, vì tôi không muốn có mật khẩu của mình ở dạng văn bản đơn giản.

  1. Chỉnh sửa /etc/pam.d/common-password(để bắt mật khẩu đã thay đổi) hoặc /etc/pam.d/common-auth(để bắt kịp đăng nhập) và thêm vào… pam_exec expose_authtok log=/root/passwords /bin/cat

  2. Chỉnh sửa cả hai thứ đó và chuyển từ pam_unix sang pam_userdb với crypt=none. Ngoài ra, bạn chỉ có thể đặt nó trong mật khẩu chung (cũng để lại pam_unix) để chỉ ghi lại mật khẩu khi chúng được thay đổi.

  3. Bạn có thể xóa shadowtùy chọn (cũng như mọi tùy chọn băm mạnh) khỏi pam_unix để tắt tệp bóng và quay lại mật khẩu mật mã truyền thống. Không phải văn bản đơn giản, nhưng John the Ripper sẽ sửa nó cho bạn.

Để biết thêm chi tiết, hãy xem Hướng dẫn quản trị hệ thống PAM .

Bạn cũng có thể chỉnh sửa mã nguồn của PAM hoặc viết mô-đun của riêng bạn. Bạn chỉ cần biên dịch PAM (hoặc mô-đun của bạn), không có gì khác.


1
Tôi cho rằng mật khẩu văn bản đơn giản được ghi vào /root/passwords.
Faheem Mitha

Btw. rất tốt để biết nó dễ dàng như thế nào và tôi phải xem xét ở đâu nếu sợ một hệ thống bị xâm phạm.
erik

8
@erik Đó là đặc quyền của người hỏi để chọn bất kỳ câu trả lời nào mà anh ấy / cô ấy thấy hữu ích nhất là câu trả lời được chấp nhận. Có lẽ đó là một điều tốt mà OP thấy "đừng làm vậy!" Nói một cách hữu ích nhất Ngoài ra, rõ ràng, đây không phải là cách duy nhất để đánh cắp mật khẩu trên một hệ thống bị xâm phạm hoặc quản lý độc hại. Vì vậy, bạn không thể chỉ nhìn vào cấu hình PAM để xác định rằng bạn an toàn.
derobert

3
Điều này đúng hơn là giả sử bản phân phối đang sử dụng PAM, không có nghĩa là tất cả chúng đều được.
Vality

1
@msw Tôi đã trả lời vì rõ ràng có một niềm tin phổ biến rằng việc chạy một hộp Linux với mật khẩu văn bản rõ ràng là khó khăn (Bobby, với tín dụng của anh ấy, đã sửa câu trả lời của anh ấy; Anthon vẫn làm cho nó khó nghe). Đó là một niềm tin nguy hiểm, vì nó khuyến khích sử dụng lại mật khẩu. Nếu tôi chỉ đăng một câu trả lời "thực sự dễ dàng, bạn chỉnh sửa một hoặc hai tệp, nhưng tôi sẽ không nói với bạn" thì không ai có thể tin điều đó. Tại sao nghe tôi qua (tại thời điểm đó) được bình chọn cao hơn, câu trả lời kỹ lưỡng hơn? Làm cho điểm cần phải nói làm thế nào để làm điều đó. (Mặc dù, chúng không sao chép và dán ví dụ. Chúng tôi vẫn bắt buộc phải sử dụng.)
derobert

34

Ôi, được rồi, chúng ta hãy bắt đầu ngay từ đầu ...

Chúng tôi biết rằng mật khẩu của người dùng được lưu trong / etc / passwd, nhưng theo cách được mã hóa

Không, chúng đã được lưu trữ trong đó /etc/passwd, và điều đó đã khá lâu rồi. Ngày nay, mật khẩu được lưu trữ trong một cái gọi là tệp bóng , hầu hết thời gian /etc/shadow.

nhưng theo cách được mã hóa, do đó, ngay cả root cũng không thể nhìn thấy chúng:

Tôi biết đôi khi nó được sử dụng thay thế cho nhau, nhưng băm không phải là mã hóa . Mã hóa theo định nghĩa có thể đảo ngược, nghĩa là bạn có thể dịch lại thứ được mã hóa thành dạng Cleartext của nó. Băm được thiết kế để không thể đảo ngược theo bất kỳ cách nào (ngoại trừ lực lượng vũ phu). Các hình thức rõ ràng ban đầu của một cái gì đó được băm không được cho là có thể phục hồi.

Mật khẩu trong tệp bóng được lưu trữ dưới dạng băm.

như hình trên: x: biểu thị mật khẩu

Trong xtrường hợp này chỉ là một trình giữ chỗ cho trường mật khẩu cũ. Có xnghĩa là mật khẩu có thể được tìm thấy trong tập tin bóng.

Có cách nào (cấu hình có thể) để lưu mật khẩu trong / etc / passwd trong văn bản rõ ràng và sao cho root có thể nhìn thấy chúng?

Vâng, điều này thực sự có thể, nhưng không phải là một ý tưởng tốt cho một số lý do. Câu trả lời của Derobert giải thích một cách khá đơn giản để làm điều đó .

Nhưng tại sao nó không phải là một ý tưởng tốt? Vâng, vì một lý do đơn giản nhưng rất quan trọng: bảo mật. Tôi đề nghị đọc những câu hỏi sau:

Nhưng để tóm tắt, giả sử như sau: Có một máy chủ trong một công ty, tất cả các tài khoản người dùng được bảo mật bằng mật khẩu của họ và dữ liệu trong các tài khoản người dùng này được mã hóa với cùng một mật khẩu. Một kẻ bẻ khóa từ bên ngoài giành quyền truy cập vào máy chủ, nhưng họ không thể truy cập bất kỳ dữ liệu quan trọng nào vì điều đó vẫn được mã hóa trong tài khoản người dùng.

Bây giờ giả sử mật khẩu sẽ được lưu trữ trong văn bản đơn giản. Các cracker sẽ đột nhiên có quyền truy cập vào tất cả mọi thứ , bởi vì mật khẩu có thể được đọc. Nhưng nếu chúng được lưu trữ dưới dạng các giá trị băm, chúng gần như vô dụng với bất kỳ ai ngoại trừ những người có nhiều tài nguyên để thực hiện một cuộc tấn công vũ phu.


2
Để bảo vệ OP về mã hóa và băm, trang man mật mã từ glibc nói: «Nếu muối là một chuỗi ký tự bắt đầu bằng các ký tự được "$id$"theo sau bởi một chuỗi kết thúc bởi "$": $id$salt$encrypted sau đó thay vì sử dụng máy DES, hãy idxác định phương thức mã hóa được sử dụng và sau đó xác định cách phần còn lại của chuỗi được diễn giải ».
Cristian Ciupitu

1
Thú vị, nhưng không trả lời câu hỏi chính, như câu trả lời của derobert.
erik

6
@erik Đôi khi, câu trả lời đúng cho một câu hỏi là không nên làm điều đó, ngay cả khi điều đó có thể về mặt kỹ thuật. Đây là một trong những thời điểm.
Gilles 'SO- ngừng trở nên xấu xa'

1
Tôi đề nghị thay đổi dòng này: "Không, không có cách nào ngoại trừ thay đổi nhiều ứng dụng và cách chúng hoạt động." Điều đó để lại ấn tượng rằng nó không dễ dàng (hoặc ít nhất là dễ dàng để làm một cái gì đó tương đương về chức năng).
derobert

2
@Bulk Đây là một câu trả lời xuất sắc, nhưng không phải là một câu trả lời xuất sắc. Để làm cho nó trở thành một câu trả lời tuyệt vời, bạn nên thay đổi phần về nó là "không dễ dàng có thể", bởi vì nó rõ ràng là, như thể hiện trong câu trả lời của derobert.
Michael Dorst

10

Trước hết mật khẩu được mã hóa không có /etc/passwd, nhưng chúng nằm trong /etc/shadow. Một trong những lý do cho điều này là /etc/passwdcó thể đọc được công khai (vì vậy bạn có thể tìm thông tin trường GECOS cho một người dùng khác), và đặc biệt với các chương trình mã hóa cũ hơn có thể cho phép các cuộc tấn công vũ phu chống lại mật khẩu được mã hóa.

Để chỉ lưu trữ mật khẩu trong văn bản thuần túy, không cần thiết và sẽ yêu cầu cập nhật chương trình mật khẩu và thư viện đọc /etc/shadowthông tin để kiểm tra mật khẩu hợp lệ. Và sau đó, bạn phải hy vọng rằng tất cả các tiện ích sử dụng các thư viện dùng chung để truy cập thông tin đó thay vì được liên kết tĩnh với thứ gì đó không hiểu lưu trữ mật khẩu văn bản đơn giản.

Nếu đây là một tùy chọn trong cấu hình của một thiết lập, thì sẽ luôn có những người ngu ngốc sẽ bật nó không phù hợp. Và trong khi họ vẫn đang làm việc trên màn hình CRT và phát nó theo cách có thể dễ dàng nhặt được từ bên ngoài tòa nhà của họ, trong khi họ đang xem thông tin.

Bên cạnh đó, mọi người có xu hướng sử dụng cùng một mật khẩu hoặc tương tự trên nhiều hệ thống, vì vậy đó không phải là ý tưởng tốt cho bất kỳ mật khẩu nào có thể đọc được. Vì một số sysadmin có thể thử lại hệ thống của họ trên (các) hệ thống khác, anh ta biết người dùng có tài khoản.

Phải có nhiều điều thú vị hơn, hoạt động của có thể được điều tra trên hệ thống của bạn.


3
/etc/shadowkhông lưu trữ mật khẩu được mã hóa, nó lưu trữ băm mật khẩu. Vâng, chức năng được gọi cryptvà trang người đàn ông nói mã hóa mã hóa, nhưng nếu bạn gọi một con cá là một chiếc xe đạp, điều đó không mang lại cho nó bánh xe. Lưu ý rằng có thể tạo /etc/shadowmật khẩu lưu trữ ở định dạng khác mà không cần biên dịch lại bất kỳ chương trình nào (ít nhất là trên Linux và Solaris): phương thức xác thực luôn được liên kết động. Lưu trữ mật khẩu dưới dạng văn bản đơn giản sẽ là một ý tưởng tồi tệ nhưng có thể với một chút công việc .
Gilles 'SO- ngừng trở nên xấu xa'

@gilles Tôi chỉ sử dụng lại thuật ngữ OP, nhưng bạn nói đúng rằng băm là một thuật ngữ phù hợp hơn.
Anthon

3

Lý do cơ bản (tại sao đây là một ý tưởng tồi) là không người dùng nào (root, admin hoặc người khác) không nên truy cập vào mật khẩu người dùng của người khác.

Đơn giản vì mật khẩu là một phương tiện xác thực. Nếu tôi biết một số mật khẩu người dùng khác, tôi biết thông tin đăng nhập của họ (tên người dùng + mật khẩu), vì vậy tôi có thể đăng nhập với tư cách là người dùng đó , mạo danh anh ấy (hoặc cô ấy hoặc anh ấy).

Bất kỳ hành động nào tôi làm khi đăng nhập với tư cách người dùng đó, người dùng khác sẽ chịu trách nhiệm. Và đó không phải là cách xác thực nên hoạt động.

Các hành động có thể là thảm họa, như xóa một loạt các tệp quan trọng, xóa đĩa cứng, xóa bản sao lưu, tắt kế hoạch điện hạt nhân, v.v.

Hoặc chỉ bất hợp pháp. Hãy tưởng tượng một tổ chức ngân hàng nơi tôi (quản trị viên) có quyền truy cập vào tất cả mật khẩu. Sử dụng mật khẩu của nhân viên thu ngân, tôi có thể yêu cầu chuyển một triệu đô la từ tài khoản ngân hàng của tổng thống sang tài khoản ngân hàng của người dọn dẹp cửa sổ. Sau đó sử dụng mật khẩu cao cấp của nhân viên thu ngân để phê duyệt giao dịch. Sau đó phê duyệt séc từ tài khoản của người dọn dẹp cửa sổ đến tài khoản ngân hàng nước ngoài của riêng tôi.

Sau đó, tôi đi nghỉ dài ngày ở Bahamas ...


Theo quan điểm đó, việc băm mật khẩu và sử dụng các tệp bóng riêng biệt có thể được coi là một phương tiện để thực thi quy tắc này (không người dùng nào có thể mạo danh người khác).

Và như @ Miral đã nhận xét * , có một ngoại lệ sutrong khi cho phép mạo danh (và loại bỏ các đối số ở trên), cũng đang giữ một bản ghi sử dụng của nó (vì vậy nó thay đổi các quy tắc thành "chỉ quản trị viên mới có thể mạo danh người khác nhưng nhật ký được lưu giữ ").

* Ví dụ ngân hàng có lẽ không phải là tốt nhất. Trong bất kỳ môi trường nào bảo mật là rất quan trọng, thường cần nhiều phương tiện xác thực và ủy quyền hơn là chỉ một mật khẩu.


Một lỗ hổng với lập luận này là người dùng root có thể mạo danh bất kỳ người dùng nào khác trên hệ thống mà không cần phải biết mật khẩu của họ. Dễ như su otheruser.
Miral

@Mirus bạn nói đúng, tôi không xem xét điều này. Và mặc dù việc sử dụng suđược ghi lại, su không lưu giữ hồ sơ về những gì thực sự được thực hiện trong khi người dùng mạo danh người khác. Và một gốc độc hại luôn có thể thay đổi nhật ký để che giấu các hành động từ các nhà điều tra trong tương lai.
ypercubeᵀᴹ
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.