IT배움/자격증

리눅스마스터 1급 2차 2501 실기 모범답안 예상문제 만들기 (1~16문)

DongT 2025. 11. 7. 21:03
728x90
반응형

 

 



 

자격증 취득 준비할 겸 포스팅을 합니다.

해당 게시글에 문제가 있을 경우 댓글 달아주세요. (수정이 필요한 문구가 있거나, 문제 공유가 불가한 경우 등)

설명을 못 쓴 문제가 있으니 참고해주세요.


 
✅  [1번 예상문제]
사전에 ihdgroup 그룹이 사용가능하며, ihdman 계정 존재하는지 아래와 같이 확인해야한다.

grep ihdgroup _________

grep ihdman _________

usermod -aG ihdgroup ihdman 

 

앞으로 사용자 계정 생성시 홈디렉터리에 readme.txt 파일을 추가한다.

vi  _________ /readme.txt 

 

패스워드 최대 사용일수를 90일로 수정하려한다.

vi  _________

~

PASS_MAX_DAYS     90

~

 

 

 

🎯  답안

① /etc/gshadow

② /etc/passwd

③ /etc/skel

 /etc/login.def

 

📝 답안 해설

그룹의 암호 및 관리자 설정을 보관하며, 보안 강화를 위해 일반 사용자에 대한 읽기 권한이 없는 파일        /etc/gshadow

시스템의 모든 사용자 계정 정보를 포함하며, UID/GID 정보와 로그인 쉘을 확인할 수 있는 파일        /etc/passwd

신규 사용자 생성 시 홈 디렉터리에 기본 복사되는 초기 설정 파일이 위치한 디렉터리        /etc/skel

계정 정책(최소 UID, 패스워드 만료 기간 등)을 설정하는 전역 보안 정책 파일    /etc/login.def

 

📌  gpasswd

/etc/gshadow파일 수정을 위해서 gpasswd 라는 명령어를 사용한다.

shadow파일 수정을 위한 passwd 명령 사용과 비슷함.

  그룹에 사용자 추가/제거: gpasswd -a user01 group01 / gpasswd -d user01 group01

  그룹의 관리자 지정: gpasswd -A manage7r01 group01

  그룹의 패스워드 변경: gpasswd group01

 

📌  홈디렉토리

 /etc/skel 경로를 지정하는 파일은 /etc/default/useradd이다.

    grep skel /etc/default/useradd

    SKEL=/etc/skel

 

📌  사용자/그룹 컨트롤 명령어


useradd / adduser 새 사용자 계정을 생성
   sudo useradd -g grp01 -u 1100 -d /home/dir/folder usr01
#  -g: 기본 그룹 지정(gid 또는group명)
#  -u: uid 지정
#  -d: 홈 디렉터리 지정
#  -m: 홈 디렉터리 자동(skel 참조)
usermod 기존 사용자 정보 수정 (예: 그룹, 셸, 홈디렉토리 등 변경)
#  -d: 홈 디렉토리를 /home/james2 로 옮기기. -m과 함께 사용
   sudo usermod -d /home/james2 -m james
#  -s: 로그인 셸을 /bin/zsh 로 변경
   sudo usermod -s /bin/zsh james
# -aG: james 계정을 추가 그룹 "sudo"에 추가. G만 쓰면 그룹 변경.
   sudo usermod -aG sudo james
# -L: james 계정 잠금
   sudo usermod -L james
# -U: james 계정 잠금 해제
   sudo usermod -U james
# -e: 계정 만료일 2025-12-31로 설정
   sudo usermod -e 2025-12-31 james
userdel 사용자 계정 삭제
# james 계정만 삭제 (홈디렉토리와 메일은 남김)
    sudo userdel james
#  -r: james 계정과 홈디렉토리, 메일까지 모두 삭제
    sudo userdel -r james
#  -f: 로그인 중인 사용자를 강제로 삭제 (주의! pkill -u james 로 먼저 정리 필)
    sudo userdel -f james
chage 비밀번호 유효기간, 계정 만료일 등 계정 수명 관리. /etc/shadow를 수정
#  -l: james 사용자의 패스워드 만료 정보 확인
   sudo chage -l james
#  -M: 비밀번호를 90일마다 변경하도록 설정
   sudo chage -M 90 james
#  -W: 비밀번호 만료 7일 전부터 경고
   sudo chage -W 7 james
#  -I: 비밀번호 만료 후 5일간 비활성화 기간 부여
   sudo chage -I 5 james
#  -E: 계정 만료일을 2025-12-31로 지정
   sudo chage -E 2025-12-31 james
#  -d: 마지막 비밀번호 변경일을 오늘로 초기화
   sudo chage -d 0 james
passwd 사용자 비밀번호 설정 또는 변경
# 자신 또는 사용자의 비밀번호 변경. 다른 사용자 비밀번호 변경은 root만 가능.
   passwd [사용자]
#  -l: james 계정 잠금
   sudo passwd -l james
#  -u: james 계정 잠금 해제
   sudo passwd -u james
#  -e: james 계정의 비밀번호 즉시 만료 (다음 로그인 시 변경 강제)
   sudo passwd -e james
#  -d: 비밀번호 제거 (로그인 시 암호 없이 접근 가능 — 보안상 비추천)
   sudo passwd -d james
chfn 사용자 정보 변경. -f(full-name), -o(office-name), -p(office-phone), -h(home-phone)
chsh 로그인 셸 변경. -s(/bin/bash, /bin/sh 등 /etc/shells에 등록된 모든 셸 사용가능)
id 사용자의 UID, GID, 그룹 정보 출력
#  id: 현재 사용자 정보 확인
   uid=1000(james) gid=1000(james) groups=1000(james),27(sudo),999(docker)
#  id [사용자]: 특정 사용자 정보
   uid=0(root) gid=0(root) groups=0(root)
#  id -u: UID만 확인
   1000
#  id -Gn: 그룹명만 확인
   james sudo docker
whoami
who
현재 로그인한 사용자 이름 출력
현재 서버에 로그인중인 사용자 이름 출
su
sudo
su: 다른 사용자로 전환 (Switch User)
# su -c: 다른 계정 권한으로 명령어 실행
sudo: 다른 사용자(보통 root)의 권한으로 명령 실행
# sudo -l 
groupadd 새 그룹 생성
groupdel 그룹 삭제
groupmod 그룹 이름, GID 등 수정
gpasswd 그룹 비밀번호 설정 및 관리자 지정
newgrp 현재 세션에서 그룹 변경

📌  패스워드 컨트롤 명령어

passwd 사용자 비밀번호 설정/변경
chage 비밀번호 만료일, 변경 주기 설정
pwconv / pwunconv /etc/passwd → /etc/shadow 변환  /  /etc/shadow → /etc/passwd로 병합
grpconv / grpunconv /etc/group → /etc/gshadow 변환  /  /etc/gshadow → /etc/group으로 병합
pam_tally2 로그인 실패 횟수 확인 및 초기화 (PAM 기반)
faillog 로그인 실패 이력 확인/초기화

📌  사용자 관리 설정 파일

/etc/passwd 사용자 계정 기본 정보 (UID, GID, 홈디렉토리, 셸 등)
/etc/shadow 암호화된 패스워드와 패스워드 만료 정보 저장. passwd(1~4번 필드),chage(5~8번 필드) 명령어로 관리.
/etc/group 그룹 정보 관리 (그룹명, GID, 멤버 등)
/etc/gshadow 그룹 비밀번호 및 관리자 정보 저장. gpasswd 명령어로 관리.
/etc/login.defs 사용자 계정 생성 시 기본 정책 (UID/GID 범위, 패스워드 만료 정책 등)
/etc/default/useradd useradd 명령어의 기본 설정 (홈디렉토리 경로, 셸 등)
/etc/skel/ 새 계정 생성 시 복사되는 기본 환경파일들 (.bashrc, .profile 등)
/etc/security/limits.conf 사용자별 자원 제한 (CPU, 메모리, 프로세스 등)
/etc/security/access.conf 로그인 허용/차단 정책
/etc/security/time.conf 특정 시간대별 로그인 제어
/etc/nsswitch.conf 사용자/그룹 정보를 어디서 조회할지 결정 (파일, LDAP 등)
/etc/pam.d/ PAM 인증 모듈 설정 디렉터리 (로그인, su, passwd 등 서비스별 설정)
/etc/pam.conf PAM 전체 설정 파일 (일부 배포판은 /etc/pam.d/ 사용)

