RH134 4일차

권수한·2023년 7월 3일

RH134

목록 보기
4/4

9. 네트워크 연결 스토리지 엑세스

네트워크 연결 스토리지 자동 마운트

자동 마운터는 파일 시스템 및 NFS 내보내기를 온디맨드로 자동 마운트하고, 마운트된 리소스가 현재 더 이상 사용되지 않는 경우 파일 시스템 및 NFS 내보내기를 자동으로 마운트 해제하는 (autofs)서비스 이다.

자동 마운터의 구성 파일은 /etc/fstab 항목과 유사한 방식으로 파일 시스템 마운트 정보로 채워진다.

자동 마운터의 장점은 파일 시스템을 더 이상 사용하지 않을 때마다 마운트를 해제하여 파일 시스템이 열려있는 동안 발생하는 예기치 않은 손상으로부터 보호한다는 점이다. 또한 파일 시스템을 다시 마운트하면 시스템 부팅 중 몇 달 전에 마운트한 구성을 여전히 사용할 수 있다.

자동 마운터 서비스 구성

먼저 autofs 및 nfs-utils 패키지를 설치해야한다.

dnf install -y autofs nfs-utils

마스터 맵 생성

마스터 맵 파일은 /etc/auto.master.d/경로에 추가한다. 파일명은 끝에 .autofs을 꼭 붙여줘야한다.
마스터 맵 파일은 마운트 해올 파일의 경로와 마운트 해올 디렉터리의 세부 사항이 포함되있는 파일 경로를 적는다.

ex)
vim /etc/auto.matser.d/demo.autofs
	/shares	/etc/auto.demo
    => /shares 디렉터리에서 마운트를 받아온다.
    => /etc/auto.demo 파일에는 마운트 세부 사항이 있다.

=> 마스터 맵 파일의 이름은 대부분 임의적이며, 하위 시스템의 경우 인식할 수 있도록 확장자가 .autofs여야 한다.

간접 맵 생성

간접 맵 파일에는 자동 마운트에 대한 마운트 지점, 마운트 옵션, 마운트할 소스 위치 등을 적습니다.

항목의 형식은 mount포인트, mount옵션, source위치 입니다.

ex)
vim /etc/auto.demo
	/work -rw,sync serverb:/shares/work
    
=> 매핑 파일 이름 지정 규칙은 /etc/auto.name이며, 여기서 name에는 맵 콘텐츠가 반영된다.
=> 항목의 형식은 mount point, mount options, source location이다.
=> 즉, 마스터 맵의 내용과 합치면, /shares/work 디렉터리에 있는 파일들을 읽기,쓰기 권한을 가진채로 내보내준다.

간접 맵의 와일드 카드

NFS 서버가 디렉터리 내에서 여러 하위 디렉터리를 내보내는 경우 자동 마운터가 단일 매핑 항목을 사용하여 그 중 임의의 하위 디렉터리에 엑세스하도록 구성할 수 있다.

ex)
vim /etc/auto.demo
	work -rw,sync serverb:/shares/work
	* -rw,sync	serverb:/shares/&

직접 맵 생성

직접 맵은 NFS 내보내기를 절대 경로 마운트 지점에 매핑하는데 사용된다. 직접 맵 파일은 하나만 필요하며 여러 개의 직접 맵을 포함할 수 있다.

자동 마운터 서비스 시작

systemctl enable --now autofs

10. 부팅 프로세스 제어

전원 끄기 및 재부팅

systemctl 명령을 사용하면 명령줄에서 실행 중인 시스템 전원을 끄거나 재부팅 할 수 있다.

  • systemctl poweroff 명령은 실행 중인 모든 서비스를 중단하고 모든 파일 시스템을 마운트 해제한 다음 시스템 전원을 끈다.
  • systemctl reboot 명령은 실행 중인 모든 서비스를 중단하고 모든 파일 시스템을 마운트 해제한 후 시스템을 재부팅한다.
  • 이러한 명령의 짧은 버전인 poweroff,reboot가 있다.

systemd 타겟 선택

일반적으로 사용되는 대상

타겟목적
graphical.target이 대상은 멀티 유저를 지원하고, 그래픽 및 텍스트 기반 로그인을 제공합니다
multi-user.target이 대상은 멀티 유저를 지원하고, 텍스트 기반 로그인을 제공합니다
rescue.target이 대상은 시스템을 복구할 수 있는 단일 사용자 시스템을 제공합니다.
emergency.target이 대상은 rescue.target 장치가 시작되지 않을 때 시스템을 복구하기 위해 가장 최소한의 시스템을 시작합니다.

