자격증 정복/정보보안(산업)기사

정보보안기사 실기 재도전 02 — 유닉스·리눅스 보안 (계정·패스워드·권한·로그·원격접속)

올드 IT직장인 2026. 11. 1. 09:42

정보보안기사 실기 재도전 02 — 유닉스·리눅스 보안 (계정·패스워드·권한·로그·원격접속)

출제기준 주요항목 1. 시스템·네트워크 보안특성 파악 (1-1 운영체제별) / 2. 취약점 점검·보완 (2-1 운영체제)
실기에서 가장 자주 나오는 영역: 로그 파일, passwd/shadow, PAM, SUID, r-command, xinetd를 한 편에 정리합니다.


이번 편 출제 맵 ⭐⭐⭐

주제 출제 회차 (예시) 유형
로그 파일·로그 확인 명령 1·6·14·22·27·28·29회 단답·실무
/etc/passwd, /etc/shadow 14·16·22·29·30·31회 단답·실무
PAM·계정 잠금 14·18·23·29회 단답·서술
패스워드 정책 13·24·26회 단답·실무
SUID/SGID 1·8·11·19·24·32회 단답·서술·실무
r-command 24·32회 서술·실무
xinetd 설정 9·24·30회 실무
cron 7·8회 서술
배너 노출 28회 서술
서버 설정 빈칸 채우기 30회 실무

 

(회차는 기출 파일 키워드 검색 기준 예시입니다. 전부 나열한 것은 아니에요.)


1. 로그 파일 ⭐⭐⭐

파일 내용 확인 명령
/var/run/utmp (또는 /var/adm/utmp) 현재 로그인 사용자 who, w, users
/var/log/wtmp 로그인·로그아웃 이력, 재부팅 last
/var/log/btmp 로그인 실패 기록 lastb
/var/log/lastlog 사용자별 최근 로그인 시간 lastlog
pacct 사용자가 실행한 명령 기록(프로세스 어카운팅) lastcomm (기록 시작: accton)
sulog (Solaris) su 사용 기록 (+ 성공, − 실패) cat /var/adm/sulog
loginlog (Solaris) 로그인 5회 이상 연속 실패 기록 cat /var/adm/loginlog
/var/log/secure Linux su·ssh 인증 기록 (Debian 계열은 auth.log)  
xferlog FTP 전송 기록  
messages 시스템 전반  
cron cron 실행  
maillog 메일  
boot.log / dmesg 부팅 메시지 dmesg
~/.bash_history 사용자 명령 이력 history
단답 키워드: utmp=현재 / wtmp=이력 / btmp=실패 / lastlog=최근 로그인 / pacct=명령 / sulog=su
⚠️ wtmp(로그인 이력)와 btmp(실패)를 혼동하지 마세요. last = wtmp, lastb = btmp.
⚠️ pacct는 accton으로 켜야 기록됩니다. 확인은 lastcomm.

2. 계정·패스워드 ⭐⭐⭐

2-1. /etc/passwd (7개 필드)

exam:x:1000:1000:Exam User:/home/exam:/bin/bash
 ①  ② ③   ④    ⑤          ⑥          ⑦
① 계정명 ② 패스워드(x = shadow 사용) ③ UID ④ GID ⑤ 설명(GECOS) ⑥ 홈 디렉터리 ⑦ 로그인 셸

 

22회 3번처럼 5번째 필드(GECOS)가 비어 있거나 생략된 예시가 나오면 필드를 세어서 "1000 = GID, /home/exam = 홈, /bin/bash = 셸"로 읽습니다. 콜론 개수로 위치를 세는 습관이 필요해요.

 

2-2. /etc/shadow (9개 필드)

root:$6$salt$hash:17132:0:99999:7:::
 ①       ②        ③    ④  ⑤    ⑥ ⑦⑧⑨
① 계정명 ② 암호화된 패스워드 ③ 마지막 변경일(1970-01-01 기준 일수)
④ 최소 사용 기간 ⑤ 최대 사용 기간 ⑥ 만료 경고 기간 ⑦ 비활성 기간 ⑧ 계정 만료일 ⑨ 예약
  • 17132 = 2016-11-27 (1970-01-01 + 17132일)
  • 4번 0 = 변경 제한 없음, 5번 99999 = 사실상 무제한, 6번 7 = 7일 전부터 경고
  • 패스워드 필드가 ! 또는 * = 로그인 불가 계정
접두 알고리즘
접두 알고리즘
$1$ MD5
$2a$ / $2y$ bcrypt
$5$ SHA-256
$6$ SHA-512
$y$ yescrypt

 

pwconv는 passwd → shadow 분리 적용, pwunconv는 shadow를 passwd로 되돌립니다.

 