📌  정책 로그 파일

/etc/pam.d/system-auth 공통 인증 정책 (Red Hat 계열)
/etc/pam.d/common-password 패스워드 정책 (Debian/Ubuntu 계열)
/etc/security/pwquality.conf 패스워드 복잡도(길이, 문자종류 등) 설정
/etc/login.access 특정 사용자/호스트의 로그인 접근 제어
/etc/faillock.conf 로그인 실패 잠금 정책 (Red Hat 8 이후)
/var/log/faillog 로그인 실패 기록
/var/log/lastlog 마지막 로그인 정보
/var/log/wtmp / /var/log/btmp 로그인/로그아웃 및 실패 이력 기록

 

 

🧠 관련 내용 자료에 힘을 빡시게 주다보니 너무 길어짐

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 

✅ [2번 예상문제]

http 설정파일을 심볼릭링크를 이용하여 /usr/local/apache 지정 하려한다. , 현재 http 설정 위치는 /etc/httpd 이다

(①: 명령어, : 옵션 및 파라미터)

_________ _________

a.txt 파일에 있는 모든 소문자를 대문자로 변경하여 b.txt파일로 저장해야한다.

(③: 명령어, ④: 옵션 및 파라미터)

_________ _________

 

🎯  답안

① ln

② -s /usr/local/apache /etc/httpd

③ dd (추가 정답: awk, tr, sed 등)

④ if=a.txt conv=ucase of=b.txt (③번과 ④번은 추가 정답 있음)

 

 

 

📌   링크 명령어

하드링크: ln 원본파일 링크위치 같은 inode로 별개의 파일처럼 관리.
심볼릭링크: ln -s 원본파일 링크위치 윈도우의 바로가기같은 기능.
디렉토리 링크걸 때 링크위치에 같은 이름의 디렉토리가 있는지 확인 중요.

📌   대소문자 변경 명령어

명령어 대문자, 소문자 변경 옵션 설명
tr tr 'a-z' 'A-Z' < a.txt > b.txt 
tr 'A-Z' 'a-z' < a.txt > b.txt
가장 단순하고 빠름
sed sed 's/.*/\U&/' a.txt > b.txt
sed 's/.*/\L&/' a.txt > b.txt
정규표현식 사용 가능
\L : 소문자 변환
awk awk '{print toupper($0)}' a.txt > b.txt
awk '{print tolower($0)}' a.txt > b.txt
특정 필드만 변환 가능
dd dd if=a.txt of=b.txt conv=ucase
dd if=a.txt of=b.txt conv=lcase
블록 단위 변환
conv=lcase 옵션 사용⚠️ 원본 덮어쓰기 주의

 

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 

 

[3번 예상문제]

bash 스크립트를 우선순위를 10으로 지정하여 실행하려한다.

nice _________

 

/root/check.sh 스크립트를 홀수월의 1 1 4 5분에 실행되도록 스케쥴을 구성해야한다.

crontab -e

~

_________

~

 

🎯  답안

① --10 bash (또는 -n -10 bash)

② 5 4 1 1-12/2 * (월 표기 대체 1,3,5,7,9,11 또는 */2)

 

 

📝 nice 지정방법 (우선순위 범위: -20(가장 높음) ~ 19(가장 낮음))

  # nice --10 bash (또는 nice -n 10 bash) -> bash 우선순위 -10으로 지정되어 실행된다.

  # renice -n 10 -p PID -> 지정한 PID 프로세스 우선순위를 10으로 변경함.

 

📌   nice와 renice 차이  

명령 사용 시점 대상 특징
nice 프로세스 실행 전 새로 시작할 작업  실행과 동시에 우선순위 지정
renice    프로세스 실행 후 이미 실행 중인 PID
사용자 UID, 그룹 GID
동작 중인 프로세스 우선순위 변경(절대값으로 지정)

📌   사용 예제

# 예제 1: 기본 nice 값(10)으로 실행
nice sleep 100 &

# 예제 2: 우선순위를 낮춰 실행 (값이 높을수록 우선순위 ↓)
nice -n 10 gzip largefile.tar &

# 예제 3: root가 우선순위를 높이는 경우 (음수 사용)
sudo nice -n -5 ./heavy_process.sh &
# 예제 1: PID 1234번 프로세스의 우선순위를 10으로 변경  (순위를 더하거나 빼는게 아니라 값으로 바꾸는것)
renice 10 -p 1234

# 예제 2: 여러 프로세스를 동시에 변경
renice 5 -p 1234 5678 9012

# 예제 3: 특정 사용자의 모든 프로세스 우선순위를 조정
sudo renice -n 8 -u www-data

# 예제 4: 특정 그룹의 모든 프로세스 우선순위를 조정
sudo renice -n 15 -g developers

📌   nice 확인 명령어

ps -el NI: nice 값
PRI: 실제 커널 우선순위 (nice + 기본 priority)
top 동적으로 NI, PR 확인 가능
htop 시각적으로 nice/priority 확인 및 수정 가능
ps -o pid,ni,pri,comm 필요한 컬럼만 출력

 

📝 crontab 필드 구분

  [ 0~60] [ 0~24] [ 1~31] [ 1~12] [요일 0~7] [명령어 or 스크립트]

  요일의 0,7 일요일이며, 이후는 요일 순서대로임

 

📌  crontab 특수문자

  * : 매분, 매시, 매일 등의 모든 시간을 표현

  / : 간격을 주고 싶을 사용. 뒤의 숫자로 간격을 표현

  , : 값을 여러개 줘야

  - : 범위 표시

 

📌  crontab 명령어 옵션
-l : 스케쥴보기
-e : 스케쥴생성/수정(vi편집툴이용)
-r : 스케쥴모두제거
-u : 특정계정의스케쥴지정

 

 


--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

[4번 예상문제]

설치된 tomcat 재설치 예정이다. tomcat패키지를 지워야 하나, 의존성으로 설치된 패키지는 유지한다.

rpm _________  tomcat

dnf install -y tomcat

현재 비활성 상태인 repository 검색하려한다.

dnf _________

 

🎯  답안

① -e --nodeps (-e 대신에 --erase 가능)

② repolist --disabled (repolist disabled도 가능)

 

 

📝  설정파일 repo 활성화 여부 설정확인방법

  grep enabled /etc/yum.repo.d/[REPO파일]

  여기서 숫자를 0->1 바꾸면 활성됨

📝  전체 repo 상태 확인

  dnf repolist all

 

 

📌 패키지 설치 삭제 명령어 비교 (rpm, dnf)
설치된 패키지 찾기 rpm -qa dnf list installed
설치할 패키지 찾기 rpm -qpi 파일.rpm dnf search 패키지명
패키지 설치 rpm -ivh 파일.rpm dnf install 패키지명
패키지 제거 rpm -e 패키지명 dnf remove 패키지명
제거(의존성 무시) rpm -e --nodeps 패키지명 dnf remove --nodeps 패키지명
제거(의존성 포함) dnf autoremove 패키지명
제거(사용자 폴더 유지) rpm -e --noscripts 패키지명 dnf remove --noautoremove 패키지명
설치 가능 버전확인 dnf list available 패키지명
설치된 버전확인 rpm -qi 패키지명 dnf info 패키지명

 

