리눅스 커널 | cgoups namespaces selinux - 커널이란?

리눅스 뿐만 아니라 윈도우, OSX 에서도 커널을 사용해요

커널에 들어 있는 요소들만 다를 뿐 거의 동일한 기능을 수행하는

커널들도 존재하는데요, 커널의 정의와 종류에 대해서 알아볼게요

커널(Kernel)이란?

커널은 본질적으로 프로그램이다
다른 프로그램들과 커널이 기본적으로 다른 점이 하나가 있는데
바로 Memory Resident 라는 것이다.
이는 메모리에 항상 상주해 있는 것을 의미한다.
Utility는 Disk Resident

커널을 쉽게 말해서는 운영체제를 이루는 핵심 요소로
컴퓨터 내의 자원을 사용자 프로그램이 사용할 수 있도록 관리해 주는 프로그램 입니다

제가 즐겨 쓴는 도커와 연결을 할 때도 많은 커널들이 관여를 합니다

cgroup

Red Hat Linux6에서 컨트롤 그룹(control group)이라는 새로운 커널 기능을 제공합니다
사용자는 cpu시간, 시스템메모리, 네트워크 대역폭 같은 자원이나 이러한 자원의 조합을 시스템에서 실행 중인 사용자 정의 프로세스 간에 할당 할 수 있습니다.

cgroup을모니터링 하거나 특정 자원으로의 cgroup 액세스를 거부하는 것 이외에 실행 중인 시스템에서 cgroup을 동적으로 다시 구성할 수 있습니다

cgroup을 사용하여 시스템 관리자는 시스템 자원 할당, 우선 순위 지정, 거부, 관리, 모니터링과 같은 세밀한 제어가 가능합니다. 하드웨어 자원은 작업 및 사용자 간을 신속하게 분배하여 전체적인 효율성을 향상시킬 수 있습니다.

namespace

리눅스의 namespace는 lightweight 가상화 솔루션입니다
커널 인스턴스를 만들지 않고 기존 리소스들을 필요한 만큼의 namespace로
분리하여 묶어 관리하는 방법으로 사용합니다

LXC 기반 Docker 같은 솔루션을 구현 할때 cgroup과 namespace를 사용하였습니다

관리가 가능한 namespace 리소스들은 다음과 같습니다

• pid namespace
○ 프로세스에 대응하는 pid
○ CONFIG_PID_NS 커널 옵션 사용
○ 참고
§ Separation Anxiety: A Tutorial for Isolating Your System with Linux Namespaces | toptal

• uts namespace
○ “uname” syscall 에서 보여주는 호스트명 및 커널 버전 정보
○ CONFIG_UTS_NS 커널 옵션 사용

• ipc namespace
○ SYSVIPC와 posix mqueue
○ CONFIG_IPC_NS 커널 옵션 사용

• net namespace
○ 네트워크 디바이스, IP, 라우팅 정보, IP 테이블 정보
○ CONFIG_NET_NS 커널 옵션 사용
○ 참고
§ Linux Switching – Interconnecting Namespaces | Open Cloud Blog
§ VRF & Linux Network Name Space | Ritesh Madapurath
§ VRF for Linux — a contribution to the Linux Kernel | Cumulus

• user namespace
○ 사용자 정보 (커널 v3.8에 소개되어 아직도 많은 리눅스 파일 시스템이 user namespace를 지원하지 않는다.)
○ CONFIG_USER_NS 커널 옵션 사용

• mount namespace
○ 마운트 파일 시스템

netlink

커널 모듈과 사용자 프로세스 사이에 네트워크 정보를 전달하는 데 사용됩니다.
프로세스 간 통신
커널과 유저 사이의 양방향 링크가 가능합니다.




SELinux

SELinux(Security-Enhanced Linux)는 관리자가 시스템 엑세스 권한을 효과적으로 제어할 수 있게 만드는 시스템 보안 아키텍처입니다.
2003년 업스트림 Linux 커널로 통합되었습니다.
시스템의 애플리케이션, 프로세스, 파일에 대한 엑세스 제어를 합니다.
/etc/sysconfig/selinux 파일에 selinux에 대한 설정이 나와 있습니다.
/etc/selinux/config 에 SELINUX=disabled 로 설정하면 SELinux가 비활성화 됩니다. (reboot 필수)

sestatus 명령어로 동작 확인이 가능합니다.



Netfilter

리눅스의 커널 소스는 네트워크 관련 소스가 전체의 1/3 정도 입니다.
그만큼 네트워크의 비중이 높은데, Netfilter는 리눅스 커널 모듈로 네트워크 패킷을 처리하기 위한 프레임 워크입니다.
NAT 기능 : 사설IP와 공인IP를 변환해주거나 포트 변환
Packet Filter : 특정 패킷을 허용 또는 차단, 서버 접근제어, 방화벽 기능
iptables 가 여기 포함
Packet Mangling : 패킷의 헤더 값 변경 가능


5개의 후킹 지점이 존재

PREROUTING : 인터페이스를 통해 들어온 패킷을 가장 먼저 처리. 목적지 주소의 변경(DNAT)
INPUT : 인터페이스를 통해 로컬 프로세스로 들어오는 패킷의 처리(즉, 패킷을 받아 처리할 프로세스가 내 시스템에서 동작하는 경우). INPUT에서 패킷 처리(차단/허용) 후 user space의 프로세스로 전달
OUTPUT : 해당 프로세스에서 처리한 패킷을 밖으로 내보내는 패킷에 대한 처리(차단/허용)
FORWARD : 다른 호스트로 통과시켜 보낼 패킷에 대한 처리(차단/허용). 방화벽이나 IPS 등과 같이 내가 수신하는 패킷이 아니고 지나가는 패킷을 처리
POSTROUTING : 인터페이스를 통해 나갈 패킷에 대한 처리. 출발지 주소의 변경(SNAT)


capabilities

root 권한을 세분화해서 일반 유저도 root 권한의 일부를 가지도록 만든 보안 모델입니다.
일반 유저(Normal users): UID, GID 기반으로 권한 검사 대상
슈퍼 유저(Super user(UID = 0)): 일련의 검사를 우회(bypass)

# chown root prog
# chmod u+s prog



AppArmor

시스템 관리자가 프로그램 프로필 별로 프로그램의 역량을 제한할 수 있게 해주는 리눅스 커널 보안 모듈입니다.

좋아요와 댓글은 큰 힘이 됩니다 👻

댓글

Designed by JB FACTORY