아래 그림처럼 명령을 사용하면 종속되는 target 유닛을 확인할 수 있다.

런타임 시 타겟 선택

실행 중인 시스템에서 systemctl isolate 명령을 사용하여 다른 타겟으로 전환할 수 있다.

ex) 
systemctl isolate multi-user.target

해당하는 타겟을 격리하면 해당 대상(및 해당 종속성)에서 요구하지 않는 모든 서비스가 중지되며, 아직 시작되지 않은 모든 필수 서비스가 시작된다.

기본 타겟 설정

시스템이 시작되면 default.target 대상을 활성화 한다.

default.target을 확인하려면 systemctl get-default 명령을 사용하면 된다.
default.target을 변경하려면 systemctl set-default <target.name> 명령을 사용하면 된다.

부팅 시 다른 타겟 선택

부팅 시 다른 대상을 선택하려면 부트 로더에서 커널 명령줄에 systemd.unit=target.target 옵션을 추가하면 된다.

부트로드에서 다른 타겟 선택하기
1. 시스템을 부팅 또는 재부팅한다.
2. 부팅 페이지에서 Enter를 제외한 임의의 키를 눌러 부트 로더 메뉴 카운트다운을 중단한다.
3. 커서를 시작할 커널 항목으로 이동
4. e를 눌러 현재 항목 편집
5. 커서를 linux로 시작하는 행으로 이동. 이 줄은 커널 명령줄이다.
6. systemd.unit=target.target 를 추가해준다.
7. Ctrl+x 를 눌러 이러한 변경 사항을 적용하여 부팅한다.

루트 암호 재설정

부트 로더 설정
1. 시스템 재부팅
2. Enter 키를 제외한 임의의 키를 눌러서 부트 로더 카운터 중단
3. 커서를 복구 커널(이름에 rescue라는 단어가 있는 항목)으로 이동하여 부팅
4. e를 눌러 선택한 항목을 편집한다.
5. 커서를 커널 명령줄(linux로 시작하는 행)으로 이동한다.
6. rd.break를 추가한다. 이 옵션을 사용하면 initramfs 이미지에서 실제 시스템으로 제어 권한이 이동하기 직전에 중단된다.
7. ctrl+x 를 눌러 변경 사항을 적용하여 부팅한다.

이때 시스템에 root 쉘이 있고 디스크의 루트 파일 시스템은 /syroot에 읽기 전용으로 마운트된다.

root 암호 재설정

  1. /syroot를 읽기,쓰기 설정으로 다시 마운트 한다.
mount -o remount,rw /sysroot
  1. /sysroot가 파일 시스템 트리의 루트로 간주되는 chroot 환경으로 전환한다.
chroot /sysroot
  1. 새 root 암호 설정
passwd root
  1. 레이블이 지정되지 않은 모든 파일(이 시점에서는 /etc/shadow 포함)에 부팅 중 다시 레이블이 지정되도록 한다.
touch /.autorelabel
  1. exit를 두 번 입력한다. 첫 번째는 chroot 환경을 종료하고, 두 번째는 initramfs 디버그 쉘을 종료한다.

로그 검사

부팅에 실패하면 로그를 확인하는 것이 좋다. 로그 확인은 journalctl 도구를 사용하여 검사할 수 있다.

  • 시스템 저널은 /run/log/journal 디렉토리에 보관되고, 시스템이 재부팅되면 저널이 삭제된다.
  • 부팅 후에도 지속적으로 /var/log/journal 디렉터리에 로그를 저장하려면 /etc/systmd/journald.conf 파일에서 Storage 매개 변수를 persistent로 설정해야한다.
  • 설정을 변경 후에는 재시작 해주어야한다.
systemctl restart systemd-journald.service
  • 이전 부팅의 로그를 검사하려면 journalctl 명령에 -b 옵션을 사용한다.
ex) journalctl -b -1 -p err
=> 이전 부팅에서 오류 또는 그 이상의 심각한 문제로 평가된 모든 메시지를 표시한다.

systemd 부팅 문제 해결

RHEL 8 이후 버전에서는 부팅 시 서비스 시작 문제를 해결 할 수 있는 debug-shell툴을 제공한다.

디버그 쉘

debug-shell 서비스를 활성화하면 부팅 시퀀스 중 시작 단계에서 TTY9(Ctrl+Alt+F9)에 root 쉘이 생성된다. 운영 체제가 부팅되는 동안 관리자가 시스템을 디버깅 할 수 있도록 이 쉘은 자동으로 root로 로그인 된다.

경고
디버깅을 마치면 debug-shell.service 서비스를 비활성화한다. 그렇지 않으면 인증 되지 않은 root 쉘이 모든 사용자에게 열린 상태로 유지된다.