📌  dnf repo 명령어 설명
dnf repolist 활성화된(Enabled) 저장소 목록 확인
dnf repolist all 비활성화 포함 모든 저장소 목록 확인
dnf repoinfo 각 저장소의 세부 정보 출력 (URL, 상태 등)
dnf config-manager --add-repo <URL> 새로운 리포지토리 추가
dnf config-manager --enable <repoid> 저장소 활성화
dnf config-manager --disable <repoid> 저장소 비활성화
dnf clean all 캐시 정리 (metadata, packages, etc.)
dnf makecache 저장소 메타데이터 캐시 재생성
dnf repolist disabled 비활성화된 저장소만 확인
dnf info --enablerepo=<repoid> 패키지명 특정 저장소를 활성화하여 패키지 정보 확인
dnf list all --disablerepo="*" --enablerepo=<repoid> 특정 저장소에서만 목록 조회 (모두 비활성하고 특정repo만 활)
dnf install --disablerepo="*" --enablerepo=<repoid> 패키지명 특정 저장소에서만 패키지 설치 (활성된 repo에서 패키지 설치)
dnf repolist --setopt=reposdir=/custom/repo/path 임시 경로의 repo만 사용
dnf config-manager --setopt=.enabled=0 repo 파일 내 enabled 항목 직접 수정
dnf config-manager --save 설정 변경 후 즉시 저장
📌  /etc/dnf/dnf.conf 전역설정파일

gpgcheck=1 GPG 서명 검증 여부 (1=검증, 0=비활성)
installonly_limit=3 커널 등 다중 버전 유지 개수
clean_requirements_on_remove=True 삭제 시 불필요 패키지도 함께 제거
fastestmirror=True 가장 빠른 미러 자동 선택
cachedir= /var/cache/dnf DNF 캐시 저장 경로

 

 

