이것저것

[SK shieldus Rookies 29기] 19일차 본문

SK Shieldus Rookies 29

[SK shieldus Rookies 29기] 19일차

atfield1988 2025. 12. 5. 09:11

계정 및 그룹 관리 파일 분석

1) /etc/passwd (사용자 계정 정보)

모든 사용자가 읽을 수 있으며, 시스템 사용자의 기본 정보를 담고 있습니다.

구조 (7개 필드):
username:password:UID:GID:comment:homedirectory:shell

필드 설명 비고
username 사용자 계정명
password 암호화된 비밀번호 보통 x로 표시 (실제 암호는 shadow 파일에)
UID 사용자 식별 번호 0(Root), 1999(시스템), 1000(일반)
GID 주 그룹 식별 번호
comment 설명 (주석)
homedirectory 사용자 홈 디렉터리
shell 로그인 쉘 /bin/bash

⚠️ 중요: UID가 0인 계정은 모두 Root 권한을 갖습니다. 계정명은 다르더라도 UID가 0이면 슈퍼유저로 인식됩니다.

2) /etc/shadow (패스워드 정보)

Root 사용자만 읽을 수 있으며, 실제 암호화된 패스워드와 만료 정보를 담고 있습니다.

구조 (9개 필드):
username:password:lastchange:mindays:maxdays:warndays:inactive:expire:flag

필드 설명 예시
password 암호화된 패스워드 $6$Salt$HashValue (SHA-512)
lastchange 마지막 변경일 1970.1.1 기준 일수(유닉스 타임)
mindays 최소 사용 기간 암호 변경 후 최소 유지해야 하는 기간
maxdays 최대 사용 기간 암호 변경 없이 사용 가능한 최대 기간
warndays 경고일 만료 전 경고 메시지를 출력하는 기간
inactive 유예 기간 만료 후 계정이 잠기기 전까지의 유예 기간
expire 계정 만료일 계정 자체가 비활성화되는 날짜
  • 패스워드 상태:
    • !! 또는 *: 계정 잠김 (로그인 불가)
    • (공백): 패스워드 미설정

3) /etc/group (그룹 정보)

groupname:password:GID:member_list

  • member_list: 해당 그룹을 2차 그룹(Secondary Group)으로 사용하는 사용자 목록
    )

4) /etc/gshadow (그룹 암호 정보)

groupname:password:admin:member_list

  • password: 그룹 암호 (잘 사용되지 않음, !는 암호 없음)
  • admin: 그룹 관리자 (구성원 추가/삭제 권한 보유)

정보기 준비하는 분들 익숙하시죠..


계정 관리 명령어

1) useradd (계정만 생성)

useradd -u 1001 -g users -d /home/newuser -s /bin/bash user01
#유저는 1000번 대부터
  • -u: UID 지정
  • -g: GID 지정
  • -d: 홈 디렉터리 지정
  • -s: 쉘 지정
  • -e: 계정 만료일 지정 (YYYY-MM-DD)
  • -f: 계정 유예 기간(Inactive) 지정

adduser=⇒ 패스워드 설정, 홈디렉터리 자동 생성
useradd=⇒계정만 생성

2) usermod (계정 수정)

usermod -g admin -G wheel user01
  • -g: 주 그룹 변경
  • -G: 2차 그룹 변경 (기존 그룹 유지 시 -aG 사용 권장)
  • -l: 계정명 변경 (usermod -l newname oldname)
  • -L: 계정 잠금 (Lock)
  • -U: 잠금 해제 (Unlock)

3) passwd (암호 설정)

passwd user01     (관리자만 가능)
$ passwd          (본인 암호 변경)
  • -l: 잠금 설정
  • -u: 잠금 해제
  • -d: 암호 삭제 (암호 없이 로그인 가능)
  • -e: 다음 로그인 시 강제 변경 설정

4) chage (패스워드 정책 관리)

/etc/shadow 파일의 날짜 필드를 수정합니다.

chage -l user01                  # 정보 확인
chage -m 10 -M 90 -W 7 user01    # 정책 설정
  • -m: 최소 사용 기간
  • -M: 최대 사용 기간
  • -W: 경고 기간
  • -E: 계정 만료일 설정

5) userdel (계정 삭제)

