Kinh nghiệm tạo mật khẩu siêu mạnh trong 1s

Làm Linux System Admin thì chắc hẳn công việc tạo password/update password thì hầu như ngày nào cũng gặp phải và yêu cầu tối quan trọng là password phải mạnh, có độ phức tạp cao và đôi khi phải đáp ứng theo Policy (mật khẩu phải bao gồm ký tự thường, ký tự hoa, chữ số và ký tự đặc biệt). Công việc này nhìn chung là đơn giản vì hiện tại có rất nhiều tool chạy trên máy tính cũng như các website online hỗ trợ việc này, tuy nhiên chúng ta cũng phải tốn thao tác như là mở web/ứng dụng, chọn charset, length … Để tối ưu hóa chỗ này, mình chia sẻ với các bạn cách làm của mình, toàn bộ quá trình chỉ tốn 1s không hơn không kém.

Tạo random password
Tạo Random Password

Cách làm là viết 1 script random password theo policy các bạn muốn + kết hợp xclip để copy sẵn password vào bộ nhớ, sau khi chạy lệnh chỉ cần bấm Ctrl + C vào ứng dụng cần thay đổi password là hoàn tất.
Script của mình như sau:

#!/bin/bash

password=$(cat /dev/urandom | tr -dc '[email protected]$%^*-=,.' | head -c 16) 
echo -n "$password" | xclip -selection clipboard
echo "$password"

Giải thích chút:
– cat /dev/urandom: tạo random string
– tr -dc ‘[email protected]$%^*-=,.’: khai báo charset sẽ sử dụng
– head -c 16: chiều dài password mong muốn
– xclip -selection clipboard: Copy password vào bộ nhớ
– echo “$password”: in ra terminal để admin quan sát và lưu lại.

Khi tạo xong script thì lưu vào /usr/bin/randpwd và chmod 755. Khi cần dùng thì kết hợp “Guake Terminal” mình chia sẻ ở bài trước, bấm F12 để gọi terminal -> gõ randpwd và Enter -> password đã được copy sẵn sàng vào bộ nhớ, xài thôi.
Trick này tuy đơn giản nhưng mình đã xài nhiều năm nay và thực sự nó đã giúp ích cho mình rất nhiều.

Theo đóng góp của thành viên Lê Mạnh Cường thì đoạn script trên sử dụng lệnh cat là chưa tối ưu, bạn sửa lại như sau:

</dev/urandom LC_ALL=C tr -dc '[:alnum:]@$%^*-=,.' | head -c 20

Giải thích:

LC_ALL=C để đảm bảo ký tự là 1 byte, charset là ASCII, [:alnum:] trong C locale chỉ bao gồm a đến z, A đến Z, 0 đến 9 và _

Lưu ý không nên dùng `A-Za-z0-9` trong các locale khác ngoài C, vì nó có thể chứa các ký tự không mong muộn, đăck biệt trên GNU/Linux system.