2-3. 패스워드 정책 (OS별 설정 파일) ⭐⭐

OS 최소 길이 최대 사용 기간
Linux /etc/login.defs PASS_MIN_LEN 8 PASS_MAX_DAYS 90
Solaris /etc/default/passwd PASSLENGTH=8 MAXWEEKS=12
AIX /etc/security/user minlen=8 maxage=12
HP-UX /etc/default/security MIN_PASSWORD_LENGTH=8 PASSWORD_MAXDAYS=90

 

그 밖에 Linux PASS_MIN_DAYS 1(최소 사용 기간), PASS_WARN_AGE 7(경고 일수).

 

⚠️ 최신 배포판에서는 PASS_MIN_LEN이 더 이상 쓰이지 않고 PAM(pam_pwquality의 minlen)이 길이를 정합니다.
   시험은 교재 기준(login.defs)으로 답하되, 실무에서는 PAM 설정을 확인하세요.

 

2-4. PAM과 계정 잠금 ⭐⭐⭐

PAM 모듈 타입 4가지: auth(인증) / account(계정 상태) / password(패스워드 변경) / session(세션)

 

교재·기출에 나오는 계정 잠금 예시:

auth     required pam_tally.so deny=5 unlock_time=120 no_magic_root
account  required pam_tally.so no_magic_root reset
  • deny=5 → 5회 실패 시 잠금, unlock_time=120 → 120초 후 해제
  • 교재 설명: no_magic_root = root에는 잠금 미적용, reset = 로그인 성공 시 실패 횟수 초기화
⚠️ 해설이 갈리는 부분입니다.
   - 교재: no_magic_root = root 잠금 제외
   - 14회 복원 해설: root도 적용된다고 설명
   - 실제 Linux-PAM 소스(1.3.1)에는 no_magic_root·reset 옵션이 없고(알 수 없는 옵션은 로그만 남김),
     pam_tally/pam_tally2는 1.5.0 시기에 제거됨 → 현재는 pam_faillock
   시험 답안은 교재 설명을 따르고, 실무에서는 아래 faillock을 쓰세요.

 

현재 방식 (pam_faillock):

/etc/security/faillock.conf
  deny = 5
  fail_interval = 900
  unlock_time = 600
  even_deny_root          # root에도 적용

faillock --user 계정        # 실패 기록 확인
faillock --user 계정 --reset  # 초기화

 

2-5. 기타 계정 보안

  • 불필요 계정(lp, uucp, nuucp 등) 삭제 또는 로그인 셸을 /sbin/nologin으로
  • root 원격 로그인 제한
OS 설정
Solaris /etc/default/login CONSOLE=/dev/console
Linux /etc/securetty + pam_securetty, sshd_config PermitRootLogin no
AIX /etc/security/user rlogin=false
HP-UX /etc/securetty console
  • su 제한: wheel 그룹만 su 허용 (pam_wheel.so use_uid), Solaris는 chgrp security su; chmod 4750 su
  • 세션 타임아웃: /etc/profile 에 TMOUT=600

3. 파일·디렉터리 권한 ⭐⭐⭐

3-1. 권한 기준표

파일 권한 소유자
파일 권한 소유자
/etc/passwd 644 root
/etc/shadow 400 root
/etc/hosts 600 root
/etc/(x)inetd.conf 600 root
/etc/syslog.conf 644 root
/etc/services 644 root

3-2. umask ⭐⭐

umask는 빼기가 아니라 비트 마스크입니다.

파일 기본 666, 디렉터리 기본 777에서 umask 비트를 제거합니다.

umask 022: 파일 644 / 디렉터리 755
umask 027: 파일 640 / 디렉터리 750   (637 아님!)
umask 033: 파일 644 / 디렉터리 744   (633 아님!)
umask 077: 파일 600 / 디렉터리 700

 

⚠️ 단순히 666 − 027 = 637 로 계산하면 틀립니다. 6(110)에서 2(010)를 지우면 4, 7을 지우면 0 → 비트로 계산하세요.

 

3-3. SUID / SGID / Sticky ⭐⭐⭐

특수권한 숫자 의미
SUID 4000 실행 시 파일 소유자 권한으로 실행 (rws)
SGID 2000 실행 시 파일 그룹 권한으로 실행 / 디렉터리면 그룹 상속
Sticky 1000 디렉터리 안 파일은 소유자만 삭제 (/tmp)
find / -perm -4000 2>/dev/null                    # SUID
find / -perm -2000 2>/dev/null                    # SGID
find / \( -perm -4000 -o -perm -2000 \) 2>/dev/null   # 둘 중 하나
find / -perm -2 -type f 2>/dev/null               # 다른 사용자 쓰기 가능(world-writable)
find / -nouser -o -nogroup 2>/dev/null            # 소유자·그룹 없는 파일
find / -mtime -10                                  # 최근 10일 내 수정
chmod -s 파일                                       # SUID·SGID 둘 다 제거
⚠️ chmod -s 는 SUID와 SGID를 동시에 제거합니다.
⚠️ -perm -4000 (모든 지정 비트 포함) vs -perm 4000 (정확히 일치) 구분.

 