userdel -r user01
  • -r: 홈 디렉터리 및 메일함까지 완전 삭제 (필수 권장)

    deluser도 가능


로그(Log) 개요 및 종류

로그란?

시스템 운영 중 발생하는 모든 이벤트를 기록한 파일로, 문제 해결(Troubleshooting) 및 보안 감사(Auditing)의 핵심 자료입니다.

  • 기본 위치: /var/log 디렉터리

로그의 분류

구분 주요 로그 파일 설명
시스템 로그 /var/log/messages 시스템 전반의 표준 메시지 기록
보안/인증 로그 /var/log/secure 로그인 인증, PAM, SSH 관련 로그
부팅 로그 /var/log/boot.log 시스템 부팅 시 발생하는 메시지
메일 로그 /var/log/maillog Sendmail, Postfix 등 메일 서버 로그
스케줄링 로그 /var/log/cron Crond(작업 예약) 실행 로그
애플리케이션 /var/log/httpd/ Apache 웹 서버 로그 (access_log, error_log)
로그인 기록 /var/log/wtmp 성공한 로그인/로그아웃 (바이너리)
로그인 실패 /var/log/btmp 실패한 로그인 시도 (바이너리)

주요 텍스트 기반 로그 분석

텍스트 에디터(vi, cat, tail 등)로 직접 내용을 확인할 수 있는 로그입니다.

1) /var/log/messages

  • 시스템에서 발생하는 가장 표준적인 로그
  • Root 사용자만 읽기 가능
  • 기록 형식: 날짜 시간 호스트명 프로세스명[PID]: 메시지 내용
cat /var/log/messages

2) /var/log/secure

  • 사용자 인증(Auth) 관련 로그
  • SSH 접속 성공/실패, su 명령어 사용, sudo 권한 행사 기록

주요 바이너리 기반 로그 분석 (wtmp, btmp)

텍스트로 저장되지 않고 바이너리(Binary) 형태로 저장되므로, 전용 명령어를 사용하여 확인해야 합니다.

1) /var/log/wtmp (성공 로그)

  • 내용: 로그인/로그아웃, 재부팅(reboot), 시스템 종료(shutdown) 이력
  • 명령어: last
$ last             # 전체 이력 확인
$ last gildong     # 특정 사용자 이력 확인
$ last reboot      # 재부팅 이력 확인
$ last -1          # 가장 최근 접속 기록 1개만 확인

2) /var/log/btmp (실패 로그)

  • 내용: 로그인 실패 기록 (Brute Force 공격 탐지에 유용)
  • 명령어: lastb (Root 권한 필요)
lastb            # 로그인 실패 이력 확인
lastb -3         # 최근 3개의 실패 이력 확인

3) /var/log/lastlog

  • 내용: 각 사용자의 가장 마지막 로그인 정보만 기록
  • 명령어: lastlog

Rsyslog (System Logging Daemon) 이해

리눅스의 로그를 중앙 집중적으로 관리하는 데몬으로, /etc/rsyslog.conf 설정에 따라 로그를 파일, 콘솔, 또는 원격 서버로 전송합니다.

  • 데몬명: rsyslogd
  • 설정 파일: /etc/rsyslog.conf
  • 서비스 관리: systemctl restart rsyslog


Rsyslog 설정 파일 (/etc/rsyslog.conf) 상세

설정 문법

[Facility].[Priority]    [Action]
  • 의미: "어떤 프로그램(Facility)이 어떤 수준(Priority) 이상의 로그를 발생시키면 어디로(Action) 보내라"

1) Facility (메시지 발생 주체)

종류 설명
auth / authpriv 인증 및 보안 관련 (SSH, su 등)
cron 예약 작업 (Cron, At)
daemon 시스템 데몬 (Telnet, FTP 등)
kern 커널 발생 메시지
mail 메일 시스템
local0 ~ local7 사용자 정의 (커스텀 로그용)
* 모든 Facility

2) Priority (위험 수준 / Level)

아래로 갈수록 심각도가 높습니다. (설정한 레벨 이상의 로그가 기록됨)

