SELinux (Security-Enhanced Linux)
리눅스의 보안 정책을 강화하기 위해 추가된 보안 모듈
기본적인 파일 권한(chmod, chown)과 달리, 프로세스 네트워크 파일 등에 대한 세밀한 접근 제어를 가능하게 한다.
즉, 추가적인 보안 정책을 적용해 루트 사용자도 무작정 접근하지 못하도록 차단한다.
- SELinux가 없으면
root 권한이 있는 사용자는 모든 파일과 시스템 설정을 변경할 수 있다.
특정 프로세스(Apache, Nginx 등)가 서버의 다른 중요한 파일을 건드릴 수 있다. - SELinux가 있으면
root라도 보안 정책에 의해 차단될 수 있다.
서버가 해킹당해도 제한된 영역에서만 활동 가능하다.
주요 특징
- Madatory Access Control (MAC, 강제 접근 제어)
파일/프로세스/네트워크의 접근 권한을 정책(Policy) 기반으로 강제 제어
일반적인 chmod 권한을 뛰어넘는 추가적인 보안 계층 - Role-Based Access Control (RBAC, 역할 기반 접근 제어)
사용자의 역할(Role)을 기반으로 접근 권한을 부여 - Multi-Level Security (MLS, 다중 보안 레벨)
군사 보안 모델처럼 여러 보안 등급(기밀/비기밀 등)을 지원
3가지 모드
- Enforcing (강제 적용 모드)
SELinux 보안 정책이 강제 적용된다.
허용되지 않은 액세스는 로그기록 + 차단
운영환경에서 권장된다.
setenforce 1
- Permissive (허용 모드)
보안 정책을 차단하되, 차단하지 않고 로그만 기록한다.
테스트 및 디버깅에 유용하다.
setenforce 0
- Disabled (비활성화)
SELinux 완전히 비활성화
보안 정책을 전혀 적용하지 않는다.
/etc/selinux/config 파일에서 설정 변경 후 재부팅 필요
# 파일 접근 후 값 변경
sudo vi /etc/selinux/config
SELINUX=disabled
# 재부팅
reboot
SELinux 상태 확인 및 변경
- 현재 상태 확인
sestatus
enabled 이면 활성화된 것
- SELinux 모드 변경
# 일시적으로 변경 (reboot 후 원래 상태로 돌아옴)
setenforcce 0 # Permissive 모드
setenforce 1 # Enforcing 모드
# 영구적으로 변경 (/etc/selinux/config 수정)
sudo vi /etc/selinux/config
SELINUX=enforcing # permissive, disabled로 변경 가능
# 재부팅
sudo reboot
SELinux 보안 컨텍스트
각 파일, 프로세스 ,네트워크 포트에 대해 보안 컨텍스트를 설정
- 파일의 SELinux 컨텍스트 확인
ls -Z /var/www/html
필드
system_u : SELinux 사용자
object_r : 역할
- 프로세스의 SELinux 컨텍스트 확인
ps auxZ | grep httpd
SELinux가 차단할 때 해결방법
특정 접근 차단 시 로그 분석 후 허용 정책 설정하기
- SELinux 로그 확인
sudo cat /var/log/audit/audit.log | grep AVC
- SELinux 권한 설정 변경
# 방법 1 - 해당 파일의 SELinux 컨텍스트 변경 - nginx가 /var/www/html/index.html에 쓰기 가능하도록 변경
sudo chcon -t httpd_sys_rw_context_t /var/www/html/index.html
# 방법 2 - SELinux 컨텍스트를 기본값으로 복원
sudo restorecon -Rv /var/www/html
- SELinux Boolean 값 변경
어떤 서비스의 특정 기능이 차단되었을 때, Boolean 값을 변경하여 해결 가능
# 현재 SELinux Boolean 값 목록 확인
getsebool -a
# 특정 Boolean 값 활성화 (httpd가 네트워크에 연결할 수 있도록 설정) - -P옵션 통해 재부팅 후에도 설정 유지
sudo setsebool -P httpd_can_network_connect on
- 포트 허용
# 예) - nignx가 8080 포트 사용하도록 설정
sudo semanage port -a -t http_port_t -p tcp 8080
리눅스 스토리지 관리
- Local Storage (로컬 저장소)
개별 서버에 직접 연결된 디스크 (HDD, SSD)
성능이 좋지만 확장성이 떨어진다.
예) 노트북, 데스크톱, 개별 서버의 내장 디스크(/dev/sda, /dev/nvme0n1) - SAN (Storage Area Network)
고속 전용 네트워크를 통해 연결된 저장소 시스템
데이터센터에서 서버간 공유 가능
주로 기업용 시스템에서 사용됨 - NAS (Network Attached Storage)
네트워크를 통해 여러 장치가 공유하는 파일 스토리지 시스템
여러 사용자가 접근할 수 있다.
예) Synology NAS, NFS(Network File System), Samba
디스크 파티션 관리
- 디스크 및 파티션 확인
# 현재 디스크 사용량 확인 (df) - 디스크 용량과 마운트 된 위치 확인
df -h
# 현재 디스크 목록 확인 (fdisk)
sudo fdisk -l
- 새 디스크 추가 및 파티션 생성
# 디스크 인식 확인 - 새 디스크 등이 표시되는지 확인
lsblk
# 새 파티션 생성 (fdisk)
sudo fdisk /dev/sdbc
n: 새 파티션 생성
p: Primary 선택
1 : 첫번째 파티션
크기 입력 : +20G 등
w: 저장 후 종료
# 파일 시스템 생성 (mkfs) - ext4 파일 시스템 생성
sudo mkfs.ext4 /dev/sdb1
# 마운트 및 확인
sudo mkdir /mnt/newdisk
sudo mount /dev/sdb1 /mnt/newdisk
df -h
# 재부팅 후에도 유지
vi /etc/fstab
/dev/sdb1 /mnt/newdisk ext4 defaults 0 2
# 설정 확인
sudo mount -a
LVM (Logical Volume Manager)
여러 개의 디스크를 논리적으로 하나로 관리할 수 있다.
- LVM 구조
Physical Volume (PV) : 실제 물리적 디스크 (/dev/sdb1, /dev/sdc1)
Volume Group (VG) : 여러 개의 PV를 묶어서 하나의 논리적 그룹 생성
Logical Volume (LV) : VG에서 할당된 논리적 디스크 공간
File System (FS) : LV 위에 파일 시스템(ext4, xfs) 적용 - LVM 설정
# 새로운 LVM 디스크 추가 - 10GB 크기의 논리 볼륨 생성
sudo pvcreate /dev/sdb1
sudo vgcreate my_vg /dev/sdb1
sudo lvcreate -L 10G -n my_lv my_vg
# 파일 시스템 생성 및 마운트
sudo mkfs.xfs /dev/my_vg/my_lv
sudo mkdir /mnt/lvm_storage
sudo mount /dev/my_vg/my_lv /mnt/lvm_storage
df -h
# 논리 볼륨 크기 확장 - 기존 볼륨에 50GB 추가
sudo lvextend -L +5G /dev/my_vg/my_lv
sudo xfs_growfs /mnt/lvm_storage
df -h
Stratis (고급 저장소 관리)
Redhat이 개발한 최신 스토리지 관리 시스템
LVM과 비슷하지만 더 간편한 인터페이스 제공
XFS 기반이며 스냅샷 기능을 제공한다.
- Stratis 설치
sudo yum install -y stratis-cli stratisd
sudo systemctl enable --now stratisd
- Stratis Pool 및 파일 시스템 생성
# 새로운 Stratis Pool 만들기
sudo stratis pool create mypool /dev/sdb
# 파일 시스템 생성
sudo stratis filesystem create mypool myfs
# 마운트 및 확인
sudo mkdir /mnt/stratis_storage
sudo mount /stratis/mypool/myfs /mnt/stratis_storage
df -h
NFS(Network File System) & Samba(SMB/CIFS)
대표적인 리눅스 파일 공유 서비스
NFS는 리눅스-리눅스 간 파일공유,
Samba(SMB)는 리눅스-윈도우 간 파일공유에 사용된다.
NFS (Network File System)
리눅스 시스템 간 파일을 공유하는 프로토콜
NFS 서버가 특정 디렉토리를 공유하면 클라이언트는 그 디렉토리를 로컬 디렉토리처럼 마운트해서 사용할 수 있다.
- 특징
리눅스/유닉스 환경에서 가장 널리 사용되는 네트워크 파일 시스템
원격 파일 시스템을 로컬 파일 시스템처럼 사용 가능
사용자 및 그룹 ID (UID, GID)를 유지한다.
TCP/UDP 포트 2049 사용 - NFS 서버 설정
# NFS 패키지 설치
sudo yum install nfs-utils
# 공유할 디렉토리 생성 - mnt/nfs_share 디렉토리를 모든 사용자에게 접근 가능하도록 설정
sudo mkdir -p /mnt/nfs_share
sudo chown -R nobody:nogroup /mnt/nfs_share
sudo chmod 777 /mnt/nfs_share
# /etc/exports 파일에 공유 설정 추가
sudo vi /etc/exports
/mnt/nfs_share 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
옵션
rw : 읽기/쓰기 기능
sync : 데이터가 즉시 디스크에 기록됨
no_root_squash : 클라이언트의 root 권한 유지
no_subtree_check : 성능 최적화
# NFS 서비스 활성화 및 적용
sudo systemctl enable --now nfs-server
sudo exportfs -a
sudo systemctl restart nfs-server
# 방화벽 설정 (NFS 포트 허용)
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --reload
- NFS 클라이언트 설정
# NFS 클라이언트 패키지 설치
sudo yum install -y nfs-utils
# NFS 마운트할 디렉토리 생성
sudo mkdir -p /mnt/nfs_client
# NFS 서버 디렉토리 마운트 - NFS 서버의 /mnt/nfs_share를 로컬 /mnt/nfs_client로 마운트
sudo mount 192.168.1.100:/mnt/nfs_share /mnt/nfs_client
# 마운트 확인
df -h | grep nfs
# 재부팅 후 자동 마운트 설정
sudo vi /etc/fstab
192.168.1.100:/mnt/nfs_share /mnt/nfs_client nfs defaults 0 0
Samba (SMB/CIFS)
리눅스와 윈도우 간 파일을 공유하는 프로토콜
윈도우 탐색기에서 리눅스 서버의 공유 폴더를 마운트해서 사용할 수 있다.
- 특징
리눅스 - 윈도우 간 파일 공유 간으
SMB (Server Message Block) 프로토콜 사용
윈도우 탐색기에서 \\서버p\공유폴더 형식으로 접근 가능
TCP 포트 445 사용 - Samba 서버 설정
# Samba 패키지 설치
sudo yum install -y samba samba-client samba-common
# 공유할 디렉토리 생성
sudo mkdir -p /mnt/samba_share
sudo chmod 777 /mnt/samba_share
# Samba 설정 파일 수정 - 익명 (Guest) 접근 허용
sudo vi /etc/samba/smb.conf
[sambashare]
path = /mnt/samba_share
browseable = yes
writable = yes
guest ok = yes
create mask = 0777
directory mask = 0777
# Samba 사용자 추가(옵션) - 윈도우에서 접근할 Samba 사용자 생성
sudo smbpasswd -a myuser
# Samba 서비스 시작 및 활성화
sudo systemctl enable --now smb
sudo systemctl enable --now nmb
# 방화벽 설정 (SMB 포트 445, 139 허용)
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
'Study > 리눅스' 카테고리의 다른 글
RHCSA 문제 (0) | 2025.03.10 |
---|---|
RHCSA 정리 (4) - Shell, 작업 스케쥴링, 시스템 성능 튜닝, ACL (0) | 2025.02.27 |
RHCSA 정리 (3) - Security, Networking, File (0) | 2025.02.19 |
RHCSA 정리 (2) - File Permission, Monitoring (0) | 2025.02.19 |
RHCSA 정리 (1) - File System, File Editor, User Account (0) | 2025.02.11 |