3-4. 실무 패턴 — 백업 파일 권한 (15회 14번 유형)

상황: 백업 파일이 644라서 다른 사용자가 읽을 수 있음 → 원인과 조치

원인: umask가 022 → 파일이 644로 생성되어 other가 읽기 가능
조치: 스크립트에서 umask 077(또는 0177)로 설정 → 파일 600
      기존 umask 저장 후 작업 끝나면 복원
      chown operator 파일 ; chmod 400 파일

4. 원격접속·서비스 ⭐⭐⭐

4-1. r-command (rlogin, rsh, rexec) ⭐⭐

/etc/hosts.equiv, ~/.rhosts 로 패스워드 없이 신뢰 접속 → 위험.

조치:
① 불필요하면 서비스 비활성화 (SSH로 대체)
② 사용 시 소유자 root(또는 해당 계정), 권한 600 이하
③ '+' 설정 제거 (모든 호스트·사용자 허용을 의미)

 

4-2. TCP Wrapper ⭐⭐

접근 제어 파일: /etc/hosts.allow, /etc/hosts.deny
판단 순서: hosts.allow 먼저 확인 → 일치하면 허용
          → hosts.deny 확인 → 일치하면 거부
          → 둘 다 없으면 허용

 

보통 hosts.deny에 ALL: ALL, hosts.allow에 허용할 IP/서비스를 적습니다.

 

4-3. xinetd 설정 ⭐⭐⭐

옵션 의미
cps = n w 초당 최대 접속 n, 초과 시 w초간 서비스 중단
instances 동시 최대 서버 수
per_source 동일 IP당 최대 접속 수
only_from 허용 IP
no_access 거부 IP
access_times 허용 시간 HH:MM-HH:MM
disable yes면 서비스 비활성화
log_on_failure 접속 실패 시 로그 항목

 

기출: 9회 cps = 10 5, instances = 50, per_source = 10

기출: 24회 no_access, only_from, instances, 09:00-18:00

 

4-4. 배너 노출 (28회 18번 유형)

서버 정보(OS·버전)가 접속 시 노출 → 공격자 정보 수집.

확인 위치: /etc/issue, /etc/issue.net, /etc/motd, vsftpd의 ftpd_banner
조치: 배너에서 OS·버전 정보 제거 또는 경고 문구로 교체
      telnet/FTP를 SSH/SFTP로 대체

 

4-5. 불필요 서비스

echo, discard, daytime, chargen, rlogin, rsh, rexec, rpc.cmsd, rusersd, finger, tftp, talk → 중지·삭제.


5. cron·프로세스·패치 ⭐⭐

5-1. cron (7회 14번 유형)

crontab -l         # 목록
crontab -e         # 편집
crontab -u 사용자   # 다른 사용자
/etc/cron.allow, /etc/cron.deny   # 사용 제한

 

7회 14번 위험 요소: root cron이 /tmp/passwd1을 /etc/passwd에 덮어쓰기

→ /tmp는 누구나 쓸 수 있어 계정 조작(root 권한 계정 추가) 가능. 또 nc -e /bin/bash 형태의 리버스 셸 실행 코드가 숨어 있을 수 있음.

점검: cron에 등록된 스크립트의 소유자·권한, 쓰기 가능한 경로 참조 여부

 

5-2. 프로세스·패치

  • 숨은 프로세스 확인: /proc 디렉터리, lsof
  • 패치 확인: uname -r 등으로 커널·버전 확인 후 최신 패치와 비교

단답 키워드 표 ⭐⭐⭐

질문 답
현재 로그인 사용자 utmp (who)
로그인 이력 wtmp (last)
로그인 실패 btmp (lastb)
사용자별 최근 로그인 lastlog
명령 실행 기록 pacct (lastcomm)
shadow 사용 시 passwd 패스워드 필드 x
shadow 패스워드 변경 날짜 단위 1970-01-01 기준 일수
shadow 최대 사용 기간 5번째 필드
SUID 숫자 4000
SGID 숫자 2000
Sticky 숫자 1000
접속 허용/거부 파일 hosts.allow / hosts.deny
PAM 모듈 타입 4가지 auth, account, password, session
세션 타임아웃 변수 TMOUT
특수권한 포함 파일 탐색 find / -perm -4000

