Làm thế nào để tạo mật khẩu mạnh trong Linux?


24

Tôi tự hỏi làm thế nào tôi có thể tạo mật khẩu mạnh trên Linux (cho cả người dùng bình thường và người dùng quản trị) và nếu có chương trình cụ thể để làm điều đó.

Câu trả lời:



16

Cá nhân, tôi không thích sử dụng trình tạo mật khẩu vì mật khẩu được tạo rất khó nhớ, nhưng một giải pháp di động là sử dụng / dev / urandom

Tạo mật khẩu ngẫu nhiên không chứa ký tự đặc biệt, dài 10 ký tự:

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10` 
dyxJRKldvp

Điều này hoạt động bằng cách lấy byte từ / dev / urandom, xóa những cái không phù hợp với mẫu được chỉ định trong trlệnh và giới hạn nó ở 10 ký tự head.

Tạo mật khẩu ngẫu nhiên có chứa các ký tự đặc biệt, dài 10 ký tự:

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0

Điều này sử dụng một kỹ thuật hơi khác sau khi trloại bỏ các byte không mong muốn, vì ý tưởng là buộc nó phải có ít nhất một ký tự đặc biệt. Điều này hoạt động bằng cách sử dụng foldlệnh để bọc dòng thành nhóm 10, sau đó sử dụng grepđể chỉ tìm nạp các dòng có chứa một ký tự đặc biệt. headsau đó lấy mật khẩu đầu tiên đáp ứng yêu cầu.


1
Bạn cũng có thể sử dụng [:print:]cho tr( tr -dc '[:print:]'), nếu bạn hơi hoang tưởng. Vấn đề sau đó sẽ là các biểu tượng có sẵn trên bàn phím của bạn ...
lgeorget

11

Tôi đã viết kịch bản nhỏ này một vài năm trước và đã sử dụng nó kể từ đó. Nếu bất cứ điều gì, đó là một sự lạm dụng thú vị printfvà sử dụng một tính năng đáng yêu của BASH mà tôi rất tiếc hiếm khi thấy trong các tập lệnh : typeset.

#!/usr/bin/env bash
# Released into public domain
# Aaron Bockover, 2005
# http://abock.org

typeset -i length; length=$1
typeset -i rounds; rounds=$2
[ $rounds -lt 1 ] && rounds=1
[ $length -lt 1 ] && {
    echo "Usage: $0 <length> [<rounds>]" 2>/dev/null; exit 1;
}
for ((i=0; i < $rounds; i++)); do
    for ((j=0; j < $length; j++)); do
        set=$(($RANDOM % 20))
        if   [ $set -le 6 ];  then o=65; l=26; # 35% uppercase
        elif [ $set -le 13 ]; then o=97; l=26; # 35% lowercase
        elif [ $set -le 17 ]; then o=48; l=10; # 20% numeric
        elif [ $set -le 18 ]; then o=58; l=7;  # 10% symbolic
        elif [ $set -le 19 ]; then o=33; l=15; fi
        ord=$(($o + $RANDOM % $l))
        printf \\$(($ord / 64 * 100 + $ord % 64 / 8 * 10 + $ord % 8))
    done
    echo
done

Thanx cho kịch bản Aaron !!!
Gasuma

4

Tôi cũng sẽ thêm KeePassX , cung cấp cho bạn tùy chọn sử dụng entropy hệ thống để tạo mật khẩu mạnh với một vài tính năng hay - tất cả đều sử dụng GUI. Nó cũng cung cấp cho bạn tùy chọn quản lý mật khẩu và lưu chúng vào một tệp được mã hóa.

Đây là giao diện của trình tạo mật khẩu KPX trông như thế nào:

nhập mô tả hình ảnh ở đây


3

apg không phải là một lựa chọn tồi nếu bạn muốn mật khẩu có thể dễ dàng ghi nhớ.

; apg -m 16 -a 0 -t
ByajNudgolIston9 (Byaj-Nud-gol-Ist-on-NINE)
Af}ockhuecUjrak8 (Af-RIGHT_BRACE-ock-huec-Uj-rak-EIGHT)
IakijKadmomIvgig (Iak-ij-Kad-mom-Iv-gig)
NutIlOsyahodBeef (Nut-Il-Os-ya-hod-Beef)
anMechOybekazell (an-Mech-Oyb-ek-az-ell)
VumushCummAd{fra (Vum-ush-Cumm-Ad-LEFT_BRACE-fra)

Lưu ý rằng theo điều này , mật khẩu của bạn phải dài ít nhất 12 ký tự.


2

Tôi sử dụng không ngẫu nhiên, nhưng đủ khác nhau cho tất cả các mục đích tấn công ... mật khẩu chính và mật khẩu cuối cùng để tạo mật khẩu khác. Đây là cách tôi tạo mật khẩu chủ.

echo -n "some seed" |  openssl dgst -binary -sha1 | base64 | sed -e 's/.\{4\}/& /g'

và đầu ra

H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M= 

bây giờ chỉ cần chọn một vài trong số các phần và tạo mật khẩu, sắp xếp lại chúng, bỏ một số phần, thêm một ký tự hoặc 2 để làm cho nó tốt như ngẫu nhiên. Miễn là bạn có thể nhớ hạt giống của mình, bạn có thể tạo lại hạt giống này và khôi phục mật khẩu của mình (miễn là bạn không thực hiện quá nhiều sửa đổi)


1

pwgen là một công cụ cli nhỏ tuyệt vời cho phép bạn chỉ định một số tham số để đặt độ phức tạp, số lớp mật khẩu của mật khẩu để tạo, độ dài, v.v.


1

Đây là tập lệnh một lần để tạo cụm mật khẩu kiểu XKCD . /usr/share/dict/wordskhông phải là một từ điển tuyệt vời cho điều này vì hầu hết các từ đều dài, nhưng nó dễ dàng có sẵn. Đối với cụm mật khẩu đẹp hơn, bạn có thể sử dụng từ điển các từ ngắn, chẳng hạn như danh sách từ Mật khẩu một lần S / Key .

dict="/usr/share/dict/words"
max="`wc -l <"$dict"`" \
    perl -e '$count=4;
        $/=\4; while (<>) {
            print unpack('L') % $ENV{max} + 1, qq(\n); last unless --$count
        }' /dev/urandom | 
    while read n ; do 
        tail -n "+$n" "$dict" | head -1
    done

0

Nếu bạn là người dùng Gnome và bạn cũng cần lưu trữ mật khẩu cho các tài khoản khác nhau của mình, bạn có thể thử trình quản lý mật khẩu Khải Huyền . Nó có một tính năng tạo mật khẩu cơ bản, trong đó bạn chỉ đặt độ dài mật khẩu và chọn nếu bao gồm các ký tự dấu chấm câu bên cạnh các chữ cái và chữ số.


0

Sửa lỗi cho tôi nếu tôi sai, nhưng: Theo như tôi hiểu thì không có cách nào máy tính có thể tạo ra một chuỗi hoàn toàn ngẫu nhiên. Vì vậy, tôi đã nảy ra ý tưởng sau đây [và hy vọng nó không hoàn toàn ngu ngốc]:

Nếu một người ném xúc xắc 26 mặt, cơ hội để ném, giả sử 26 là 1:26. Nói cách khác: Cơ hội ném 26 là khoảng 0,04%. Hơn nữa, một con xúc xắc không có bộ nhớ và không có lỗi. Tôi đã đưa ra ý tưởng sau đây:

  • nhận được một con xúc xắc 26 mặt, trong đó mỗi bên khớp với một chữ cái của bảng chữ cái
  • nhận được một con xúc xắc mười mặt trong đó mỗi bên khớp với một số từ 0 đến 9
  • lật một đồng xu
  • đầu có nghĩa là: ném thư xúc xắc
  • đuôi có nghĩa là: ném xúc xắc số

Mô hình giấy để in ra:

Lưu ý : Tôi không phải là Math Pro và tôi đã nảy ra ý tưởng này sau khi đọc một bài báo trên 2600 tạp chí mô tả điều này. Tôi chỉ thêm một số ý tưởng của riêng tôi về khái niệm cơ bản.

Ngoài ra : Tôi tự hỏi nếu đây không chỉ là một ví dụ hoàn hảo cho ' viết công cụ bẻ khóa mật khẩu vũ phu đầu tiên của bạn '. Nhưng câu hỏi của bạn đã cho tôi một lý do hoàn hảo để đưa ra ý tưởng này để được thảo luận.


1
Thực tế có một số cách để tạo ra các bit hoàn toàn ngẫu nhiên. Ví dụ: sử dụng nhiễu điện từ ổ cứng của bạn hoặc sự thay đổi của tốc độ IO ... Điều được hy vọng với các trình tạo được gọi là 'trình tạo giả ngẫu nhiên' là chuỗi chúng phát ra không thể được phân biệt với chuỗi ngẫu nhiên thực sự bởi bất kỳ thuật toán nào chạy trong thời gian đa thức.
lgeorget

1
Bạn có thể quan tâm đến hệ thống Diceware. Nó theo một ý tưởng tương tự, nhưng chỉ sử dụng xúc xắc sáu mặt. world.std.com/~reinhold/diceware.html
Jander

0

Tôi có hai bí danh được thêm vào tệp .zshrc.local của mình để tạo mật khẩu mạnh.

Đầu tiên là:

alias pw.graph="cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"

Đầu ra của việc gõ pw.graph là năm dòng của mỗi ký tự có thể được gõ trên bàn phím ngoại trừ thanh dấu cách:

/d=|&mRq!g$QaNZ'L;CfEli,D3\)*h-jkerzv?{y"_Ic(0BtxJwF59:@G}KV1X2o>S~[#]s+W%A.<6bpTO^uP7U4HMYn`8
RIdW87{a4O3][?&rTn=m/:Y`_u*hqy2c%s@!ZPM$5to1f-.U9ClK,)'jDi0"pw>EzN^|gX~BSAJk\VFG(H<bx}+Q6#vL;e
s^H@yEo/X$|d?_jw7-n'l>m"Cb\W5.tTe0APB1D!#69[p+(8x}F&~RM`q3Q%vhfOiUZz]ucJk:)*agGV;=NY4{,K2SLrI<
$/t|!s}og5u:X~hcJUyYHf>;l<zDedL`.T*K8]CBSW[(xw+Mm^E3r16b-97%'@jVR{ZG#0p4AP=,I?\n&"a)vqNkQ2iO_F
,7n|^Y\%MpeBqvhI3mE<9zPS/~+sU`4ZoCWl&uxd'ft"kjcOy0X!{a-T_6RKiVg5Hb21D)w>@*N8;A[(rLG=$Q:.#]FJ?}

Thứ hai là:

alias pw.alnum="cat /dev/urandom | tr -dc '[:alnum:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"

Đầu ra của việc gõ pw.alnum là mỗi chữ cái có thể in và đánh số cả chữ hoa và chữ thường:

E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv

Tôi thường sử dụng pw.graph và sao chép một phần ngẫu nhiên của dòng. Một số mật khẩu không cho phép các ký hiệu vì vậy tôi sử dụng một phần của pw.alnum cho điều đó.


0

Tôi sử dụng tệp này được lưu dưới dạng tệp .html:

<script>
var keylist="abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*_"
var temp=''

function generatepass(plength){
temp=''
for (i=0;i<plength;i++)
temp+=keylist.charAt(Math.floor(Math.random()*keylist.length))
return temp
}

function populateform(enterlength){
document.pgenerate.output.value=generatepass(enterlength)
}
</script>

<form name="pgenerate">
<input type="text" size=32 name="output">
<input type="button" value="Generate Password" onClick="populateform(this.form.thelength.value)"><br />
<b>Password Length:</b> <input type="text" name="thelength" size=3 value="32">
</form>
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.