Tạo thủ công mật khẩu cho / etc / bóng


109

Tôi cần chỉnh sửa thủ công /etc/shadowđể thay đổi mật khẩu gốc bên trong hình ảnh máy ảo.

Có công cụ dòng lệnh nào lấy mật khẩu và tạo /etc/shadowhàm băm mật khẩu tương thích theo tiêu chuẩn không?

Câu trả lời:


126

Bạn có thể sử dụng các lệnh sau cho cùng:

Phương pháp 1 (md5, sha256, sha512)

openssl passwd -6 -salt xyz  yourpass

Lưu ý: truyền -1sẽ tạo mật khẩu MD5, -5SHA256 và -6SHA512 (được khuyến nghị)

Phương pháp 2 (md5, sha256, sha512)

mkpasswd --method=SHA-512 --stdin

Phương pháp chấp nhận md5, sha-256sha-512

Phương pháp 3 (des, md5, sha256, sha512)

Như @tink đã đề xuất, chúng tôi có thể cập nhật mật khẩu bằng chpasswdcách sử dụng:

echo "username:password" | chpasswd 

Hoặc bạn có thể sử dụng mật khẩu được mã hóa với chpasswd. Đầu tiên tạo ra nó bằng cách sử dụng này:

perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'

Sau đó, bạn có thể sử dụng mật khẩu được tạo để cập nhật:

echo "username:encryptedPassWd"  | chpasswd -e

Mật khẩu được mã hóa này, chúng tôi có thể sử dụng để tạo người dùng mới bằng mật khẩu, ví dụ:

useradd -p 'encryptedPassWd'  username

3
Khi sử dụng chpasswd -e, đảm bảo sử dụng các trích dẫn đơn trên chuỗi bạn echotham gia; mặt khác, nếu có $hoặc các ký tự đặc biệt khác, chúng sẽ không được xử lý theo nghĩa đen.
Zags

4
Lưu ý rằng làm cho những điều này sẽ kết thúc trong lịch sử vỏ của bạn. Tôi sẽ sử dụng openssl passwd -1cái 1) không kết thúc ở đó và 2) tạo ra một loại muối ngẫu nhiên cho bạn (cái này cũng không có trong lịch sử vỏ).
Ztyx

1
openssl passwdthông thạo cho bất cứ ai cố gắng tìm ra những gì các -1tùy chọn làm.
CivilFan

4
Đối với hàm băm SHA-512: python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'- từ câu hỏi ServerFault có liên quan
CivilFan

9
Phương pháp 1) và 2) ở trên sử dụng MD5 để băm. MD5 không được coi là thực hành tốt nhất nữa vì đã có va chạm băm. Sử dụng phương pháp 3) hoặc phương pháp được mô tả trong unix.stackexchange.com/a/198906/10911 .
Ztyx

36

Trên Ubuntu 12.04, có mkpasswd (từ gói whois): Giao diện người dùng quá nhiệt đến tiền điện tử (3)

mkpasswd  -m sha-512 -S saltsalt -s <<< YourPass

Ở đâu:

  • -m= Tính toán mật khẩu bằng phương pháp TYPE. Nếu TYPE là trợ giúp thì các phương thức có sẵn được in.
  • -S = muối sử dụng.

Ví dụ

$ mkpasswd -m help

-s = Read password from stdin

8
Không cần chỉ định muối, mkpasswd đảm nhiệm việc tạo ngẫu nhiên.
Đến 마

1
Không có vấn đề gì, mật khẩu được tạo từ mkpasswd được sao chép vào / etc / passwd luôn thất bại. Có cách nào để kiểm tra xem hàm băm được tạo bởi mkpasswd có đúng không?
CMCDragonkai

@CMCDragonkai: Câu hỏi sai. Bạn cần hỏi hệ thống của bạn đang mong đợi điều gì.
dùng3183018

1
@To 마 SE: Một lúc nào đó hữu ích để kiểm soát muối. Tôi đã sử dụng nó khi kiểm tra việc tạo mật khẩu băm cho ứng dụng web nơi tôi đang lưu trữ muối trong một cửa hàng riêng biệt. Ví dụ: mật khẩu băm trong MySQL DB và mỗi muối người dùng trong Redis.
dùng3183018

15

Giải pháp này có những lợi ích sau:

  • Không có gì bổ sung để cài đặt
  • Không lưu trữ mật khẩu trong lịch sử shell của bạn
  • Tạo ra một loại muối ngẫu nhiên cho bạn
  • Sử dụng thuật toán băm hiện đại, mạnh mẽ, SHA-512
  • Nhắc lại mật khẩu để tránh nhầm lẫn.

    $ python3 -c "from getpass import getpass; from crypt import *; \
        p=getpass(); print('\n'+crypt(p, METHOD_SHA512)) \
        if p==getpass('Please repeat: ') else print('\nFailed repeating.')"
    

Người giới thiệu


3

Đối với những người không có hệ thống dựa trên Debian. Python3 cũng hoạt động tốt.

python3 -c 'import crypt; print(crypt.crypt("test"))'

LƯU Ý: Chuỗi "kiểm tra" là mật khẩu mà chúng tôi đang tạo dưới dạng chuỗi được mã hóa.


Vì một số lý do, việc sử dụng crypt.mksaltkhông hoạt động khi tạo mật khẩu cho /etc/shadow. Nhưng phương pháp của @ Alex131089 hoạt động!
malawlawns

Chỉ lãng phí 1,5h khi thử phương pháp này, trước khi tôi nhận thấy bình luận. Ai đó có thể loại bỏ nó? Tôi không thể downvote được.
Michał F