서술형 답안 구조 ⭐⭐⭐

SUID/SGID (24·27·32회 유형)

정의: 실행 시 파일 소유자(그룹) 권한으로 실행되는 특수 권한
위험: 취약한 SUID 프로그램을 통해 root 권한 획득(권한 상승)
점검: find / -perm -4000 -o -perm -2000
조치: 불필요한 SUID/SGID 제거(chmod -s), 필수 파일만 유지, 주기적 점검

 

r-command (24·32회 유형)

정의: 패스워드 없이 신뢰 호스트 간 접속을 허용하는 서비스(hosts.equiv, .rhosts)
위험: 신뢰 관계 악용, IP 스푸핑, '+' 설정 시 누구나 접속
조치: 서비스 중지·SSH 대체, 사용 시 파일 소유자 root·권한 600 이하·'+' 제거

 

계정 보안 (패스워드·잠금)

정책: 최소 길이·복잡도·최대 사용 기간 설정
통제: 실패 횟수 초과 시 잠금(PAM), root 원격 로그인 제한, su 제한
관리: 불필요 계정 삭제, 패스워드 파일 권한(shadow 400)

⚠️ 함정 모음

⚠️ last는 wtmp, lastb는 btmp
⚠️ umask 027 → 파일 640 (637 아님) — 비트 마스크
⚠️ chmod -s 는 SUID와 SGID 모두 제거
⚠️ hosts.allow를 먼저 확인
⚠️ PAM 타입은 4가지 (auth/account/password/session)
⚠️ no_magic_root·reset 해설이 자료마다 다름 → 교재 기준으로 답안 작성
⚠️ pam_tally/pam_tally2는 최신 배포판에서 제거 → 실무는 pam_faillock
⚠️ /etc/shadow는 400, /etc/passwd는 644

기출 Q&A

Q. (22회 3번 유형) exam:x:1000:/home/exam:/bin/bash 처럼 필드가 하나 생략된 passwd 행에서 1000, /home/exam, /bin/bash 는 각각 무엇인가?

A. 1000 = GID, /home/exam = 홈 디렉터리, /bin/bash = 로그인 셸

 

Q. (15회 14번 유형) 백업 파일이 644여서 다른 사용자가 읽을 수 있다. 조치는?

A. 스크립트에서 umask 077(또는 0177) 설정 → 파일 600, 기존 umask 저장·복원, chown operator + chmod 400

 

Q. (24회 유형) xinetd에서 특정 IP 거부, 허용 IP 지정, 동시 접속 제한, 접속 시간 제한 옵션은?

A. no_access, only_from, instances, access_times (09:00-18:00)


💡 실무에서는?

  • KISA 취약점 점검 관점: 주요정보통신기반시설 기술적 취약점 분석·평가 가이드의 Unix 점검 항목(root 원격 접속 제한, 패스워드 정책, 파일 권한, SUID, 불필요 서비스 등)이 이 편의 내용과 거의 겹칩니다. 시험 공부가 곧 점검 체크리스트예요.
  • 로그: 서버 로컬 로그는 침해 시 지워질 수 있어서 rsyslog로 원격 로그 서버에 전송하는 구성이 기본입니다.
  • 명령 감사: pacct보다 auditd로 시스템콜·명령 감사를 하는 경우가 많아요.
  • 계정 잠금: 최신 배포판은 pam_faillock (/etc/security/faillock.conf).
  • root 직접 로그인 금지 + sudo 사용, SSH는 키 인증과 PermitRootLogin no.

핵심 정리

✅ 로그: utmp 현재 / wtmp 이력 / btmp 실패 / lastlog 최근 / pacct 명령 / sulog su
✅ passwd 7필드, shadow 9필드, $6 = SHA-512, ! 또는 * = 로그인 불가
✅ 파일 권한: passwd 644, shadow 400, hosts·inetd.conf 600
✅ umask는 비트 마스크 (027 → 640/750)
✅ SUID 4000 / SGID 2000 / Sticky 1000, find -perm 으로 점검
✅ r-command: 서비스 중지, 쓰는 경우 600 이하·'+' 제거
✅ TCP Wrapper: hosts.allow → hosts.deny 순
✅ xinetd: cps, instances, per_source, only_from, no_access, access_times

 

📌 참고: 2027년 출제기준 개편에서 1-1에 클라우드·가상화 환경 OS 보안 특성이 추가됩니다.

      이번 11/14 시험은 현행 기준이에요.

 

다음 편에서는 윈도우 보안으로 이어갑니다!

 

궁금한 점은 댓글로 남겨주세요!

반응형
개인정보처리방침  |  블로그 소개