Bài này làm rõ hơn về thuật toán SHA512 để các bạn lớp lập trình thực chiến cho DevOps code thêm chương trình check_root_password.
Cháo thịt bằm và khoa học máy tính
Hệ điều hành Linux chứng thực người dùng, mật khẩu bằng cơ chế PAM. Trong file cấu hình của PAM có thể khai báo thuật toán băm mật khẩu và các giá trị kèm theo của thuật toán đó.
Băm mật khẩu bằng thuật toán SHA512 có 1 giá trị kèm theo là số round. Số round càng lớn thì càng mất thời gian để băm ra được chuỗi băm. SHA512 nếu không có ghi giá trị rounds thì là 5000, tối đa là 999999999.
Khai báo số rounds trong /etc/pam.d/system-auth của PAM như hình dưới
cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authselect is run.
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass nullok
auth required pam_deny.so
account required pam_unix.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow rounds=10000
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
Sau khi đã khai báo rounds là 10000 khác giá trị mặc định là 5000 hãy tạo thêm các user và gán password cho các user bạn sẽ thấy có thêm rounds=10000 trong shadow password file như hình dưới.
User root băm mật khẩu với số rounds mặc định 5000 nên không có ghi ra trong shadow password.
User hieu, utcua băm mật khẩu với rounds 10000 khác mặc định nên có ghi ra trong shadow password.
cat /etc/shadow
root:$6$hxJXi0dqBGB.WHsp$bxxXEGPOLZ0t26ZBlYZszh9geBefivwJFyOM/Kkm3g70Vnnr588Rd/iOaA4pyP2PB6AALYg7XCTRzKp1R.hHv1:19866:0:99999:7:::
bin:*:19469:0:99999:7:::
daemon:*:19469:0:99999:7:::
adm:*:19469:0:99999:7:::
lp:*:19469:0:99999:7:::
sync:*:19469:0:99999:7:::
shutdown:*:19469:0:99999:7:::
halt:*:19469:0:99999:7:::
mail:*:19469:0:99999:7:::
operator:*:19469:0:99999:7:::
games:*:19469:0:99999:7:::
ftp:*:19469:0:99999:7:::
nobody:*:19469:0:99999:7:::
systemd-coredump:!!:19865::::::
dbus:!!:19865::::::
tss:!!:19865::::::
sssd:!!:19865::::::
sshd:!!:19865::::::
chrony:!!:19865::::::
systemd-oom:!*:19865::::::
hieu:$6$rounds=10000$ExzWAhohvAB1Mj2B$FNlZ25PEVjLDDvWWDDdNr6PTD007UuNoCN8VZFJvhBaNYiEZDTVohgWTi9kFG.KT3EUlDE1O5JtMuoUIWeF270:19868:0:99999:7:::
utcua:$6$rounds=10000$uwBKtzltwlWwbsjs$KyK.Y4EdX33lQLKT20/TvVw2F3M9MhiVn9XXcgxd8pVcHPuBnVDa5.QhdNsl4EwsGV3SnE4vCnDisZA37Vw9J.:19868:0:99999:7:::
Chương trình check_root_password lúc này sẽ phải viết phức tạp hơn, phải kiểm tra thêm điều kiện số rounds khác mặc định để băm ra đúng chuỗi băm mật khẩu của SHA512.