1
@ MichałF Có vẻ như điều này không hiệu quả vì việc muối không được thực hiện đúng. Cảm ơn đã chỉ ra điều này. Tôi đã loại bỏ muối vì việc muối phụ thuộc vào hệ điều hành và nó không thực tế để giải thích cho tất cả các phạm vi của hệ điều hành trong câu trả lời của tôi. Bạn nên sử dụng Phương pháp 1 được phác thảo bởi @RahulPatil vì nó cho phép bạn sử dụng muối và openssllà một công cụ khá phổ biến.
Greg

Không nên, vì nó để lại mật khẩu trong lịch sử shell của bạn.
Mark Stosberg

Ý tôi là, bạn luôn có thể xóa cmd khỏi lịch sử shell của mình
Greg

3

Không có phương pháp hiện tại nào được tôi chấp nhận - Chúng truyền mật khẩu trên dòng lệnh (kết thúc trong lịch sử vỏ của tôi), yêu cầu cài đặt các tiện ích bổ sung ( python3, makepasswd), sử dụng muối được mã hóa cứng hoặc sử dụng các kỹ thuật băm cũ.

Phương pháp này sẽ tạo băm SHA-512 sau khi nhắc mật khẩu và sẽ sử dụng một loại muối ngẫu nhiên.

Một phương thức sử dụng Python 2 mà không có bất kỳ thư viện không chuẩn nào:

python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'

Để làm điều đó mà không cần nhắc: (Điều này sẽ để lại mật khẩu của bạn trong lịch sử lệnh)

python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'

2
Để tránh để lại mật khẩu trong lịch sử lệnh, bạn có thể đặt (ít nhất là bash) biến môi trường HISTCONTROL thành 'khoảng trống', sau đó thêm khoảng trắng ở phía trước lệnh.
adam820

@ adam820: Đó là một cách ... Nó vẫn sẽ ở psđầu ra trong một phần của giây mà lệnh đang chạy. (An toàn nhất vẫn là sử dụng phiên bản nhắc nhập mật khẩu)
Gert van den Berg

2

Các opensslchpasswd -ecặp đã không làm việc trong trường hợp của tôi trong RHEL6. Kết hợp openssl passwdusermod -pchỉ huy đã làm công việc.

Tạo giá trị băm của mật khẩu cùng với giá trị muối:

$ openssl passwd -1  -salt 5RPVAd clear-text-passwd43

$1$5RPVAd$vgsoSANybLDepv2ETcUH7.

Sau đó, sao chép chuỗi mã hóa vào usermod. Hãy chắc chắn để bọc nó với dấu ngoặc đơn.

$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root

Kiểm tra nó trong tập tin bóng tối.

$ grep root /etc/shadow

root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::

1

Một phương pháp khác để tạo mật khẩu, là sử dụng opensslcông cụ.

Tạo mật khẩu MD5

openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/

Tạo mật khẩu DES

openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2

3
Điều này khác với phương pháp 1 trong câu trả lời của Rahul Patil như thế nào? Lưu ý rằng thuật toán băm mật khẩu dựa trên DES cũ chắc chắn không nên được sử dụng! Đối với một điều, nó chỉ hỗ trợ mật khẩu lên đến tám byte, điều này là không đủ trong những ngày này.
một CVn

3
Trích dẫn Snowden: "Giả sử đối thủ của bạn có khả năng đoán được một nghìn tỷ mỗi giây." Với bộ ký tự 70 ký tự không hoàn toàn vô lý và mật khẩu hoàn toàn ngẫu nhiên, đó là 576 giây - chưa đầy mười phút. Ngay cả chống lại một kẻ thù ít có khả năng hơn nhưng quyết tâm, nó vẫn không đủ .
một CVn

Điều này không an toàn lắm, vì MD5 và DES ...
AdamKalisz

Cảm ơn vì đã là câu trả lời duy nhất cho thấy cách mã hóa mật khẩu DES! Rất hữu ích để cố gắng ghi đè mật khẩu gốc cho phần sụn camera IP.
Malvineous

1

Mở rộng một chút về những lời chỉ trích của u150825 và Gert van den Berg, tôi thấy mình cần một thứ gì đó tương đối linh hoạt cho các tình huống khác nhau với các hệ thống tự động hóa khác nhau. Tôi quyết định tôi sẽ thêm vào thư viện nhỏ các tập lệnh hữu ích của riêng mình và viết nó. Nó chỉ sử dụng các thư viện riêng từ python 2.7+ và cũng hoạt động trên python3.

Bạn có thể chọn nó ở đây nếu bạn thích. Thật dễ dàng để bỏ cái này vào môi trường của bạn nếu bạn cần sử dụng nó nhiều, được lưu trữ http hoặc bất cứ thứ gì, và bạn có thể chạy nó trên bất kỳ nền tảng nào bằng cách sử dụng bất kỳ trình thông dịch python mặc định nào bạn có sẵn đáng tin cậy dựa trên nó làm việc.

Nó mặc định nhắc nhở sử dụng getpass với lời nhắc trên stderr (cho phép dễ dàng bắt được thiết bị xuất chuẩn), nhưng nếu bạn đặt một chuỗi cho nó, nó sẽ chỉ gặt hái từ stdin. Tùy thuộc vào cách bạn thực hiện điều này, nó cũng có thể không hiển thị trong lịch sử lệnh, vì vậy, hãy nhận thức rõ những gì bạn đang làm việc. Tôi thích có một công cụ linh hoạt sẽ hoạt động theo cách mong đợi, thay vì phải dựa vào các gói hoặc con trăn theo cách của tôi để chiến thắng 10 cách khác nhau.


Việc python trong bất kỳ phiên bản nào đã được cài đặt hay chưa tùy thuộc vào hệ thống. Chính xác thì vấn đề là chpasswdgì?
RalfFriedl
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.