레벨 이름 설명
debug 디버그 개발/테스트용 상세 메시지
info 정보 일반적인 정보 메시지
notice 알림 에러는 아니지만 주의가 필요한 메시지
warning 경고 주의가 필요한 경고 (warn)
err 에러 소프트웨어 오류 발생 (error)
crit 치명적 하드웨어 문제 등 치명적 상태(alert, emerg 포함)
alert 경계 즉각적인 조치가 필요한 상태 (DB 손상 등)
emerg 응급 시스템 사용 불가 상태 (Panic)
none 없음 로그를 기록하지 않음

3) Action (로그 저장 위치)

  • /var/log/file: 지정한 파일에 기록
  • @192.168.0.1: 원격 호스트로 전송 (UDP)
  • @@192.168.0.1: 원격 호스트로 전송 (TCP)
  • *: 현재 로그인한 모든 사용자 화면에 출력
  • /dev/console: 시스템 콘솔에 출력

Rsyslog 예시

  1. 치명적 오류(crit)만 별도 관리 (커널 제외)

    *.=crit;kern.none    /var/log/critical
    • .=crit: 정확히 crit 레벨만 (= 사용)
    • ;kern.none: 커널 로그는 제외 (none)
  2. 응급 상황(emerg) 발생 시 모든 사용자에게 알림

    *.emerg              *

  1. 메일 로그 중 정보(info) 수준은 제외
    mail.*;mail.!=info   /var/log/maillog
    • !=info: info 레벨은 제외

cat /etc/rsyslog.conf

이걸로 확인가능, 예시대로 변경하기는 힘드러...

---

## 그룹 관리 명령어 

###  1) `groupadd`
```bash
groupadd -g 2000 devteam

2) groupmod

groupmod -n newteam oldteam   # 그룹명 변경
groupmod -g 3000 newteam      # GID 변경

3) gpasswd (그룹 관리)

그룹 관리자를 지정하거나 그룹 멤버를 관리합니다.

gpasswd -A adminuser devteam   # 그룹 관리자 지정
gpasswd -a user01 devteam      # 멤버 추가 (2차 그룹)
![](https://velog.velcdn.com/images/atfield1988/post/8757ad3f-a671-43ba-b9c2-ad3d0204626b/image.pdf)
gpasswd -d user01 devteam      # 멤버 삭제

패스워드 크래킹 (Password Cracking)

⚠️ 공격 기법

  1. Dictionary Attack (사전 대입): 의미 있는 단어 목록(사전 파일)을 대입
  2. Brute-Force Attack (무차별 대입): 모든 가능한 문자의 조합을 시도
  3. Rainbow Table: 미리 계산된 해시 값 테이블을 이용하여 역추적

실습: John The Ripper 사용

0단계: 사전 준비
미리 복사를 합니다.)

1단계: 패스워드 파일 결합
리눅스는 보안을 위해 passwd와 shadow를 분리하므로, 이를 하나로 합쳐야 합니다. 그리고 passcrack에 저장합니다.

unshadow passwd shadow | grep '\$y' | tee passcrack

2단계: 크래킹 수행
저장이 됐는지 확인을 하고 크래킹을 시작합니다.

john passcrack --wordlist /usr/share/wordlists/fasttrack.txt --format=crypt

3단계: 결과 확인
패스워드가 그대로 평문에 노출된 것을 확인할 수 있습니다.

john --show passcrack


패스워드 보안 정책

/etc/security/pwquality.conf

패스워드 복잡성(강도)을 설정하는 파일입니다.

설정값 설명 권장값
minlen 최소 길이 8 이상
dcredit 숫자 최소 개수 -1 (1개 이상)
ucredit 대문자 최소 개수 -1 (1개 이상)
lcredit 소문자 최소 개수 -1 (1개 이상)
ocredit 특수문자 최소 개수 -1 (1개 이상)
retry 입력 실패 시 재시도 횟수 3회
usercheck 아이디 포함 여부 확인 1 (포함 금지)

/etc/login.defs

계정 생성 시 기본값을 설정하는 파일입니다.

  • PASS_MAX_DAYS: 암호 최대 사용 기간 (90일 권장)
  • PASS_MIN_DAYS: 암호 최소 사용 기간
  • PASS_WARN_AGE: 만료 경고 기간
  • UID_MIN / MAX: 일반 사용자 UID 범위 지정

벌써 또 하나 끝났다.... 시간 왤케 빨리 가지..?
추가적으로 강사님께서 pam, 부팅과정, 프로세스 공부를 진행하면 실력이 많이 발전할 거라고 하셨다.