📌  repo 저장소 지정 파일 /etc/yum.repo.d/*.repo
[baseos]
name=BaseOS Repository
baseurl=http://mirror.centos.org/centos/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[appstream]
name=AppStream Repository
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream
enabled=1
gpgcheck=1
 
[repoid] 고유ID(명령어에서 이 이름으로 호출
name 저장소 설명 이름
baseurl 실제 패키지 경로(URL 또는 로컬 경로)
mirrorlist 미러 서버 목록 URL
enabled 1=활성, 0=비활성
gpgcheck 패키지 서명 검증 여부
gpgkey 공개키 파일 경로
priority 저장소 우선순위 (낮을수록 우선)

 

 

 


--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 

 

[5번 예상문제]  보완필요 

다음은 리눅스 커널 컴파일 과정이다. 주석에 맞게 옵션을 입력하시오.

# 커널 소스 디렉토리를 완전히 초기화 (설정 파일, 빌드 결과까지 전부 삭제)

make _________

# 압축된 커널 이미지 생성 (arch/x86/boot/bzImage)

make _________

# 커널 모듈(.ko 파일들) 빌드

make _________

# /lib/modules/<kernel-version>/ 위치에 모듈 설치

make _________

 

🎯  답안

① distclean

② bzImage

③ modules

④ modules_install

 

 

📝  일반적인 리눅스 커널 설정 진행 순서

  make menuconfig   # 커널 설정

  make bzImage      # 커널 이미지 생성

  make modules      # 모듈 빌드

  make modules_install  # 모듈 설치

 

 

🧠  AI로 최다 답안 

커널 모듈 및 커널 컴파일 관련 문제의 정답으로 가장 많이 등장했던 항목 Top 5를 빈도 순으로 정리했습니다.

커널 관련 문제는 주로 리눅스마스터 1급 2차 시험의 단답식(Q5) 유형에서 출제되었습니다.

순위답변 (정답)횟수한 줄 설명출처 예시
1 depmod 4회 설치된 모듈 사이의 의존성을 검사하고 갱신하는 명령어입니다. 제1302회 Q5-①, 제1401회 Q5-②, 제1602회 Q5-①, 제1801회 Q5-②
2 modules.dep 3회 이상 depmod 명령어가 생성하는 모듈 간의 의존성 목록 파일명이며, 커널 버전에 따라 절대 경로로도 언급됩니다. 제1302회 Q5-②, 제1602회 Q5-②, 제1902회 Q2-③
3 bzImage 2회 커널 컴파일 시 bzip2 형식으로 커널을 생성하는 명령어입니다 (make 다음 괄호). 제1301회 Q5-②, 제1402회 Q5-③
4 modprobe 또는 insmod 2회 모듈 간의 의존성을 참조하거나 (modprobe) 참조하지 않고 (insmod) 커널 모듈을 로드하기 위한 명령어입니다. 제1401회 Q5-①, 제1502회 Q5-①
5 make mrproper 2회 커널 컴파일 시 문제가 되는 오브젝트 파일(*.o)들을 삭제하고 모든 설정과 커널 소스를 초기 상태로 돌리는 명령어입니다. 제1402회 Q5-①, 제1602회 Q5-④

참고: clean (이전에 생성되었던 파일 삭제)와 modules (모듈 컴파일), make clean (오브젝트 파일 제거) 또한 커널 컴파일 과정에서 중요한 답변으로 각각 1회씩 출제되었습니다.


--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 

[6번 예상문제]

디스크 /dev/sdb1, /dev/sdc1, /dev/sdd1 3개를 이용하여 LVM 구성하려한다

아래 조건에 맞게 PV, VG, LV를 생성하는 명령어를 차례대로 쓰시오.

 

# 디스크를 물리볼륨으로 할당

_________

# /dev/sdb1, /dev/sdc1 이용하여 lvm0이라는 볼륨그룹을 생성

_________

# lvm0 볼륨그룹에서 6GB 할당하여 ldata1 논리볼륨 생성

_________

# lvm0 볼륨그룹에 /dev/sdd1 추가하여 확장

_________

 

 

🎯  답안

① pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1

② vgcreate lvm0 /dev/sdb1 /dev/sdc1

③ lvcreate -L 6GB -n ldata1 lvm0

④ vgextend lvm0 /dev/sdd1

 

📝 명령어 사용 간단 예시

 # pvcreate [1-1:디스크1] [1-2:디스크2] : 물리볼륨으로 할당만 하므로 순서 상관없음

 # vgcreate/vgextend [1:볼륨그룹이름] [2-1:물리볼륨1] [2-2:물리볼륨2] : 앞에 이름 정하는것 외에 뒤는 물리볼륨 나열

 # lvcreate/lvextend [1:옵션] [2:논리볼륨이름] [3:볼륨그룹] : 순서대로 명령어 작성 필요

 

📝  lv 볼륨 지정시에는 용량값 또는 % 지정할 있는데 이때 옵션이 다름

 # lvextend -L +5G /dev/vg_data/lv_data

 # lvextend -l +100%FREE /dev/vg_data/lv_data

 

📝  파일시스템 마운트까지 알고 있으면 좋을

 # mkfs -t xfs /dev/VG/LV (/dev/mapper/VG-LV)

 # mount /dev/VG/LV /mnt

   (파티션관련 parted, mklabel GPT, mkpart, 0, 100% )

 

📌 pv 명령어

pvcreate -f 강제생성 물리디스크를 PV로 초기화 pvcreate /dev/sdb1
pvdisplay -m 상세매핑 표시 PV 정보 상세 보기 pvdisplay /dev/sdb1
pvs -a 전체 PV 표시 요약 형태로 PV 목록 보기 pvs
pvscan (옵션없음) 시스템의 PV 전체 스캔 pvscan

📌 vg 명령어

vgcreate -s [size] PE 크기 지정 새 VG 생성 vgcreate vg_data /dev/sdb1 /dev/sdc1
vgextend (옵션없음) VG에 PV 추가 vgextend vg_data /dev/sdd1
vgreduce (옵션없음) VG에서 PV 제거 vgreduce vg_data /dev/sdd1
vgdisplay -v 상세 정보 VG 상세 보기 vgdisplay vg_data
vgs -a 전체 VG 표시 요약 형태로 VG 보기 vgs
vgscan (옵션없음) 시스템 VG 검색 vgscan
vgremove (옵션없음) VG 삭제 vgremove vg_data

📌 lv 명령어

lvcreate -n [name] -L [size] LV 생성 lvcreate -n lv_backup -L 20G vg_data
lvextend -L [+size] LV 크기 확장 lvextend -L +10G /dev/vg_data/lv_backup
lvreduce -L [-size] LV 크기 축소 lvreduce -L 10G /dev/vg_data/lv_backup
lvdisplay -v LV 상세 보기 lvdisplay /dev/vg_data/lv_backup
lvs -a 요약 형태로 LV 보기 lvs
lvscan (옵션없음) LV 전체 스캔 lvscan
lvremove (옵션없음) LV 삭제 lvremove /dev/vg_data/lv_backup
lvrename (옵션없음) LV 이름 변경 lvrename vg_data lv_backup lv_new
lvresize -L [+/-size] LV 크기 조정(확장/축소) lvresize -L +5G /dev/vg_data/lv_new

📌 기타 명령어

vgchange -a y/n VG 활성/비활성 vgchange -ay vg_data
lvchange -an / -ay LV 활성/비활성 lvchange -an /dev/vg_data/lv_new
lvscan (옵션없음) LV 상태 확인 lvscan
lvmdiskscan (옵션없음) LVM용 디스크 검색 lvmdiskscan

 

 

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 

[7번 예상문제]

 

 

# 시스템에 최고위험 수준의 로그를 `/var/log/emergency.log` 파일에 기록하도록 설정하려고 한다.

_________                                    /var/log/emergency.log

 

# 권한 인증 관련된 Critical 메시지 발생 로그인한 모든 유저에게 메시지를 전송한다.

authpriv.crit                                   _________

 

# 정보성 메시지를 제외한 모든 cron 메시지를 /var/log/cron.log 기록한다.

_________                                    /var/log/cron.log

 

# mail 관련된 모든 로그를 UDP 이용하여 외부서버 IP 192.168.12.22 로깅해야한다.

mail.*                                              _________

 

🎯  답안

① *.emerg 또는 *.panic (*.=emerg 또는 *.=panic)

② :omusrmsg:*

③ cron.*;cron.!=notice

④ @192.168.12.22

 

 

 

📝  로그의 Facility와 Severity

Facility (시설) : 로그의 발생 위치 또는 종류를 의미 auth, cron, daemon, kern, mail, user, authpriv, local0~7 등
Severity (심각도) : 로그의 중요도 또는 긴급도 수준을 의미 emerg, alert, crit, err, warning, notice, info, debug

 

📝  Syslog 로그 심각도(Severity Level) 정리

숫자 이름 (영문) 의미
0 emerg (panic) 시스템 사용 불가 상태, 즉시 조치 필요
1 alert 즉시 수정해야 할 심각한 문제
2 crit (critical) 하드웨어/시스템 구성에 치명적 장애
3 err (error) 일반적인 오류 상황
4 warning (warn) 문제 가능성, 주의 필요
5 notice 정상 동작 중 특별히 알아둘 사항
6 info 일반 정보 메시지
7 debug 개발/분석용 세부 정보

 

📝 특수 작업

원격으로 로그 보낼 때 *.*     @log.example.com:514
*.*     @@log.example.com:514
UDP(@)
TCP(@@)
특정 사용자에게 메시지 알람 보낼  (alice,bob) *.err     :omusrmsg:alice,bob  

 

 

📌 추가 팁:  심각도 필터하여 조회

  - 시스템 로그 journalctl (systemd 환경에서 사용하는 로그 뷰어)

심각도 필터링 명령
긴급 ~ 오류 (0~3) journalctl -p err
경고 이상 (4 이상) journalctl -p warning
정보 로그 포함 (6) journalctl -p info
디버그까지 전체 (7) journalctl -p debug

  - dmesg (커널 메시지 전용)

필터 설명
dmesg -T 시간 포함 전체 로그
dmesg --level=err,warn 오류 + 경고만
dmesg --level=emerg,alert,crit 치명적 메시지만

 

📌 추가팀: 로그 관련 명령어

- syslog.conf 검사

rsyslogd -N1

 

- config 재로드

systemctl reload rsyslog

systemctl restart rsyslog   (강제)

 

- 로그 수동 입력 명령어

logger "이것은 테스트 로그입니다"

logger -p local0.info "local0 INFO 레벨 테스트 메시지"

logger -p auth.warning "AUTH WARNING 테스트"

logger -p cron.err "CRON ERROR 테스트"

logger -p user.emerg "USER EMERGENCY 테스트"

 

출처: https://dong-it-engineer.tistory.com/92 [IT기술정보올리는곳:티스토리]

 

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 

 [8번 예상문제]

서버에 로그인 성공/실패하는 이력(로그)을 지속적으로 모니터링 해야한다.

 _________   _________  

 

사용자 로그인 기록 로그를 백업하고 백업 파일에서 root의 접속이력을 조회한다.

cp ③ _________   /root/authlog.backup

④ _________  -f /root/authlog.backup

 

 

🎯  답안

① tail -f
② /var/log/secure
③ /var/log/wtmp
④ last root

 

 

 

📝  실시간 모니터링용 명령어

tail -f /var/log/messages messages 파일의 끝부분을 실시간으로 모니터링
while true; do df -h; sleep 5; done df -h 명령어를 5초 주기로 실행 
watch -n 2 -d netstat -tnp netstat 명령의 결과를 2초 주기로 갱신 표시

 

📝   로그인 기록 관련 주요 파일과 명령어

로그인 기록  /var/log/wtmp  명령어:  last
로그인 실패 기록  /var/log/btmp  명령어:  lastb
마지막 로그인 시간  /var/log/lastlog  명령어:  lastlog
현재 로그인 사용자  /var/run/utmp  명령어:  who, w
그 외 로그인 성공/실패 로그  /var/log/secure 로그파일 직접 읽을 수 있음

출처: https://dong-it-engineer.tistory.com/92 [IT기술정보올리는곳:티스토리]

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 

 

 [9 예상문제]

리눅스 시스템 관리자가 일반 사용자(ihdman)에게 일부 시스템 관리 명령을 실행할 수 있는 권한을 부여하려고 한다. 

권한 위임 설정이 완료된 후, 일반 사용자 ihdman가 ihdgirl 계정의 패스워드를 바꿔야한다.

 

# ① _________    

~

root    ALL=(ALL)       ALL

ihdman    ALL=(ALL)       ALL

~

 

# whoami

ihdman

# ② _________ passwd ihdgirl

 

 

 

🎯  답안

① visudo
② sudo

 

 

📝  슈퍼 권한 관련 명령어

visudo  :  /etc/sudoers를 안전하게 편집  (옵션 없음)
sudo  :  root 권한이 필요한 명령 실행 -l : 권한 목록 확인
-u [사용자] : 특정 사용자로 명령 실행
-i : root로 user swtich
sudo systemctl restart httpd  

 

📌 su (switching user) 명령어

su 비밀번호 입력 후 root 계정 전환
su - root의 PATH·HOME 환경까지 로드
su user1 user1 계정으로 전환 (환경은 유지)
su - user1 로그인셸 포함 user1 환경 로드
su -c "systemctl restart sshd" root 명령 실행 후 바로 종료
su -s /bin/bash user2 기본 셸이 bash로 실행됨

 

📌 일반적으로 sudoers 내 기본으로 등록된 wheel 

## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL

그룹 이름 wheel
역할 root 대신 sudo 명령을 사용할 수 있도록 허용
적용 위치 /etc/group, /etc/sudoers
유래 BSD 계열 시스템에서 root 권한을 가진 사용자를 “wheel(바퀴의 중심)”이라고 부르던 데서 유래

 

 

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 [10번 예상문제]

운영 서버 /data 디렉터리를 백업 서버(192.168.10.20)의 /backup 디렉터리로 주기적으로 동기화하고자 한다.
또한, /dev/sdb1 파티션을 XFS 파일시스템으로 사용 중이며, 주기적인 전체 백업을 위해 xfsdump를 사용하려고 한다.

 

다음 명령어의 빈칸을 채우시오.

rsync를 이용한 백업 명령
① _______  ② _______  /data  user@192.168.10.20:/backup

XFS 파일시스템 전체 백업 명령
③ _______  ④ _______ /dev/sdb1 /backup/sdb1.dump

 

 

🎯  답안

① rsync
② -avz
③ xfsdump 또는 dump
④ -f 또는 -0f

 

 

📝  xfsdump와 dump 차이

xfsdump / xfsrestore xfs 파일시스템 
dump / restore ext 파일시스템

 

 

📌  백업 명령어 사용 모음

cpio  표준 입출력을 이용한 백업,복원 활용
find /etc | cpio -ov > etc_backup.cpio   # /etc 백업
cpio -idv < etc_backup.cpio              # 복원
  • -o : 백업 (archive)
  • -i : 복원 (extract)
  • -v : 상세 출력
  • -d : 디렉토리 자동 생성
  • -t : 목록 보기
  • -F : 파일 지정
dump & restore 복원시 restore 명령 사용
dump -0uf /backup/rootfs.dump /dev/sda1   # sda1 전체 백업
cd /restore_dir
restore -rf /backup/rootfs.dump   # 전체 복원
dump
  • 0~9 : 덤프 레벨 (0=전체, 1~9=증분)
  • -u : /etc/dumpdates 업데이트
  • -f : 백업 파일 지정
restore
  • -r : 전체 복원
  • -i : 대화식 복원
  • -x : 특정 파일만 복원
  • -f : 백업 파일 지정
dd 블록단위로 데이터를 복제,백업하는 명령어.
dd if=/dev/sda of=/backup/sda.img bs=1M status=progress   # 디스크 이미지 백업
dd if=/backup/sda.img of=/dev/sda bs=1M                    # 복원
  • if= : 입력 파일
  • of= : 출력 파일
  • bs= : 블록 크기
  • count= : 블록 수
  • status=progress : 진행상황 표시
rsync  원격지의 파일 동기화(복제)관리 프로그램 (rcp 상위호환)
rsync -av /home user@remote:/backup      # SSH로 /home 백업
rsync -av --delete /src/ /dst/           # 정확히 동기화
  • -a : 보존(재귀, 소유권, 권한 등)
  • -v : 상세 출력
  • -z : 압축 전송
  • --delete : 대상에 없는 파일 삭제
  • -e : SSH 사용

    복원시엔 소스, 타겟만 바꿔서 명령어 사용
tar
tar -cvf backup.tar /etc         # /etc를 backup.tar로 백업
tar -xvf backup.tar                # backup.tar 압축 해제
tar -czvf backup.tar.gz /var    # gzip으로 압축 백업
  • -c : 새 아카이브 만들기
  • -x : 아카이브 추출
  • -v : 처리 내용을 출력
  • -f : 아카이브 파일 지정
  • -z : gzip 사용
  • -j : bzip2 사용
  • -C : 작업 디렉토리 지정

출처: https://dong-it-engineer.tistory.com/92 [IT기술정보올리는곳:티스토리]

 

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 [11번 예상문제]

아파치 웹 서버 관리자는 아래 조건에 맞게 httpd.conf 파일을 변경하고, 변경된 설정에 문법적 오류가 없는지 확인하고자 한다.

아래 조건에 맞는 설정 항목 또는 명령어를 ( 괄호 ) 안에 알맞게 기입하시오. (단, 웹 서버의 버전은 2.x 버전을 기준으로 한다.)
■ 조건 (서술식 설명)
• 웹 서비스 포트는 8080을 사용하여 접속을 대기하도록 설정.
• 웹 서버의 도메인명은 포트 번호를 포함하여 http://www.ihd.or.kr:8080으로 설정.
• 웹 서버 관리자의 이메일 주소는 kait@ihd.or.kr로 설정.
• 웹 문서가 위치하는 디렉터리 경로는 /etc/apache/html로 지정.
• 설정 변경 후, 서비스를 시작하지 않고 설정 파일에 문법적 오류가 있는지 검사하는 명령을 사용.


# vi /etc/httpd/conf/httpd.conf
( ① ______
(  ______ ) 
(  ______ )
(  ______ )

# ( ⑤ ______ ) 

 

🎯  답안

(①번부터 ④번은 순서 무관) 

① Listen 8080 
② ServerName http://www.ihd.or.kr:8080 
③ ServerAdmin kait@ihd.or.kr 
④ DocumentRoot “/etc/apache/html” (큰따옴표 사용 유무 무관) 
⑤ /usr/local/apache/bin/httpd -t (apachectl configtest 가능)

 

 

📌 httpd.conf 설정항목들

기본정보 설정  
ServerRoot "/usr/local/apache" Apache의 기본 설치 경로 지정 (보통은 /etc/httpd)
ServerAdmin admin@example.com 서버 관리자 이메일 주소
ServerName www.example.com:80 서버의 도메인명 및 포트 지정
Listen 8080 Apache가 수신할 포트 지정
DocumentRoot "/var/www/html" 웹 문서의 기본 경로 지정
디렉터리 접근 제어  
<Directory "/var/www/html"> 특정 경로 접근제어 블록 시작
AllowOverride All .htaccess 파일 허용 여부
(None, All, AuthConfig, FileInfo, Indexes, Limit, Options)
Require all granted 접근 허용/차단 설정 (all denied, ip, user 등 가능)
로그 설정  
ErrorLog "logs/error_log" 에러 로그 파일 경로 지정
CustomLog "logs/access_log" combined 접속 로그 저장 및 포맷 지정
모듈 및 실행 설정  
LoadModule rewrite_module modules/mod_rewrite.so Apache 모듈 로드
Include conf/extra/httpd-vhosts.conf 외부 설정파일 포함
User apacheGroup apache Apache 프로세스 실행 사용자/그룹 지정
인덱스 및 파일 처리  
DirectoryIndex index.html index.php 기본 인덱스 파일 지정
AddType application/x-httpd-php .php MIME 타입 설정
Options Indexes FollowSymLinks 디렉터리 기능 설정 (Indexes, ExecCGI, FollowSymLinks 등)
가상호스트(VirtualHost)  
<VirtualHost *:80>ServerName www.test.comDocumentRoot /var/www/test</VirtualHost> 여러 사이트를 하나의 서버에서 호스팅할 때 사용
보안 및 SSL 설정  
SSLEngine on SSL 활성화
SSLCertificateFile /etc/pki/tls/certs/server.crt 서버 인증서 파일 경로
SSLCertificateKeyFile /etc/pki/tls/private/server.key 개인키 파일 경로

 

📌  아파치 명령어

설정 구문 점검 apachectl configtest 또는 /usr/local/apache/bin/httpd -t 설정 문법 확인
서비스 시작 systemctl start httpd Apache 서비스 시작
서비스 중지 systemctl stop httpd Apache 서비스 중지
서비스 재시작 systemctl restart httpd 설정 반영 및 재시작
포트 확인 `ss -ntlp grep httpd`

 

📌 AllowOverride 설정과 htaccess의 관계

옵션값 의미 .htaccess에서 허용되는 설정 예시
None .htaccess 파일을 무시함 (보안상 가장 안전) 사용 불가
All .htaccess 내 모든 지시어 허용 Options, FileInfo, AuthConfig, Limit 등 전체
AuthConfig 인증 관련 설정 허용 AuthType, AuthName, Require, AuthUserFile
FileInfo 문서 처리 관련 허용 AddType, AddHandler, ErrorDocument, LanguagePriority
Indexes 디렉터리 인덱스 관련 설정 허용 DirectoryIndex, AddDescription, FancyIndexing
Limit 접근제어(HTTP 메서드 제한) 관련 허용 <Limit>, <LimitExcept> 블록
Options 디렉터리의 기능 제어 허용 Options +ExecCGI, Options +FollowSymLinks 등

 

🧠 .htaccess 설정 문제가 안나오길 기도합니다. htaccess 쓰면 성능저하때문에 안쓴다던데..

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 [12번 예상문제]

시스템 관리자는 아래 조건에 맞게 Samba 서버의 공유 디렉터리 설정을 smb.conf 파일에 추가하고자 한다. 아래 조건에 맞는 설정 항목 또는 설정 값을 빈 칸에 알맞게 기입하시오.
■ 조건 
• 공유 폴더 이름은 web으로 설정하여 윈도우 클라이언트에서 접근할 수 있어야 함.
• 공유 폴더에 대한 설명은 Web Directory로 설정.
• 실제 공유 디렉터리 경로는 /etc/apache/html로 지정.
• 해당 공유에 접근 가능한 사용자는 kaitman과 ihdgirl로 제한.
• 접근 사용자 중 kaitman만 파일 생성 및 삭제를 포함한 쓰기 권한을 가질 수 있도록 설정.

vi /etc/samba/smb.conf

( ① ______
(  ______ )
( ______ )
( ______ )
( ⑤ ______ )

 

🎯  답안

① [web]
② comment = Web Directory (②번부터 ⑤번은 순서 무관)
③ path = /etc/apache/html
④ valid users = kaitman ihdgirl (콤마로 구분 가능)
⑤ write list = kaitman

 

 

 

📌 samba.conf - [global] 섹션 (공통 설정)

workgroup = WORKGROUP 윈도우 네트워크 그룹 이름 지정
server string = Samba Server 서버 설명 문자열 (comment)
netbios name = SAMBA01 윈도우에서 보이는 서버 이름
security = user 인증 방식 (user, share, domain 등)
log file = /var/log/samba/log.%m 로그 파일 위치 지정
map to guest = bad user 존재하지 않는 사용자 접근 시 guest로 매핑

 

📌 samba.conf - [share] 섹션 (여러 사용자용)

[web] 클라이언트에서 접근할 공유 이름
comment = Web Directory 공유 폴더 설명
path = /etc/apache/html 실제 공유할 디렉터리 경로
browseable = yes 네트워크 탐색 시 표시 여부
read only = no 쓰기 가능 여부 (yes=읽기전용)
writable = yes 쓰기 가능 여부 (read only 반대 항목)
valid users = kaitman, ihdgirl 접근 가능한 사용자 목록
invalid users = guest 접근 금지 사용자 지정
write list = kaitman 쓰기 권한이 있는 사용자 지정
create mask = 0644 새로 생성되는 파일의 기본 퍼미션
directory mask = 0755 새 디렉터리 기본 퍼미션
guest ok = no 게스트 접근 허용 여부
force user = nobody 파일 생성 시 강제 사용자 지정
force group = users 파일 생성 시 강제 그룹 지정
available = yes 공유 사용 가능 여부

 

📌 samba.conf - [homes] 섹션 (개인 사용자)

[homes] 사용자 홈 디렉터리 자동 공유
comment = Home Directories 공유 설명
browseable = no 목록 숨김 (개인 폴더 보호 목적)
read only = no 개인 홈 디렉터리 쓰기 허용

 

📌 samba 명령어

testparm smb.conf 문법 검증
systemctl start smb nmb smb/nmb 서비스 시작
systemctl enable smb nmb 부팅 시 자동 실행
smbpasswd -a 사용자명 Samba용 암호 등록
systemctl restart smb 설정 변경 후 반영
smbclient -L localhost -U 사용자명 공유 목록 확인

 

📌 사용자 samba 접속 시나리오

패키지 설치 sudo dnf install cifs-utils samba-client -y
공유 폴더 마운트 smbclient -L //192.168.0.10 -U ihdman
fstab 설정 //192.168.0.10/web  /mnt/web  cifs  username=ihdman,password=패스워드,vers=3.0 0 0

 

 

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 [13번 예상문제]

IH디지털(ihd.or.kr) 은 사내에서 sendmail을 사용해 메일 서비스를 운영 중이다.
요구사항:
- @ihd.org 로 오는 모든 메일을 ihdgirl@ihd.or.kr 계정으로 전달할 것
- sendmail 표준 구성 방식에 따라 virtusertable을 사용해 설정할 것
- virtusertable 설정 후, 실제로 참조되는 DB 파일을 생성할 것

- sendmail 설정을 재적용할 것

빈칸 에 들어갈 알맞은 내용을 작성하시오.

-- virtusertable 파일 위치 확인 및 설정 추가
# vi ( ② _________  )
~
( ③ _________

~

 

-- virtusertable DB 파일 생성
# cd /etc/mail
# (  _________ ) virtusertable ( ⑤  _________ ) ( _________ )

sendmail.mc 파일을 기반으로 sendmail.cf를 재생성한다.

# ( ① _________ ) /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
# systemctl restart sendmail

 

 

🎯  답안

① m4
② /etc/mail/virtusertable
③ @ihd.org  ihdgirl@ihd.or.kr
④ makemap hash
⑤ <

 

 

📌 지난 회차 기출문제

 

제1401회

- 모든 호스트에 대해서 SMTP포트(TCP/25)를 리스닝 하도록 설정한다.
- 192.168.100.xxx 의 모든 ip의 Relay를 허용한다.
# vi /etc/mail/( ① )
DAEMON_OPTIONS ('Port=smtp, Name=MTA') dnl <- 수정
# ( ② ) /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
# vi /etc/mail/access
localhost RELAY
127.0.0.1 RELAY
( ③ ) RELAY

 

① sendmail.mc 
② m4 
③ 192.168.100 

 

제1801회

다음은 특정 계정으로 들어오는 메일을 다른 계정으로 전송되도록 설정하는 과정이다.
조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.
webmaster 계정으로 들어오는 메일은 고객지원센터 소속 계정인 ihduser와 kaituser에게
전달되도록 설정한다. admin 계정으로 들어오는 메일은 /etc/mail_admin 파일에 지정된
사용자들에게 전달되도록 설정한다.
# vi ( ① )
( ② )
( ③ )
# ( ④ )
■ 조건
- ①번은 관련 파일명을 절대 경로로 기입한다.
- ②과 ③번은 관련 설정을 하나씩 기입한다.
- ④번은 설정한 내용이 적용되도록 실행하는 명령어를 기입한다.

 

① /etc/aliases 
② webmaster: ihduser, kaituser 
③ admin::include:/etc/mail_admin 
④ newaliases 또는 sendmail -bi 

 

 

제1901회

하나의 메일 서버에 여러 도메인을 사용하는 환경에서 동일한 메일 계정을 요구받아 관련 설정을 하는 과정이다. 조건에 맞게 ( 괄호 ) 안에 알맞은 내용을 적으시오.
가. linux.com 도메인의 webmaster 계정은 ihduser에게 전달되도록 설정하고, windows.com 도메인의 webmaster 계정은 kaituser에게 전달되도록 설정한다.
# vi ( ① ) ( ② ) ( ③ )
나. 수정된 내용을 반영하는 makemap 명령어를 기술한다. # ( ④ )
■ 조건
- ①번은 관련 파일명을 절대 경로로 기재한다.
- ②과 ③번은 관련 설정을 하나씩 기재한다. (순서 무관)
- ④번은 설정한 내용이 적용되도록 실행하는 명령어를 한 번에 기재한다.

 

① routers 192.168.0.1 
② subnet-mask 255.255.255.0 
③ domain-name “example.com” 
④ domain-name-servers 192.168.1.1 

 

 

 

🧠 힘이 딸려서인지 sendmail까지 정리를 할 수 가 없다. 기본 설정과 가상화 기준으로만 보는게 좋을 듯.

📝 나올법 한거

 m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 

 [14번 예상문제]

한 기관에서 IP 192.168.5.13 을 사용하는 웹서버의 도메인 이름을 kait.or.kr 로 설정하려고 한다.
해당 서버의 역방향 조회(PTR 레코드)를 위해 reverse zone 파일을 구성해야 한다.
다음 조건에 따라 역방향 영역 파일(/var/named/xxx.rev) 을 작성하시오.
네트워크 주소는 192.168.5.0 대역이며,
named.conf 파일에는 zone "①" 으로 정의한다.
이 영역은 ② 영역으로 설정하며,
SOA의 MNAME은 ③, RNAME은 ④ 으로 지정한다.
IP 192.168.5.13 에 해당하는 PTR 레코드는 ⑤ 로 설정한다.

다음은 /var/named/192.168.5.rev 파일의 예시이다.
(①~⑤번을 조건에 따라 알맞게 채워 넣으시오.)

 

 

# vi /etc/named.conf

zone "  _________ " {
    type  _________ ;
    file "/var/named/192.168.5.rev";
};

 

# vi  /var/named/192.168.5.rev
$TTL 86400
@   IN  SOA   _________  _________ (
        2025110701 ; serial
        3600       ; refresh
        900        ; retry
        604800     ; expire
        86400 )    ; minimum
     IN  NS   ns.kait.or.kr.
 _________


 

🎯  답안

① 5.168.192.in-addr.arpa 또는 13.5.168.192.in-addr.arpa 
② master 
③ ns.kait.or.kr. 
④ ihdman.kait.or.kr. 
⑤ 13 PTR kait.or.kr. (①번 설정에 따라  PTR kait.or.kr. )

 

 

📝 named.conf 설명과 예시

directory 존(zone) 파일이 저장될 기본 디렉터리 directory "/var/named";
listen-on port 53 { ... }; DNS 서버가 수신할 네트워크 인터페이스 지정 listen-on port 53 { any; };
listen-on-v6 port 53 { ... }; IPv6용 포트 리슨 설정 listen-on-v6 port 53 { none; };
recursion yes/no; 재귀 질의 허용 여부 recursion yes;
allow-query { ... }; 질의 허용할 클라이언트 범위 지정 allow-query { any; };
allow-recursion { ... }; 재귀 질의를 허용할 IP대역 지정 allow-recursion { 192.168.0.0/16; };
allow-transfer { ... }; 존 파일 복제(전송) 허용 IP 지정. 슬레이브IP 지정 allow-transfer { 203.247.60.0/24; };
allow-update { ... }; DDNS(dynamic update) 허용 대상 지정 allow-update { none; };
dnssec-enable yes/no; DNSSEC 기능 사용 여부 dnssec-enable no;
dnssec-validation yes/no; DNSSEC 검증 수행 여부 dnssec-validation no;
pid-file 프로세스 ID 저장 파일 지정 pid-file "/run/named/named.pid";
dump-file zone dump 저장 위치 dump-file "/var/named/data/cache_dump.db";
statistics-file 통계 데이터 저장 위치 statistics-file "/var/named/data/named_stats.txt";
querylog yes/no; DNS 질의 로그 활성화 여부 querylog yes;
forward only/first; 포워딩 방식 지정 forward only;
forwarders { ... }; 포워더 DNS 서버 지정 forwarders { 8.8.8.8; 1.1.1.1; };

 

 * named.conf의 zone 영역

루트 힌트 zone "." IN { type hint; file "named.ca"; }; 루트 DNS 정보
정방향 존 zone "qwer.com" IN { type master; file "qwer.com.zone"; }; 도메인→IP. 기본 디렉토리 참조.
역방향 존 zone "0.168.192.in-addr.arpa" IN { type master; file "192.168.0.zone"; }; IP→도메인
슬레이브 존 zone "qwer.com" IN { type slave; masters { 192.168.0.10; }; file "slaves/example.com.zone"; }; Slave 서버용 존

 

 * acl로 라벨링(또는 alias)처럼 사용할 수 있음

acl "internal_net" { 192.168.0.0/16; 127.0.0.1; };
acl "trusted_slaves" { 203.247.60.0/24; };
acl로 값을 특정 이름으로 정의
options {
    allow-query { internal_net; };
    allow-transfer { trusted_slaves; };
}
정의한 네이밍으로 값 입력. 아래와 동일한 설정이 됨.
  allow-query { 192.168.0.0/16; 127.0.0.1; };
  allow-transfer { 203.247.60.0/24; };

 

 

📝 레코드 설명 예시

vi example.zone 보통 주 도메인 이름으로 파일명 작성
$TTL 1D
@       IN SOA  ns1.qwer.com. admin.qwer.com. (
                2025102201 ; Serial
                1H         ; Refresh
                10M        ; Retry
                1W         ; Expire
                1D )       ; Minimum TTL
;
          IN  NS         ns1.qwer.com.
          IN  NS          ns2.qwer.com.
ns1    IN   A           192.168.0.10
ns2    IN   A           192.168.0.11
www  IN   A           192.168.0.20
mail   IN   A           192.168.0.30
@      IN   MX  10  mail.qwer.com.
ftp      IN  CNAME www.qwer.com.
zone파일 예시
url 뒤에는 "." 붙여야한다


@ IN SOA ns1.qwer.com. admin.qwer.com. (
        2025102201 ; Serial        ← 변경 시 증가
        1H         ; Refresh       ← Slave가 갱신 요청 간격
        10M        ; Retry         ← Slave에서 갱신 실패 시 재시도 간격
        1W         ; Expire        ← Slave 데이터 만료 시간
        1D )       ; Minimum TTL   ← 캐시 유지시간
";" 로 끝난다.
ns1.example.com.: 주 DNS서버 이름
admin.example.com.: 관리자 이메일
Serial: zone 파일 버전(보통 날짜+순번: YYYYMMDDnn)
$TTL 모든 레코드의 기본 TTL(Time To Live) $TTL 1D → 1일
@ 현재 zone의 도메인 이름 (qwer.com.)을 의미 @ IN MX 10 mail.qwer.com.
Serial zone파일 버전. Slave에서 확인하고 설정 복사해감. 2025102801
(보통 현재시간으로 작성)
IN Internet 클래스 (거의 항상 IN) IN A 192.168.0.20
SOA 권한 시작 레코드, 존의 관리자 정보 포함 아래에 상세
NS 네임서버 지정 IN NS ns1.qwer.com.
A 호스트 이름 → IPv4 주소 매핑 www IN A 192.168.0.20
AAAA 호스트 이름 → IPv6 주소 매핑 www IN AAAA 2001:db8::1
MX 메일 서버 지정 (숫자가 낮을수록 우선순위 높음) IN MX 10 mail.qwer.com.
CNAME 별칭(alias) 지정 ftp IN CNAME www.qwer.com.
TXT 텍스트 정보 (SPF, 인증 등) @ IN TXT "v=spf1 include:_spf.google.com ~all"

 

📝 역방향 레코드 설명 예시

named.conf에 zone 명시
zone "0.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.0.zone";
};
"0.168.192.in-addr.arpa"
→ IP 192.168.0.x 대역을 의미


file "192.168.0.zone"
→ 해당 대역의 PTR 매핑정보가 들어 있는 파일명
vi 192.168.0.zone
$TTL 1D
@       IN SOA  ns1.qwer.com. admin.qwer.com. (
                2025102201 ; Serial
                1H         ; Refresh
                10M        ; Retry
                1W         ; Expire
                1D )       ; Minimum TTL
;
          IN NS   ns1.qwer.com.
10      IN PTR  ns1.qwer.com.
20      IN PTR  www.qwer.com.
30      IN PTR  mail.qwer.com.
$TTL 기본 TTL 설정 $TTL 1D
SOA 권한 시작(정방향과 동일) IN SOA ns1.qwer.com. admin.qwer.com.
NS 해당 네트워크의 네임서버 지정 IN NS ns1.qwer.com.
PTR IP 주소 → 도메인 이름 매핑 10 IN PTR ns1.qwer.com. 역방향은 모두 PTR 레코드다.

 

 

 

📌 추가 팁: DNS 관련 명령어 사용 예제

 

DNS 서비스 관리 명령어

DNS 데몬 실행 명령 (보통 systemd로 관리) systemctl start named
설정 변경 후 재시작 systemctl restart named
동작 상태 확인 systemctl status named
서비스 재시작 없이 설정 다시 읽기 rndc reload
BIND 상태 정보 출력 rndc status
캐시 데이터 비우기 rndc flush
named.conf 문법 검사 named-checkconf /etc/named.conf
특정 존 파일 구문 검사 named-checkzone qwer.com /var/named/qwer.com.zone
역방향 존 검사 named-checkzone 0.168.192.in-addr.arpa /var/named/192.168.0.zone

 

DNS 확인 명령어

기본 질의 dig www.qwer.com 기본 A 레코드 조회
특정 DNS서버 지정 dig @8.8.8.8 www.qwer.com 8.8.8.8로 직접 질의
NS 레코드 조회 dig qwer.com NS 네임서버 목록 조회
MX 레코드 조회 dig qwer.com MX 메일서버 확인
PTR 조회 (역방향) dig -x 192.168.0.10 IP → 도메인 변환
TTL 확인 dig www.qwer.com +ttlunits TTL 단위 포함 출력
캐시 테스트 dig www.qwer.com +trace 루트→TLD→Authoritative 단계 추적
기본 질의 nslookup www.qwer.com 간단히 확인
특정 서버 지정 nslookup www.qwer.com 8.8.8.8 8.8.8.8에 질의
역방향 질의 nslookup 192.168.0.10 IP → 도메인 변환


📌 추가 팁: 리눅스 서버에 DNS 사용설정

vi /etc/resolv.conf 구성
nameserver 192.168.0.10
nameserver 8.8.8.8
search corp.qwer.com localdomain
options timeout:2 attempts:3 rotate
- nameserver는 위부터 순서대로 질의 시도
- search corp.com localdomain → ping web 입력시 ping web.qwer.com 으로 자동 보정
- options timeout:2 attempts:3 rotate → 2초 안에 응답 없으면 다음 서버로 최대 3회 시도, 순환 질의

 

출처: https://dong-it-engineer.tistory.com/92 [IT기술정보올리는곳:티스토리]

 

 

 

--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 [15번 예상문제]

 _________     _________    _________     _________  

 

IHD 본사에서는 192.168.12.0/24 대역을 사용하는 내부 네트워크에 DHCP 서버를 구축하려고 한다.
요구 조건은 다음과 같다.
이 서브넷의 게이트웨이는 192.168.12.254 이다.
클라이언트는 DHCP를 통해 도메인 이름 ihd.or.kr 과 DNS 서버 192.168.5.13 정보를 함께 할당받아야 한다.
기본 임대 시간(default lease time)은 7200초로 설정한다.
IP 주소 풀은 BOOTP 클라이언트까지 고려하여 dynamic-bootp 방식의 range를 사용하며, 192.168.12.100 ~ 192.168.12.200 구간을 할당한다.
위 조건을 만족하도록 /etc/dhcp/dhcpd.conf에 아래와 같이 설정하려고 할 때, 밑줄에 들어갈 알맞은 설정을 쓰시오.
(②번부터 ④번은 서로 순서 무관)

subnet 192.168.12.0 netmask 255.255.255.0 {
    ① ________________________________ 192.168.12.100 192.168.12.200;
    option ② __________________________;
    option ③ __________________________;
    option ④ __________________________;
    ⑤ __________________________;
}

 

 

🎯  답안

① range dynamic-bootp 
② routers 192.168.12.254; (②번부터 ④번은 순서 무관) 
③ domain-name-servers 192.168.5.13; 
④ domain-name “ihd.or.kr”; 
⑤ default-lease-time 7200; 

 

 

📝  

📌 

🧠

 

 


--------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------

 

 [16번 예상문제]

사내 내부망을 외부 인터넷에 연결하기 위해 NAT 기능을 설정하려 한다.

현재 NAT방화벽에서 내부로 들어오는 규칙을 확인하고, 외부로 나가는 규칙을 모두 삭제한다.

그리고 NAT테이블의 외부로 나가는 인터페이스를 eth0, 내부에서 발생한 패킷을 공인IP로 변환하도록 설정해야 한다.


아래의 빈칸을 채워 올바른 명령어를 완성하시오.

 

# 조회
 iptables ( ① _________  ) 

# 초기화
 iptables (  _________ ) 

# 규칙 설정
 iptables (  _________  ) (  _________  ) ( ⑤ _________  ) 

 

 

🎯  답안

① -t nat -L PREROUTING 
② -t nat -F POSTROUTING 
③ -A POSTROUTING 
④ -o eth0 
⑤ -j MASQUERADE (③번부터 ⑤번은 순서 무관) 

 

 

 

📝 nat 테이블의 Source, Destination 구분

* PREROUTING 체인 (Destination NAT, DNAT): 패킷이 라우팅되기 전에 목적지 주소를 변경함 (주로 포트 포워딩)

   - > 패킷 들어올 때
* POSTROUTING 체인 (Source NAT, SNAT): 패킷이 라우팅을 마친 후 출발지 주소를 변경함 (주로 내부망의 공인 IP 공유)

   - > 패킷 나갈 때

* 마스커레이딩: 내부 사설IP들이 외부로 나갈 때 동적 공인IP를 달고 나가는 것.

📌 iptable 규칙 옵션

iptables [테이블옵션] [동작규칙] [체인] [조건] [타깃] 

 테이블 옵션 (-t)
# 어떤 테이블을 다룰지 지정 (생략 시 기본은 filter)
-t filter, -t nat

 동작 규칙
# 추가, 삽입, 삭제, 초기화(전체삭제), 조회, 정책설정
-A, -I, -D, -F, -L, -P

 체인 (CHAIN)
# 패킷이 통과하는 경로 단계 지정
filter테이블 - INPUT, OUTPUT, FORWARD
nat테이블 - PREROUTING, POSTROUTING

 조건 (조건절)
# 프로토콜, 출발지ip, 목적지ip, 출발지port, 목적지port, 입력 인터페이스, 출력 인터페이스
-p tcp, -s 10.10.10.1, -d 10.20.20.2, --sport 8088, --dport 8090, -i eth0, -o eth1

 타깃 (-j)  # “점프(jump)하여 수행할 동작을 선택한다”
# 규칙이 일치했을 때 수행할 동작 지정. 허용, 폐기(패킷버림), 거절(거부메시지보냄), 로그
-j ACCEPT, -j DROP, -j REJECT, -j LOG


## forward체인의 용도: 프록시 시스템의 내외부 트래픽의 라우팅
1) 패킷이 들어옴 → PREROUTING (nat/mangle)
2) 목적지 판단 → 로컬이면 INPUT, 외부면 FORWARD
3) 전송 후 → POSTROUTING (nat/mangle)
# IN, OUT 변환
iptables -A FORWARD -s 192.168.0.0/24 -d 8.8.8.8 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

 

📌 iptable NAT 테이블

# nat 테이블 규칙 확인
iptables -t nat -L

# 목적지에 관한 포트 포워딩 (DNAT)
iptables -t nat -A PREROUTING -j DNAT 

# 포트 포워딩 (DNAT - 외부 8080 → 내부 서버 80)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

# 내부사용자가 DNS를 사용할 때, 8.8.8.8로 포트 포워딩
iptables -t nat -A PREROUTING -p udp -s 192.168.1.50 --dport 53 -j DNAT --to-destination 8.8.8.8

# 출발지에 관한 포트 포워딩 (SNAT)
iptables -t nat -A POSTROUTING -j SNAT

# eth0 인터페이스로 들어오는 모든 TCP 트래픽을 내부 서버로 포워딩합니다. (인터페이스를 명시하여 규칙 적용 범위를 제한)
iptables -t nat -A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 192.168.1.101

# 내부에서 외부 IP, 특정 포트(3306)로 접속을 시도할 때, 내부의 다른 포트(3307)로 리다이렉트합니다. (개발 환경에서 내부 서비스 포트를 변경할 때 유용) (e.g. 80 try를 443으로 변경)
iptables -t nat -A OUTPUT -d 203.0.113.10 -p tcp --dport 3306 -j DNAT --to-destination 127.0.0.1:3307

# 내부 서버에서 나가는 모든 트래픽의 출발지 IP 주소를 고정된 공인 IP로 변경합니다.
iptables -t nat -A POSTROUTING -s 192.168.1.200 -j SNAT --to-source 203.0.113.5

# 내부 서버에서 나가는 모든 트래픽의 출발지 IP 주소를 동적 공인 IP 주소로 변경합니다. (공유기 역할 시 가장 많이 사용)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

출처: https://dong-it-engineer.tistory.com/92 [IT기술정보올리는곳:티스토리]

 

 

🧠

 

 

 

 

 

 

 

 


계속 수정 보완 중



 

728x90