디버그 쉘 사용법
1. debug-shell 서비스 활성화

systemctl enable debug-shell.service --now
  1. 시스템 재부팅
  2. Enter 키를 제외한 임의의 키를 눌러서 부트 로더 카운트 다운 중단
  3. e를 눌러 선택한 항목을 편집
  4. 커서를 커널 명령줄(linux로 시작하는 행)으로 이동
  5. systemd.debug-shell을 추가 이 매개 변수를 사용하면 시스템이 디버그 쉘로 부팅된다.
  6. Ctrl+x를 눌러 변경 사항을 적용하여 부팅한다.

부팅 시 파일 시스템 문제 복구

부팅 중 systemd 서비스는 /etc/fstab 파일에 정의된 영구 파일 시스템을 마운트한다.

그런데, /etc/fstab 파일의 오류 또는 손상된 파일 시스템은 부팅 프로세스가 완료되지 않는다.

따라서 이런 경우에 대처하는 방법을 알아보겠습니다.

/etc/fstab 오류

  1. 부팅 중 e를 눌러 커널 명령줄로 가서 linux 시작하는 행에 systemd.unit=emergency.target 추가
  2. 긴급 모드로 로그인(root 비밀번호 입력)
  3. mount -a 명령을 입력하여 문제되는 마운트 확인
  4. mount -o remount,rw / 명령을 입력하여 루트 파일 시스템을 읽기/쓰기 모드로 다시 마운트
  5. /etc/fstab 파일을 vi 편집기로 열어 잘못된 줄을 제거하거나 수정해준다.
  6. systemctl daemon-reload 명령으로 systemd 데몬을 다시 로드
  7. mount -a 명령을 입력하여 모든 마운트가 올바른지 확인
  8. systemctl reboot

11. 네트워크 보안 관리

Linux 커널은 패킷 필터링, 네트워크 주소 변환, 포트 변환과 같은 네트워크 트래픽 작업에 필요한 netfilter 프레임워크를 제공한다.

nftables 프레임워크

nftables 패킷 분류 프레임워크는 netfilter 프레임워크를 기반으로 빌드되어 네트워크 트래픽에 방화벽 규칙을 적용한다.

firewalld 서비스

firewalld 서비스는 동적 방화벽 관리자이며 nftables 프레임워크에 권장되는 프론트엔드이다.

firewalld 서비스는 네트워크 트래픽을 영역으로 분류하여 방화벽 관리를 간소화한다. 할당된 네트워크 패킷 영역은 패킷의 소스 IP 주소 또는 들어오는 네트워크 인터페이스와 같은 기준에 따라 다르다. 각 영역에는 열려 있거나 닫혀 있는 포트 및 서비스의 자체 목록이 있다.

사전 정의된 영역

firewalld 서비스는 사전에 정의된 영역을 사용한다.

사전 정의 서비스

firewalld 서비스에는 방화벽 규칙 설정을 간소화하기 위해 일반 서비스에 대한 사전 정의된 구성이 포함되어있다. 예를 들면 NFS 서버의 관련 포트를 조사하는 대신 사전 정의된 nfs 구성을 사용하여 올바른 포트 및 프로토콜에 대한 규칙을 생성한다.

=> 아래는 기본적으로 방화벽이 열려있는 서비스

명령줄에서 방화벽 구성


SELinux 포트 레이블 지정 제어

SELinux 포트 레이블 지정

SELinux는 파일 컨텍스트 및 프로세스 유형 레이블 지정 외에도 SELinux 컨텍스트를 사용하여 네트워크 포트에 레이블을 지정한다. SELinux는 네트워크 포트에 레이블을 지정하고 서비스의 타겟 정책에 규칙을 포함하여 네트워크 엑세스를 제어한다.

SELinux 포트 레이블 지정 관리

새 포트 레이블을 할당하거나, 포트 레이블을 제거하거나, 기존 포트 레이블을 수정하려면 semanage 명령어를 사용한다.

semanage port -l
=> 현재 포트 레이블 할당을 확인하는 명령어

semanage port -a -t port_label -p tcp|udp PORTNUMBER
=> 여기서 -a 옵션은 새 포트 레이블을 추가
=> -t 옵션은 유형을 추가
=> -p 옵션은 프로토콜을 뜻한다.
=> -C 옵션은 기본 정책에 대한 변경 사항을 확인할 때 사용한다.
=> -d 옵션은 포트 레이블을 삭제할 때 사용

grep으로 특정한 서비스를 잡아서 확인할 수 도 있다.

새로운 포트 추가 후 변경 사항 확인

포트 삭제 후 확인

0개의 댓글