소개
시스템 관리 및 사이버 보안에서 보안 기준선 (security baseline) 은 시스템 또는 네트워크에 대한 표준화된 최소 보안 구성 수준을 의미합니다. 기준선을 설정하는 것은 시스템 강화, 공격 표면 감소, 조직 전반에 걸쳐 일관된 보안 상태 보장을 위한 근본적인 단계입니다. 규정 준수 제어 (compliance controls) 는 이러한 기준선이 충족되고 유지되고 있는지 확인하는 데 사용되는 메커니즘 및 절차입니다.
이 실습에서는 Linux 시스템에서 이러한 개념에 대한 실습 경험을 쌓게 됩니다. 새로운 사용자 계정에 대한 간단한 보안 기준선을 정의하는 방법, 기준선이 올바르게 적용되었는지 확인하는 방법, 그리고 승인되지 않은 변경 사항에 대해 중요한 구성 파일을 모니터링하도록 Linux 감사 데몬 (auditd) 을 구성하는 방법을 배우게 됩니다. 이 과정은 시스템 무결성을 유지하고 규정 준수 요구 사항을 충족하는 데 매우 중요합니다.
이 실습이 끝나면 다음을 수행할 수 있습니다.
- 시스템 전체 사용자 기본 설정 수정
- 정의된 보안 기준선을 준수하는 새 사용자 생성
- 표준 Linux 명령을 사용하여 규정 준수 확인
- 중요한 파일 변경 사항을 감시하도록
auditd구성 - 보안 이벤트를 위해 감사 로그 검색 및 검토
사용자 기본값에 대한 간단한 Linux 보안 기준선 정의
이 단계에서는 시스템에서 생성되는 모든 새 사용자에 대한 기본 암호 정책을 설정하여 간단한 보안 기준선을 정의합니다. 이러한 기본 설정을 제어하는 /etc/login.defs 파일을 편집할 것입니다.
먼저, 시스템 수준 파일이므로 sudo 권한으로 nano를 사용하여 구성 파일을 열겠습니다.
sudo nano /etc/login.defs
nano 편집기 내에서 스크롤하여 암호 만료와 관련된 다음 세 가지 매개변수를 찾고 값을 수정합니다. nano 내에서 텍스트를 검색하려면 Ctrl + W를 사용할 수 있습니다.
PASS_MAX_DAYS: 암호를 사용할 수 있는 최대 일수입니다. 이 값을90으로 설정합니다.PASS_MIN_DAYS: 암호 변경 사이에 허용되는 최소 일수입니다. 이 값을7로 설정합니다.PASS_WARN_AGE: 암호가 만료되기 전에 경고가 주어지는 일수입니다. 이 값을14로 설정합니다.
이 줄들을 찾아서 다음과 같이 변경하십시오.
#
## Password aging controls:
#
## PASS_MAX_DAYS Maximum number of days a password may be used.
## PASS_MIN_DAYS Minimum number of days allowed between password changes.
## PASS_WARN_AGE Number of days warning is given before a password expires.
#
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 14
변경 사항을 적용한 후 Ctrl + X, Y, Enter를 차례로 눌러 파일을 저장하고 nano를 종료합니다.
이제 시스템에서 암호 정책에 대한 간단한 보안 기준선을 설정했습니다. 지금부터 생성되는 모든 새 사용자는 이러한 설정을 상속받게 됩니다.
시스템 명령어로 기준선 규정 준수 확인
이 단계에서는 이전 단계에서 정의한 기준선이 올바르게 적용되고 있는지 확인할 것입니다. 이를 수행하는 가장 직접적인 방법은 새 사용자를 생성하고 해당 계정 속성을 검사하는 것입니다.
먼저 compliance_user라는 새 사용자를 생성하겠습니다. useradd 명령은 /etc/login.defs의 기본 설정을 자동으로 적용합니다. -m 플래그는 사용자에게 홈 디렉토리가 생성되도록 합니다.
sudo useradd -m compliance_user
이 명령은 성공하면 아무런 출력을 생성하지 않습니다. 이제 -l (list) 플래그와 함께 chage (change age) 명령을 사용하여 새 사용자의 암호 만료 설정을 확인할 수 있습니다.
sudo chage -l compliance_user
다음과 유사한 출력이 표시되어야 합니다. "Maximum number of days between password change", "Minimum number of days between password change", "Number of days of warning before password expires"의 값이 /etc/login.defs에서 설정한 기준선과 일치하는지 확인하십시오.
Last password change : Aug 05, 2025
Password expires : Nov 03, 2025
Password inactive : never
Account expires : never
Minimum number of days between password change : 7
Maximum number of days between password change : 90
Number of days of warning before password expires : 14
이 출력은 기준선이 효과적이며 시스템이 새 사용자에 대한 새 정책을 준수하고 있음을 확인합니다.
시스템 호출 모니터링을 위한 Auditd 설정
이 단계에서는 Linux Audit Daemon (auditd) 을 설정하여 기준 구성 파일인 /etc/login.defs의 변경 사항을 모니터링합니다. 이 작업은 누가 언제 파일을 변경했는지에 대한 로그를 제공하므로 중요한 규정 준수 제어입니다.
auditd 서비스는 어떤 이벤트를 기록할지 결정하기 위해 규칙 세트를 사용합니다. 파일에 대한 모든 쓰기 또는 속성 변경 작업을 감시하는 새 규칙을 추가할 것입니다.
규칙을 /etc/audit/rules.d/audit.rules 파일에 추가할 것입니다. echo와 tee를 사용하는 것은 시스템 파일에 줄을 추가하는 안전한 방법입니다.
다음 명령을 실행하여 감사 규칙을 추가합니다.
sudo echo "-w /etc/login.defs -p wa -k login_defs_changes" | sudo tee -a /etc/audit/rules.d/audit.rules
이 규칙을 자세히 살펴보겠습니다.
-w /etc/login.defs: 감시할 파일 경로를 지정합니다.-p wa: 감사할 권한을 설정합니다.w는 쓰기 액세스,a는 속성 변경을 의미합니다.-k login_defs_changes: 나중에 쉽게 검색할 수 있도록 이러한 감사 이벤트에 사용자 지정 키login_defs_changes를 할당합니다.
새 규칙을 적용하려면 auditd 서비스를 다시 시작해야 합니다.
sudo systemctl restart auditd
이제 auditd는 /etc/login.defs에 대한 모든 수정을 적극적으로 모니터링하고 있습니다.
정책 적용을 위한 감사 로그 생성 및 검토
이 단계에서는 이벤트를 트리거하여 감사 규칙을 테스트한 다음 생성된 로그를 검토합니다. 이를 통해 규정 준수 제어가 예상대로 작동하는지 확인할 수 있습니다.
감사 규칙을 트리거하려면 /etc/login.defs 파일을 수정해야 합니다. 내용을 변경하지 않고 이를 수행하는 간단한 방법은 touch 명령을 사용하는 것입니다. 이 명령은 파일의 액세스 및 수정 타임스탬프를 업데이트합니다. 이 작업은 auditd에 의해 속성 변경으로 감지됩니다.
sudo touch /etc/login.defs
이 작업으로 감사 로그에 이벤트가 생성되었어야 합니다. 로그는 /var/log/audit/audit.log에 저장되지만, 로그가 방대할 수 있습니다. 특정 이벤트를 찾는 더 좋은 방법은 이전 단계에서 정의한 키와 함께 ausearch 명령을 사용하는 것입니다.
login_defs_changes 키로 태그가 지정된 모든 이벤트를 검색해 보겠습니다.
sudo ausearch -k login_defs_changes
출력에는 touch 명령과 관련된 하나 이상의 레코드가 포함됩니다. 다음과 유사하게 표시됩니다 (타임스탬프 및 ID 는 다를 수 있습니다).
----
time->Tue Dec 12 08:35:15 2023
type=PROCTITLE msg=audit(1702370115.321:101): proctitle=746F756368002F6574632F6C6F67696E2E64656673
type=PATH msg=audit(1702370115.321:101): item=0 name="/etc/login.defs" inode=131409 dev=00:1e mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1702370115.321:101): cwd="/home/labex/project"
type=SYSCALL msg=audit(1702370115.321:101): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffc62e212d0 a2=90800 a3=0 items=1 ppid=1102 pid=1125 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=3 comm="touch" exe="/usr/bin/touch" key="login_defs_changes"
SYSCALL 레코드 끝에 있는 key="login_defs_changes"를 찾으십시오. 이는 auditd가 중요한 구성 파일에 대한 수정 이벤트를 성공적으로 기록했음을 확인하며, 모니터링 제어가 활성 상태이고 효과적임을 증명합니다.
요약
이 실습을 완료하신 것을 축하드립니다! Linux 시스템에 보안 기준선을 적용하고 규정 준수 제어를 구현하는 기본적인 과정을 성공적으로 완료했습니다.
이 실습에서는 다음을 배웠습니다.
/etc/login.defs를 수정하여 사용자 암호 정책에 대한 보안 기준선 정의하기.chage명령을 사용하여 새 사용자에게 기준선이 올바르게 적용되는지 확인하기.- 변경 사항을 모니터링하기 위해 중요한 구성 파일을 감시하도록 Linux 감사 데몬 (
auditd) 구성하기. - 모니터링 제어가 작동하는지 확인하기 위해
ausearch를 사용하여 감사 로그 트리거 및 검토하기.
이러한 기술은 시스템 강화, 보안 상태 유지 및 CIS Benchmarks 또는 NIST 지침과 같은 규정 준수 표준 충족을 담당하는 모든 시스템 관리자 또는 보안 전문가에게 필수적입니다. 명확한 기준선을 설정하고 편차를 지속적으로 모니터링함으로써 IT 인프라의 보안 및 무결성을 크게 향상시킬 수 있습니다.



