Trong bài
trước mình đã dẫn và giới thiệu về bảo mật hệ thống *nix với PAM. Trong bài viết
này mình trình bày về làm sao để thiết lập chính sách mật khẩu (account
password policy) cho hệ thống Linux sao cho đảm bảo các yếu tố an ninh.
1.
Giới
hạn số ngày tối đa mà một mật khẩu được phép sử dụng trước khi nó phải thay đổi
Theo mặc định của các hệ
thống Linux thì thời hạn tối đa của mật khẩu là 99999, tuy nhiên thời gian này
là quá lớn và tương đương với việc password sẽ không bao giờ hết hạn. Để giới hạn
số ngày tối đa mà một password được phép sử dụng, cần thiết lập lại tham số: PASS_MAX_DAYS
trong file /etc/login.defs
Cú
pháp sử dụng như sau:
PASS_MAX_DAYS N
với
N – là số ngày tối đa mà một mật khẩu được phép sử dụng
Ví dụ muốn thiết lập thời
gian tối đa là 180 ngày:
PASS_MAX_DAYS
180
2.
Thiết
lập chính sách yêu cầu mật khẩu phải thỏa mãn một số điều kiện
Để chống lại các hình thức tấn công dò mật khẩu thông thường (dictionary attack, brute-force…) thì mật khẩu hợp lệ phải chứa càng nhiều loại ký tự khác nhau càng tốt: chữ thường, chữ viêt hoa, ký tự đặc biệt, số. Để thiết lập chính sách về việc mật khẩu sử dụng phải thỏa mãn các điều kiện về số lượng loại ký tự được phép sử dụng, cần thiết lập trong pam.d với thư viện pam_cracklib.so.
Cú pháp sử dụng như sau:
Cú pháp sử dụng như sau:
password
required pam_cracklib.so difok=DI lcredit=L ucredit=U dcredit=D ocredit=O
Với DI,L,U,D,O>=1 và
dcredit=D : Số lượng chữ
số.
ucredit=U: Số lượng chữ
cái in hoa
lcredit=L : Số lượng chữ
cái thường.
ocredit=O : Số lượng
các ký tự đặc biệt khác
difok=DI: số lượng các ký tự của passwd mới
được phép trùng với passwd cũ
*Lưu ý pam_cracklib.so đã được cài sẵn trên Redhat/Fedora/CentOS. Nếu hệ thống Debian/Ubuntu chưa có module này thì gõ lệnh sau để cài đặt nó: # apt-get install libpam-cracklib.
3. Chiều dài tối thiểu của một password hợp lệ
*Lưu ý pam_cracklib.so đã được cài sẵn trên Redhat/Fedora/CentOS. Nếu hệ thống Debian/Ubuntu chưa có module này thì gõ lệnh sau để cài đặt nó: # apt-get install libpam-cracklib.
3. Chiều dài tối thiểu của một password hợp lệ
Với mục đích chống lại
các hình thức tấn công dò mật khẩu thông thường (dictionary attack, brute-force…)
thì ngoài việc phải chứa nhiều loại ký tự, mật khẩu phải đủ dài để đảm bảo độ
an toàn. Với việc các máy tính hiện nay có tốc độ tính toán khá cao thì các
chuyên gia bảo mật trên thế giới khuyến cáo mật khẩu nên có chiều dài tối thiểu
12 ký tự để đảm bảo tính an toàn.
Cú pháp sử dụng như sau:
Ví dụ: password requisite pam_cracklib.so minlen=12
Cú pháp sử dụng như sau:
password requisite pam_cracklib.so minlen=N
Với N - là chiều dài của password hợp lệ. Ví dụ: password requisite pam_cracklib.so minlen=12
4.
Không
cho phép sử dụng lại các mật khẩu cũ
Để đảm bảo sau các lần
thay đổi mật khẩu khác nhau người sử dụng không sử dụng lại các mật khẩu đã từng
sử dụng, có thể thiết lập chính sách này với thư viện pam_unix.so.
Cú pháp sử dụng như sau:
Cú pháp sử dụng như sau:
password sufficient pam_unix.so use_authtok shadow remember=N
Với N là số lượng
password đã đặt trước đó không được trùng với password mà người dùng đang cố gằng
thiết lập.
Ví dụ: password sufficient pam_unix.so use_authtok shadow remember=6
Ví dụ: password sufficient pam_unix.so use_authtok shadow remember=6
5.
Giới
hạn số lần được phép đăng nhập thất bại
Để chống lại các cuộc tấn
công brute-force nhằm vào hệ thống, cần giới hạn số lần đăng nhập thất bại được
phép. Có thể thiết lập chính sách này trong pam.d với thư viện pam_tally.so.
Cú pháp như sau:
Ví dụ: Answer: auth required pam_tally.so onerr=fail deny=6
auth required pam_tally.so onerr=fail deny=N
Với N là số lần được phép đăng nhập thất bại. Ví dụ: Answer: auth required pam_tally.so onerr=fail deny=6
6.
Thiết
lập thời gian mở khóa tự động mà không cần phải có sự can thiệp của superuser
Khi một tài khoản đăng
nhập thất bại quá số lần cho phép, tài khoản đó sẽ bị khóa tự động. Khi bị khóa
thì hoặc là sẽ được mở lại sau một khoảng thời gian định sẵn hoặc cần superuser
mở thì tài khoản mới có thể hoạt động trở lại. Để thiết lập thời gian mở khóa tự
động.
Cú pháp như sau:
auth required pam_tally.so onerr=fail deny=N unlock_time=M
Với M là thời gian mở
khóa tự động, N là số lần đăng nhập thất bại được phép.
Ví dụ: Cho phép login
thất bại 10 lần và tự động mở khóa sau 5 phút
auth required
pam_tally.so onerr=fail deny=10 unlock_time=300
Dưới
đây sẽ là mẫu mà mình thường áp dụng
Với Ubuntu/Debian
(/etc/login.defs)
PASS_MAX_DAYS 180
PASS_MAX_DAYS 180
(/etc/pam.d/common-password)
password requisite pam_cracklib.so retry=3 minlen=8 difok=3 lcredit=1 ucredit=1 dcredit=1 ocredit=1
password requisite pam_cracklib.so retry=3 minlen=8 difok=3 lcredit=1 ucredit=1 dcredit=1 ocredit=1
(retry = 3: nhắc nhở người dùng
nhiều nhất 3 lần trước khi trả về thông báo lỗi)
password
sufficient
pam_unix.so use_authtok shadow remember=6
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
(/etc/pam.d/common-auth)
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
Với Redhat/Fedora/CentOS
(/etc/login.defs)
PASS_MAX_DAYS 180
(/etc/pam.d/ system-auth)
password
requisite
pam_cracklib.so retry=3 minlen=8 difok=3 lcredit=1 ucredit=1 dcredit=1 ocredit=1
(retry = 3: nhắc nhở người dùng
nhiều nhất 3 lần trước khi trả về thông báo lỗi)
password
sufficient
pam_unix.so use_authtok shadow remember=6
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
auth required pam_tally.so onerr=fail deny=10 unlock_time=300
Tác giả: Jukai Helios
No comments:
Post a Comment