분류 전체보기
netfilter, iptables
netfilter - The Packet Filtering Framework for Linux 리눅스 커널 모듈로서 네트워크 패킷을 처리하기 위한 프레임워크이다. netfilter는 패킷 필터링, 네트워크 주소 변환 및 포트 변환을 위한 다양한 기능 및 작업을 제공한다. 이러한 기능은 네트워크를 통해 패킷을 전달하고 패킷이 네트워크의 중요한 위치에 도달하는 것을 방지하는 데 필요한 기능을 제공한다. iptables - Packet Mangling Tool 패킷을 필터링하거나 변환할 수 있는 방화벽 규칙을 정의하기 위한 테이블 기반 시스템을 제공한다. NIC을 거쳐 유입되는 모든 네트워크 패킷을 netfilter에 등록된 룰을 거쳐 제어된다. iptables를 활용하면 특정 조건에 부합하는 패킷을 드랍하거..
[kubernetes] Kubernetes Networking Model
해당 내용은 아래 포스팅 내용을 번역한 것입니다. https://sookocheff.com/post/kubernetes/understanding-kubernetes-networking-model/ A Guide to the Kubernetes Networking Model Kubernetes was built to run distributed systems over a cluster of machines. The very nature of distributed systems makes networking a central and necessary component of Kubernetes deployment, and understanding the Kubernetes networking model wil..
[Linux] 로그인쉘과 비로그인쉘
shopt login_shell 명령어로 로그인쉘 여부를 확인할 수 있다. 로그인쉘과 비로그인쉘의 차이점은 환경설정 파일을 적용하는 데 있다. 로그인쉘의 경우 /etc/profile, ~/.bash_profile 의 환경설정 파일에 영향을 받지만 비로그인쉘의 경우 영향을 받지 않는다. 로그인 쉘 Linux는 사용자가 자신의 계정에 로그인할 때 로그인쉘을 시작한다. 로그인쉘은 로그인할 때 수행되는 기본 쉘이다. logout 명령으로 로그아웃하여 쉘을 종료할 수 있다. 터미널을 통해 SSH를 통해 리눅스 시스템에 접근할 때 “su -” 명령어를 통해 user를 바꿀 때 다음과 같은 순서로 명령을 실행한다. /etc/profile 을 실행 /etc/profile은 /etc/profile.d 안에 있는 스크립트..
[Linux] chmod
chmod 리눅스(Linux)는 하나의 컴퓨터를 여러 사람이 사용할 수 있는 멀티유저 운영체제(OS)이기 때문에 권한 관리가 매우 중요하다. 리눅스 파일, 디렉토리 권한 확인 ls -l 명령을 사용하여, 권한을 확인할 수 있다. snchoi@snchoi:/usr/local/bin$ ls -al 합계 354452 drwxr-xr-x 2 root root 4096 6월 9 15:39 . drwxr-xr-x 11 root root 4096 5월 9 11:39 .. -r-xr-xr-x 1 root root 140376278 5월 9 18:52 argocd -rwxr-xr-x 1 root root 12737304 2월 13 15:00 docker-compose -rwxr-xr-x 1 root root 604500..
VM과 컨테이너
근본적인 차이점은, VM은 커널을 포함해 운영체제 전체의 복사본을 실행하는 반면 컨테이너는 호스트 컴퓨터의 커널을 공유한다는 점이다. 1. 컴퓨터 부팅 과정 BIOS 라고 하는 초기 프로그램을 실행한다. BIOS는 가용 메모리양을 파악하고, 네트워크 인터페이스들을 식별하고, 그 밖에 디스플레이나 키보드, 저장 장치 같은 여러 장치들을 탐지한다. 요즘은 이런 기능의 상당 부분을 UEFI가 담당하고 있다. 하드웨어 탐지 완료 후, 시스템은 부트로더를 실행한다. 부트로더는 운영체제의 커널 코드를 메모리에 적재해서 실행한다. 커널 코드는 응용 프로그램보다 높은 수준의 권한으로 실행된다. 커널이 메모리나 네트워크 인터페이스 등에 접근할 수 있는 것은 그런 권한 수준 덕분이다. 커널 코드는 CPU에서 기계어 명령의..
[Linux] 리눅스 능력 (getcaps)
특정 프로세스에 주어진 능력들은 getpcaps 명령으로 볼 수 있다. 보통의 경우 비루트 사용자가 실행한 프로세스에는 아무런 능력도 배정되지 않는다. $ snchoi@snchoi:~$ ps PID TTY TIME CMD 1905 pts/0 00:00:00 bash 3577 pts/0 00:00:00 ps $ snchoi@snchoi:~$ getpcaps 1905 1905: = 최소 권한 원칙에 따라, 프로세스나 파일에 능력을 부여할 때는 작업에 꼭 필요한 능력들만 부여하는 것이 바람직하다. 컨테이너 실행 시 컨테이너에 부여할 능력들을 설정할 수 있다.
[Linux] 리눅스 setuid, setgid
보통의 경우 사용자가 파일을 실행하면 해당 프로세스는 그 사용자의 ID로 실행된다. 그러나 파일에 setuid 비트를 설정해 두면 프로세스는 파일 소유자의 ID로 실행된다. $ snchoi@snchoi:~$ ls -l `which sleep` -rwxr-xr-x 1 root root 26984 Feb 7 2022 /usr/bin/sleep $ snchoi@snchoi:~$ cp /usr/bin/sleep ./mysleep $ snchoi@snchoi:~$ ls -l ./mysleep -rwxr-xr-x 1 snchoi snchoi 26984 Jul 4 02:11 ./mysleep 출력에서 보듯이 복사본 mysleep의 소유자는 snchoi 라는 사용자이다. # 복사본을 루트계정으로 실행 $ snchoi@..
리눅스의 컨테이너 격리 (cgroups, namespace)
컨테이너는 VM과 달리 Host의 OS를 공유한다.VM은 커널을 포함해 운영체제 전체의 복사본을 실행하는 반면, 컨테이너는 호스트 컴퓨터의 커널을 공유한다.격리 측면에서 VM이 컨테이너보다 유리하지만 많은 사람들이 컨테이너를 사용하는 이유는 아래와 같은 점들 때문이다.VM은 시동하는 데 컨테이너보다 시간이 훨씬 많이 걸린다. 컨테이너를 실행하는 것은 그냥 새 리눅스 프로세스를 띄우는 것일 뿐이지만, VM을 실행하려면 모든 부팅 및 초기화 과정을 거쳐야 한다.각 VM은 커널 전체를 실행해야 하므로 추가 부담이 존재한다. 반면 컨테이너들은 하나의 커널을 공유하기 때문에 자원 면에서나 성능 면에서 대단히 효율적이다.1. Cgroups(control groups) 격리cpu, memory, network 등 프..