Thursday, June 12, 2014

Thiết lập chính sách mật khẩu trong Linux

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:
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ệ

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:

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: 
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

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:
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


(/etc/pam.d/common-password)

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


 (/etc/pam.d/common-auth)
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

Tác giả: Jukai Helios

No comments:

Post a Comment