소개
강력한 비밀번호 정책을 유지하는 것은 Linux 시스템을 안전하게 보호하는 데 매우 중요합니다. 이 튜토리얼에서는 Linux 비밀번호 정책의 기본 사항을 이해하고, 비밀번호 복잡성 요구 사항을 구성하며, 이러한 정책을 적용하여 Linux 환경의 전반적인 보안을 강화하는 방법을 안내합니다.
강력한 비밀번호 정책을 유지하는 것은 Linux 시스템을 안전하게 보호하는 데 매우 중요합니다. 이 튜토리얼에서는 Linux 비밀번호 정책의 기본 사항을 이해하고, 비밀번호 복잡성 요구 사항을 구성하며, 이러한 정책을 적용하여 Linux 환경의 전반적인 보안을 강화하는 방법을 안내합니다.
Linux 시스템은 비밀번호 정책을 관리하기 위해 여러 구성 파일을 사용합니다. 이 단계에서는 이러한 파일들을 살펴보고 비밀번호 관리에서의 역할을 이해해 보겠습니다.
Ubuntu 에서 비밀번호 정책을 제어하는 주요 구성 파일을 살펴보겠습니다.
먼저, 데스크톱 환경에서 터미널 아이콘을 클릭하여 터미널을 엽니다.
기본 비밀번호 정책 설정을 포함하는 /etc/login.defs 파일을 살펴보겠습니다.
cat /etc/login.defs | grep "^PASS_"
다음과 유사한 출력을 볼 수 있습니다.
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
이 설정은 다음을 제어합니다.
PASS_MAX_DAYS: 비밀번호가 유효한 최대 일수PASS_MIN_DAYS: 비밀번호 변경 간의 최소 일수PASS_WARN_AGE: 비밀번호 만료 전 경고 일수또 다른 중요한 파일은 /etc/pam.d/common-password로, 비밀번호 인증을 위한 PAM (Pluggable Authentication Modules) 설정을 관리합니다.
cat /etc/pam.d/common-password
이 파일에는 복잡성 요구 사항을 포함하여 비밀번호 관리 방법을 구성하는 여러 줄이 포함되어 있습니다.
시스템은 pwquality 라이브러리를 사용하여 비밀번호 품질을 적용합니다. 설치되어 있는지 확인해 보겠습니다.
dpkg -l | grep libpwquality
설치되지 않은 경우 설치할 수 있습니다.
sudo apt update
sudo apt install -y libpam-pwquality
이제 비밀번호 품질 구성 파일을 살펴보겠습니다.
cat /etc/security/pwquality.conf
이 파일은 대부분의 줄이 #으로 주석 처리되어 있을 수 있으며, 이는 기본값이 사용되고 있음을 의미합니다.
다음은 구성할 수 있는 주요 매개변수입니다.
minlen: 최소 비밀번호 길이dcredit: 비밀번호의 숫자 신용도ucredit: 대문자 신용도lcredit: 소문자 신용도ocredit: 특수 문자 신용도retry: 새 비밀번호 입력 시도 횟수enforce_for_root: root 사용자에 대해 이러한 정책을 적용할지 여부이러한 매개변수는 Linux 시스템에서 비밀번호 복잡성 및 보안을 제어하기 위한 포괄적인 프레임워크를 제공합니다.
이 단계에서는 /etc/login.defs 파일을 수정하여 비밀번호 만료 요구 사항을 설정함으로써 기본 비밀번호 정책을 구성합니다.
먼저 원본 파일의 백업을 만듭니다.
sudo cp /etc/login.defs /etc/login.defs.backup
이제 nano 를 사용하여 편집을 위해 파일을 엽니다.
sudo nano /etc/login.defs
편집기에서 다음 매개변수를 찾습니다 (Ctrl+W 를 사용하여 검색).
PASS_MAX_DAYS
PASS_MIN_DAYS
PASS_WARN_AGE
이러한 값을 변경하여 보다 안전한 비밀번호 만료 정책을 구현합니다.
PASS_MAX_DAYS를 99999에서 90으로 변경합니다 (비밀번호는 90 일 후에 만료됨).PASS_MIN_DAYS를 0에서 7로 변경합니다 (비밀번호 변경 간 최소 7 일).PASS_WARN_AGE를 7에서 14로 변경합니다 (비밀번호 만료 14 일 전에 사용자에게 경고).Ctrl+O 를 누른 다음 Enter 를 눌러 파일을 저장하고 Ctrl+X 로 종료합니다.
변경 사항을 확인합니다.
cat /etc/login.defs | grep "^PASS_"
다음과 같은 내용이 표시되어야 합니다.
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
이러한 정책이 어떻게 적용되는지 확인하기 위해 테스트 사용자를 만들어 보겠습니다.
새 사용자를 만듭니다.
sudo useradd -m testuser
새 사용자의 비밀번호를 설정합니다.
sudo passwd testuser
메시지가 표시되면 간단한 비밀번호를 입력합니다 (이후 단계에서 강화할 예정입니다).
새 사용자에 대한 비밀번호 만료 정보를 확인합니다.
sudo chage -l testuser
설정에 따라 비밀번호 만료 날짜를 표시하면서 이 새 사용자에게 비밀번호 정책이 적용되었음을 확인할 수 있습니다.
이러한 변경 사항은 새 계정 또는 비밀번호가 변경될 때만 적용됩니다. 기존 계정은 수동으로 업데이트할 때까지 이전 설정을 유지합니다.
이 단계에서는 시스템에서 강력한 비밀번호를 적용하기 위해 비밀번호 복잡성 규칙을 구성합니다.
먼저 PAM 구성 파일의 백업을 만듭니다.
sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup
이제 편집을 위해 파일을 엽니다.
sudo nano /etc/pam.d/common-password
pam_pwquality.so를 포함하는 줄을 찾습니다. 다음과 유사할 수 있습니다.
password requisite pam_pwquality.so retry=3
복잡성 요구 사항을 추가하도록 이 줄을 수정합니다. 다음으로 바꿉니다.
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root
이 구성은 다음을 의미합니다.
minlen=12: 최소 비밀번호 길이는 12 자입니다.dcredit=-1: 최소 1 개의 숫자가 필요합니다.ucredit=-1: 최소 1 개의 대문자가 필요합니다.lcredit=-1: 최소 1 개의 소문자가 필요합니다.ocredit=-1: 최소 1 개의 특수 문자가 필요합니다.enforce_for_root: 이러한 정책을 root 사용자에게도 적용합니다.Ctrl+O 를 누른 다음 Enter 를 눌러 파일을 저장하고 Ctrl+X 로 종료합니다.
이제 추가 제어를 위해 pwquality 구성 파일을 수정해 보겠습니다.
sudo cp /etc/security/pwquality.conf /etc/security/pwquality.conf.backup
sudo nano /etc/security/pwquality.conf
다음 줄의 주석을 해제 (시작 부분의 ## 제거) 하고 수정하거나, 존재하지 않는 경우 추가합니다.
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
difok = 4
enforce_for_root = 1
difok = 4 매개변수는 이전 비밀번호와 다른 문자가 최소 4 개 이상 필요합니다.
Ctrl+O 를 누른 다음 Enter 를 눌러 파일을 저장하고 Ctrl+X 로 종료합니다.
테스트 사용자의 비밀번호를 변경하여 새 정책을 테스트해 보겠습니다.
sudo passwd testuser
password123과 같은 간단한 비밀번호를 입력해 보십시오. 시스템은 복잡성 요구 사항을 충족하지 못하여 거부해야 합니다.
이제 Secure@Password123과 같이 모든 요구 사항을 충족하는 복잡한 비밀번호를 시도해 보십시오.
모든 것을 올바르게 구성했다면 시스템이 이 비밀번호를 허용해야 합니다.
복잡성 요구 사항은 사용자가 강력한 비밀번호를 생성하도록 보장하여 공격자가 비밀번호를 추측하거나 크래킹하기 어렵게 만듭니다.
이 단계에서는 사용자가 최근 비밀번호를 재사용하는 것을 방지하기 위해 비밀번호 기록 제어를 구성합니다.
먼저, 아직 수행하지 않았다면 PAM 구성 파일의 백업을 만듭니다.
sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.backup2
편집을 위해 파일을 엽니다.
sudo nano /etc/pam.d/common-password
pam_unix.so를 포함하는 줄을 찾습니다. 다음과 유사할 수 있습니다.
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512
remember 매개변수를 추가하도록 이 줄을 수정합니다. 줄 끝에 remember=5를 추가합니다.
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512 remember=5
이렇게 하면 사용자가 가장 최근의 5 개의 비밀번호를 재사용하는 것을 방지합니다.
Ctrl+O 를 누른 다음 Enter 를 눌러 파일을 저장하고 Ctrl+X 로 종료합니다.
remember=5 매개변수는 시스템에 각 사용자의 마지막 5 개 비밀번호의 해시를 저장하도록 지시합니다. 사용자가 비밀번호를 변경하려고 시도하면 시스템은 새 비밀번호를 저장된 이러한 해시와 비교하여 재사용되지 않도록 합니다.
비밀번호 기록은 /etc/security/opasswd 파일에 저장됩니다. 이 파일이 있는지 확인해 보겠습니다.
ls -la /etc/security/opasswd
이 파일이 존재하지 않으면, 새 정책이 적용된 상태에서 첫 번째 사용자가 비밀번호를 변경할 때 자동으로 생성됩니다.
테스트 사용자의 비밀번호를 여러 번 변경하여 기록 메커니즘이 작동하는지 확인해 보겠습니다.
sudo passwd testuser
Complex@Password1과 같은 복잡한 비밀번호를 설정합니다.
이제 즉시 다시 변경해 보십시오.
sudo passwd testuser
동일한 비밀번호를 다시 설정해 보십시오. 시스템은 기록 정책으로 인해 거부해야 합니다.
다른 비밀번호로 몇 번 더 시도한 다음 이전 비밀번호를 재사용해 보십시오. 가장 최근의 5 개 비밀번호는 재사용할 수 없음을 알 수 있습니다.
이 비밀번호 기록 메커니즘은 비밀번호 재사용을 방지하여 또 다른 보안 계층을 추가합니다. 이는 일반적인 보안 취약점입니다.
이 마지막 단계에서는 새로운 비밀번호 정책을 기존 사용자에게 적용하고 사용자 비밀번호 정보를 관리하는 방법을 배웁니다.
/etc/login.defs에서 비밀번호 정책을 변경하면 새 설정은 새로 생성된 사용자에게만 적용되거나 기존 사용자를 수동으로 업데이트할 때만 적용됩니다. 기존 사용자를 관리하는 방법을 살펴보겠습니다.
먼저, 사용자 계정의 현재 상태를 확인합니다.
sudo chage -l labex
이렇게 하면 현재 사용자에 대한 비밀번호 만료 정보가 표시됩니다.
다음 로그인 시 사용자가 비밀번호를 변경하도록 강제하려면:
sudo chage -d 0 testuser
이렇게 하면 마지막 비밀번호 변경 날짜가 0 으로 설정되어 다음 로그인 시 비밀번호 변경이 강제됩니다.
비밀번호 만료 날짜를 수동으로 설정하려면:
sudo chage -E $(date -d "90 days" +%Y-%m-%d) testuser
이렇게 하면 계정 만료 날짜가 오늘부터 90 일로 설정됩니다.
최대 비밀번호 사용 기간 정책을 기존 사용자에게 적용하려면:
sudo chage -M 90 testuser
이렇게 하면 사용자의 최대 비밀번호 사용 기간이 90 일로 설정됩니다.
최소 비밀번호 사용 기간 정책을 기존 사용자에게 적용하려면:
sudo chage -m 7 testuser
이렇게 하면 사용자의 최소 비밀번호 사용 기간이 7 일로 설정됩니다.
비밀번호 만료 경고 정책을 기존 사용자에게 적용하려면:
sudo chage -W 14 testuser
이렇게 하면 사용자의 비밀번호 만료 경고 기간이 14 일로 설정됩니다.
여러 명령을 사용하여 사용자의 비밀번호 정보를 확인할 수 있습니다.
모든 로컬 사용자 계정을 봅니다.
cat /etc/passwd
특정 사용자의 비밀번호 상태를 확인합니다.
sudo passwd -S testuser
특정 비밀번호 설정을 가진 사용자를 나열합니다.
awk -F: '($3 >= 1000) {print $1}' /etc/passwd
이렇게 하면 시스템의 모든 일반 사용자 (UID >= 1000) 가 나열됩니다.
새로운 비밀번호 정책을 시스템의 모든 일반 사용자에게 적용하려면 간단한 스크립트를 사용할 수 있습니다. 다음은 예시입니다.
for user in $(awk -F: '($3 >= 1000) && ($3 < 60000) {print $1}' /etc/passwd); do
echo "Updating password policy for user: $user"
sudo chage -M 90 -m 7 -W 14 $user
done
이 스크립트는 새로운 비밀번호 만료 정책으로 모든 일반 사용자를 업데이트합니다.
이러한 정책을 기존 사용자에게 적용하면 전체 시스템에서 일관된 비밀번호 보안을 보장할 수 있습니다.
이 랩에서는 Linux 에서 강력한 비밀번호 정책을 구성하고 적용하는 방법을 배웠습니다. 다음을 수행했습니다.
이러한 비밀번호 정책 구성은 안전한 Linux 환경을 유지하는 데 필수적입니다. 강력한 비밀번호 요구 사항, 정기적인 비밀번호 순환을 구현하고 비밀번호 재사용을 방지함으로써 무단 액세스 및 잠재적인 침해에 대한 시스템의 보안 태세를 크게 개선했습니다.
효과적인 비밀번호 정책은 포괄적인 보안 전략의 한 측면일 뿐임을 기억하십시오. 정기적인 시스템 업데이트, 적절한 사용자 관리 및 지속적인 보안 모니터링과 같은 다른 보안 조치와 결합해야 합니다.