복잡성 및 만료 기간을 위한 로컬 Linux 암호 정책 구성
이 단계에서는 강력한 암호 정책을 구성하여 Linux 시스템의 보안을 강화하는 방법을 알아봅니다. 강력한 암호 정책은 **복잡성(complexity)**과 **만료 기간(age)**이라는 두 가지 중요한 측면을 시행하는 기본적인 보안 제어 기능입니다. 복잡성 규칙은 다양한 유형의 문자를 혼합하도록 요구하여 암호가 쉽게 추측되지 않도록 보장하며, 만료 기간 규칙은 사용자가 주기적으로 암호를 변경하도록 강제하여 자격 증명 유출 위험을 줄입니다. 표준 Linux 유틸리티를 사용하여 시스템 전체 구성 파일을 수정하고 이러한 정책을 적용할 것입니다.
먼저 암호 복잡성을 살펴보겠습니다. 최신 Debian 기반 시스템(예: Ubuntu)에서는 암호 품질이 pam_pwquality 모듈에 의해 관리됩니다. 이 모듈의 구성은 /etc/security/pwquality.conf 파일에 저장됩니다.
기본 설정을 확인하는 것부터 시작하겠습니다. cat 명령을 사용하여 구성 파일의 내용을 확인합니다. 출력을 더 깔끔하게 만들기 위해 주석 처리된 줄과 빈 줄을 필터링하기 위해 grep을 사용하겠습니다.
grep -vE '^#|^$' /etc/security/pwquality.conf
기본 설정이 표시되거나 파일에 활성 구성이 없을 수도 있습니다. 이제 더 강력한 정책을 시행하겠습니다. 관리자 권한으로 이 파일을 편집해야 하므로 nano 편집기와 함께 sudo를 사용하겠습니다.
sudo nano /etc/security/pwquality.conf
새 정책을 시행하기 위해 다음 줄을 파일에 추가합니다. 이 설정은 암호 길이가 최소 10자여야 하며, 최소한 하나의 숫자, 하나의 대문자, 하나의 소문자를 포함하도록 요구합니다.
minlen = 10
dcredit = -1
ucredit = -1
lcredit = -1
이 옵션들을 자세히 살펴보겠습니다.
minlen = 10: 암호의 최소 허용 길이를 10자로 설정합니다.
dcredit = -1: 최소한 하나의 숫자를 요구합니다. 음수 값은 "최소한 하나"를 의미합니다.
ucredit = -1: 최소한 하나의 대문자를 요구합니다.
lcredit = -1: 최소한 하나의 소문자를 요구합니다.
이 줄들을 추가한 후, Ctrl+X를 누른 다음 Y를 누르고 Enter를 눌러 파일을 저장하고 nano를 종료합니다.
이제 암호 만료 기간(aging) 구성을 살펴보겠습니다. 이 설정은 암호의 최대 및 최소 수명을 정의합니다. 새 사용자 계정에 대한 기본값은 /etc/login.defs에 저장됩니다.
grep을 사용하여 이 파일에서 관련 설정을 찾습니다.
grep -E 'PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE' /etc/login.defs
기본값을 보게 될 것이며, PASS_MAX_DAYS는 만료를 사실상 비활성화하기 위해 매우 높은 값으로 설정되어 있는 경우가 많습니다.
## PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 99999
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 0
## PASS_WARN_AGE Number of days warning is given before a password expires.
PASS_WARN_AGE 7
만료 기간을 9000일로 시행해 보겠습니다. sudo nano로 파일을 엽니다.
sudo nano /etc/login.defs
PASS_MAX_DAYS 줄을 찾아 값을 99999에서 9000으로 변경합니다. 사용자가 암호를 너무 자주 변경하는 것을 방지하기 위해 PASS_MIN_DAYS를 7로 설정할 수도 있습니다.
## PASS_MAX_DAYS Maximum number of days a password may be used.
PASS_MAX_DAYS 9000
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
PASS_MIN_DAYS 7
## PASS_WARN_AGE Number of days warning is given before a password expires.
PASS_WARN_AGE 14
파일을 저장하고 nano를 종료합니다. /etc/login.defs의 이러한 설정은 이 변경 사항 이후에 생성된 사용자에게 적용됩니다. 기존 사용자(예: labex 사용자)에게 정책을 적용하려면 chage 명령을 사용합니다.
먼저 labex 사용자에 대한 현재 만료 기간 정보를 확인합니다.
sudo chage -l labex
출력에는 암호가 만료되지 않음(never expires)이 표시됩니다.
Last password change : Jul 22, 2023
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
이제 -M 플래그와 함께 chage를 사용하여 labex 사용자에 대해 최대 일수를 9000으로 설정합니다.
sudo chage -M 9000 labex
사용자의 만료 기간 정보를 다시 확인하여 변경 사항을 검증합니다.
sudo chage -l labex
이제 Password expires 날짜가 업데이트되었고 최대 일수가 9000으로 설정되어 만료 기간 정책이 성공적으로 적용되었음을 확인할 수 있습니다.
Last password change : Jul 22, 2023
Password expires : Jan 01, 2048
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 9000
Number of days of warning before password expires : 7
이제 Linux 시스템에서 암호 복잡성 및 만료 기간 정책을 모두 성공적으로 구성했습니다.