[Linux 이론] 리눅스 보안 SELinux
목차 SELinux(Security-Enhanced Linux) 기본 SELinux 개념 최소 권한 원칙 최소 권한 원칙을 구현함으로써 SELinux의 목표 SELinux 최소 권한 원칙 구현 방법 SELinux에는 세 가지 기본 구성 요소 SELinux에는 작동 모드 SELinux에는 두 가지 주요 정책 유형 SELinux(Security-Enhanced Linux) SELinux(Security-Enhanced Linux)는 필수 액세스 제어(MAC)를 포함하여 액세스 제어 보안 정책을 지원하는 메커니즘을 제공하는 Linux 커널용 보안 모듈이다. 파일, 포트 및 기타 리소스에 대한 액세스가 매우 세밀한 수준으로 제어된다. SELinux는 Linux 기반 시스템의 보안을 강화하기 위해 오픈 소스 커뮤..
2023.03.23
[Linux 명령어] 프로세스 우선순위 지정 (nice, renice)
목차 nice/renice Linux 프로세스 스케줄링 프로세스 우선순위 nice 값 nice 값 수정 권한 nice/renice Linux의 nice 및 renice 명령어은 실행 중인 프로세스의 우선 순위를 조정하는 데 사용되므로 시스템 리소스가 다른 작업에 할당되는 방식을 제어할 수 있다. 우선 순위를 조정하여 CPU 시간을 늘리거나 줄이는 프로세스에 영향을 주어 특정 작업이나 시나리오에 대한 시스템 성능을 최적화할 수 있다. 이 명령어를 이해하기 위해 먼저 알아야할 몇가지를 아래에 정리해 놓았다. Linux 프로세스 스케줄링 최신 컴퓨터 시스템은 여러 명령어 스레드를 동시에 실행할 수 있는 멀티 코어, 멀티 스레드 CPU를 사용한다. 가장 큰 고성능 슈퍼 컴퓨터는 CPU당 처리 코어 및 스레드 구..
2023.03.23
[Linux 명령어] 시스템 성능 최적화를 위한 명령어 (tuned)
Tuned Linux Tuned 커맨드는 시스템 성능을 최적화하기 위해 시스템을 모니터링하고 프로필을 사용한다. 프로필은 디스크 설정, 커널 매개 변수, 네트워크 최적화 설정 등 시스템 매개 변수를 정의하는 규칙 모음으로 시스템 파라미터를 동적으로 조정하여 시스템 활동에 따라 시스템 설정을 동적으로 조정하며, 고성능, 저레이턴시, 전력 절약 등의 공통 사용 사례에 대한 사전 정의된 프로필도 제공한다. 이 커맨드는 다양한 예제를 통해 사용법을 설명할 수 있다. Tuned를 사용하면, 시스템 튜닝 프로필을 이용해 특정 작업 부하에 대해 최적의 성능을 얻을 수 있다. 다양한 프로필이 이미 기본적으로 설치되어 있으며, 사용자가 직접 프로필을 만들 수도 있다. 이는 사전 구성된 다양한 튜닝 프로필을 적용하여 Li..
2023.03.23
[Linux 명령어] DNS 서버 설정 명령어 (bind)
목차 BIND 주요 구성 주요 특징 주요 기능 다운로드 및 설치 간단한 HTML 파일 생성 BIND BIND (Berkeley Internet Name Domain)는 인터넷에서 가장 널리 사용되는 DNS (Domain Name System) 서버 소프트웨어다. 리눅스 시스템에서 도메인 이름을 IP 주소로 변환하는 데 사용되며, 주로 웹 서버, 이메일 서버 등의 인터넷 서비스에서 활용된다. 사용자가 웹 브라우저에 URL을 입력하면, DNS 서버는 해당 도메인 이름에 대한 IP 주소를 찾아 반환한다. 이렇게 함으로써 사용자는 숫자로 된 IP 주소 대신 기억하기 쉬운 도메인 이름을 사용하여 인터넷 자원에 접근할 수 있다. 따라서 BIND는 APACHE와 같은 명령어와 함께 자주 사용되는 DNS 서버 소프트웨..
2023.03.21
[Linux 이론] 리다이렉션 기호(>, >>) 활용
기본 사용 방법 Linux에서 리디렉션 기호는 명령의 입력 및 출력을 조작하는 데 사용된다. 이러한 기호를 사용하여 명령 출력을 저장하고, 일반 출력에서 ​​오류 메시지를 분리하고, 다른 명령에 대한 입력으로 파일 콘텐츠를 제공할 수 있다. 리디렉션에는 표준 입력(stdin), 표준 출력(stdout) 및 표준 오류(stderr)의 세 가지 주요 유형이 있다. 이러한 리디렉션에 사용되는 기호는 다음과 같다. >: stdout을 파일로 리디렉션하고 파일이 있으면 덮어쓴다. >>: stdout을 파일로 리디렉션하고 파일이 있는 경우 파일에 추가한다. : stderr을 파일로 리디렉션하고 파일이 있으면 덮어쓴다. 2>>: stderr을 파일로 리디렉션하고 파일이 있는 경우 파일에 추가한다. &> 또는 >&: ..
2023.03.21
[Linux 이론] 정규 표현식(Regular Expression)
이번 포스팅은 바로 전에 올린 몇몇 특수문자들의 특징에 대한 다음편이라고 보면 좋을 것 같다. 특히 grep 명령어는 정규 표현식과 자주 같이 사용되는데 이에 대해 같이 설명하면 좋으나 이 내용은 나중에 따로 "Linux 명령어" 카테고리에 올려놓도록 하겠다. 일반적으로 regex 또는 regexp로 정의되기도 하는 정규 표현식(Regular Expression)은 텍스트 데이터에서 패턴 일치 및 조작 매커니즘을 제공하는 언어이다. 이들은 grep, sed, awk와 같은 다양한 Linux 도구와 특정 패턴을 기반으로 텍스트를 검색, 필터링 및 수정하기 위한 많은 프로그래밍 언어에 사용된다. 정규식은 검색 패턴을 형성하는 일련의 문자로 주요 구성 요소 중 일부는 다음과 같다. 구성 요소 리터럴 문자: 문..
2023.03.21
반응형

목차

  1. SELinux(Security-Enhanced Linux)
  2. 기본 SELinux 개념
  3. 최소 권한 원칙
  4. 최소 권한 원칙을 구현함으로써 SELinux의 목표
  5. SELinux 최소 권한 원칙 구현 방법
  6. SELinux에는 세 가지 기본 구성 요소
  7. SELinux에는 작동 모드
  8. SELinux에는 두 가지 주요 정책 유형

SELinux(Security-Enhanced Linux)

SELinux(Security-Enhanced Linux)는 필수 액세스 제어(MAC)를 포함하여 액세스 제어 보안 정책을 지원하는 메커니즘을 제공하는 Linux 커널용 보안 모듈이다. 파일, 포트 및 기타 리소스에 대한 액세스가 매우 세밀한 수준으로 제어된다.

 

SELinux는 Linux 기반 시스템의 보안을 강화하기 위해 오픈 소스 커뮤니티와 협력하여 미국 NSA(National Security Agency)에서 개발했다.

SELinux는 "최소 권한" 원칙에 따라 작동한다. 즉, 프로세스와 사용자는 작업을 수행하는 데 필요한 최소한의 권한을 가져야 한다. 이렇게 하면 악의적인 사용자나 소프트웨어가 악용할 수 있는 무단 액세스, 보안 위반 및 취약성으로부터 시스템을 보호할 수 있다.

 

프로세스는 해당 SELinux 정책 또는 SELinux 부울 설정에서 지 정하는 리소스에만 액세스할 수 있다. 파일 권한은 특정 사용자 또는 그룹의 파일 액세스 권한을 제어한다. 그러나 파일 권한은 파일 액세스 권한 이 있는 승인된 사용자가 파일을 의도하지 않은 용도로 사용하는 것을 방지하지 못한다.

 

예를 들어 파일에 대한 쓰기 권한이 있는 경우, 다른 편집기나 프로그램에서 특정 프로그램만 작성할 수 있도록 설계된 구조화된 데이터 파일을 여전히 열고 수정할 수 있으며, 이로 인해 손상 또는 데이터 보안 문제가 발 생할 수 있다. 파일 권한은 파일 사용 방법은 제어하지 않고 파일을 읽거나 쓰거나 실행할 수 있는 사람만 제어하므로 이처럼 원하지 않는 액세스를 차단하지 않는다.

 

SELinux는 애플리케이션 개발자가 애플리케이션에서 사용하는 각 바이너리 실행 파일, 구성 파일, 데이터 파 일에 대해 허용되는 조치와 액세스 권한을 정확히 선언하기 위해 정의한 애플리케이션별 정책으로 구성됩니 다. 하나의 정책이 애플리케이션 하나의 활동을 정의하기 때문에 이 정책을 타겟 정책이라고 한다. 정책은 개별 프로그램, 파일, 네트워크 포트에 구성된 사전 정의 레이블을 선언한다.


기본 SELinux 개념

SELinux의 기본 목적은 손상된 애플리케이션 또는 시스템 서비스로 인한 부적절한 사용으로부터 사용 자 데이터를 보호하는 것이다. 대부분의 Linux 관리자는 필요에 따라 파일 권한을 설정하기 때문에 DAC(Discretionary Access Control)라는 표준 사용자, 그룹, 월드 파일 권한 보안 모델에 익숙하다. SELinux는 MAC(Mandatory Access Control)이라는 세분화된 규칙에 정의된 오브젝트 기반 보안 기능을 추 가로 제공한다.

 

MAC 정책은 모든 사용자에게 적용되므로 임의 구성 설정을 통해 특정 사용자에게 적용되 지 않게 할 수 없다. 예를 들어 웹 서버의 개방형 방화벽 포트는 웹 클라이언트에 대한 원격 익명 액세스를 허용한다. 그러나 해 당 포트에 액세스하는 악의적인 사용자가 기존 취약점을 이용해 시스템을 손상시킬 수도 있다.

 

예를 들 어 취약점이 apache 사용자 및 그룹의 권한을 손상시키는 경우, 악의적인 사용자가 /var/www/html 문 서 루트 콘텐츠 또는 시스템의 /tmp 및 /var/tmp 디렉터리 또는 기타 액세스 가능한 파일 및 디렉터리에 직접 액세스할 수 있다.

 

SELinux 정책은 특정 프로세스가 관련 파일, 디렉터리, 포트에 액세스하는 방법을 정의하는 보안 규칙이다. 파일, 프로세스, 디렉터리 또는 포트와 같은 모든 리소스 엔터티에는 SELinux 컨텍스트라는 레이블이 있다.

 

컨텍스트 레이블은 프로세스에서 레이블이 지정된 리소스에 액세스할 수 있도록 정의된 SELinux 정 책 규칙을 찾는다. 기본적으로 SELinux 정책은 명시적 규칙에서 액세스 권한을 부여하지 않는 한 어떠한 액세스도 허용하지 않는다. 허용 규칙이 정의되지 않은 경우 모든 액세스가 허용되지 않는다.

 

SELinux 레이블에는 user, role, type, security level 필드가 있다. 타겟 정책은 RHEL에서 기 본적으로 활성화되어 있으며, type 컨텍스트를 사용하여 규칙을 정의한다. 유형 컨텍스트 이름은 대개 _t로 끝난다.


최소 권한 원칙

최소 권한 원칙(The principle of least privilege, POLP)은 사용자와 프로세스가 의도한 작업을 수행하는 데 필요한 최소한의 권한 또는 액세스 권한을 제공하도록 권장하는 컴퓨터 보안 개념이다. 이 원칙은 SELinux(Security-Enhanced Linux)의 근본적인 측면이며 Linux 기반 시스템의 보안을 강화하는 데 도움이 된다.


최소 권한 원칙을 구현함으로써 SELinux의 목표
  • 보안 위반으로 인한 잠재적 피해 제한
    사용자 또는 프로세스에 필요한 최소한의 권한만 있는 경우 취약성을 악용하는 공격자는 액세스 및 기능이 제한된다. 이렇게 하면 무단 액세스, 데이터 유출 및 시스템 취약성의 추가 악용 위험이 줄어든다.

  • 공격 표면 감소
    상승된 권한으로 실행되는 프로세스 수를 최소화하면 공격자의 잠재적인 대상이 줄어든다. 이로 인해 공격자가 취약점을 찾기가 더 어려워지고 성공적인 악용 가능성이 줄어든다.

  • 보안 감사 및 모니터링 간소화
    사용자와 프로세스에 필요한 최소한의 권한이 있으면 의심스러운 활동을 보다 쉽게 ​​식별하고 모니터링할 수 있다. 비정상적인 동작 또는 액세스 요청을 보다 신속하게 감지하여 관리자가 조치를 취하고 위협을 완화할 수 있다.

SELinux 최소 권한 원칙 구현 방법
  • 필수 액세스 제어(MAC)
    SELinux는 보안 컨텍스트를 기반으로 주체(사용자 및 프로세스)와 개체(파일, 디렉터리, 소켓 등) 간에 허용되는 상호 작용을 정의하는 정책을 적용한다. 프로세스를 필요한 최소 권한으로 제한함으로써 SELinux는 수행할 수 있는 작업을 효과적으로 제한한다.

  • 보안 컨텍스트
    SELinux는 사용자, 역할 및 도메인(또는 유형)에 대한 정보를 포함하여 사용자, 프로세스 및 개체에 보안 컨텍스트(레이블)를 할당한다. SELinux는 보안 컨텍스트를 사용하여 세분화된 액세스 제어 결정을 내리고 최소 권한 원칙을 적용할 수 있다.

  • 제한 및 비제한 도메인
    SELinux 정책은 프로세스가 제한된 액세스 및 권한을 갖는 제한된 도메인 또는 프로세스가 보다 광범위한 액세스를 갖는 제한되지 않은 도메인을 정의할 수 있다. 대부분의 Linux 배포판에 대한 기본 정책인 대상 정책은 특정 프로세스만 제한하는 반면 엄격한 정책은 시스템의 모든 프로세스를 제한한다.


SELinux는 최소 권한 원칙을 적용하여 보안 위반, 무단 액세스 및 취약성으로부터 Linux 시스템을 보호한다. 사용자 및 프로세스에 필요한 최소 권한을 적용하여 보안 사고로 인한 잠재적 피해를 제한하면서 작업을 수행하는 데 필요한 액세스 권한만 갖도록 한다.


SELinux에는 세 가지 기본 구성 요소
  • 정책
    정책은 시스템의 프로세스, 파일 및 기타 개체에 대한 보안 컨텍스트를 정의하는 일련의 규칙이다. 주체(사용자 및 프로세스) 및 개체(파일, 디렉터리, 소켓 등)의 보안 컨텍스트를 기반으로 허용 또는 거부되는 작업을 결정한다.

  • 보안 컨텍스트
    보안 컨텍스트는 프로세스 또는 개체와 관련된 사용자, 역할 및 도메인(또는 유형)에 대한 정보를 포함하는 레이블이다. SELinux는 이러한 레이블을 사용하여 정책에 따라 액세스 제어 결정을 내린다.

  • 시행
    SELinux는 프로세스에서 생성된 시스템 호출을 가로채고 주체와 객체 모두의 보안 컨텍스트를 확인하여 작업을 허용할지 또는 거부할지 결정함으로써 정책을 시행한다.

SELinux에는 작동 모드
  • Enforcing
    이 모드에서 SELinux는 정책 규칙을 시행하고 정책에 따라 액세스를 거부한다. 정책을 위반하는 모든 작업을 기록하므로 관리자가 잠재적인 보안 문제를 모니터링하고 식별할 수 있다.

  • Permissive
    이 모드에서 SELinux는 정책 규칙을 시행하지 않지만 시스템이 시행 모드에 있었다면 거부되었을 모든 작업을 기록한다. 이는 시스템 기능에 영향을 주지 않고 정책을 테스트하고 문제를 해결하는 데 유용한다.

  • Disabled
    이 모드에서는 SELinux가 완전히 비활성화되고 시스템이 MAC 없이 작동한다.

SELinux에는 두 가지 주요 정책 유형
  • Targeted
    대상 정책은 특정 서비스 및 시스템 리소스 보호에 중점을 둔 대부분의 배포판에서 기본 정책이다. 이 정책에서는 선택한 프로세스만 제한되고 나머지 시스템은 제한되지 않고 실행된다.

  • Strict
    엄격한 정책은 보다 포괄적이며 시스템의 모든 프로세스를 제한한다. 이 정책은 더 높은 수준의 보안을 제공하지만 구성 및 유지 관리가 더 어려울 수 있다.


SELinux는 sestatus, getenforce, setenforce, semanage, chcon 및 restorecon과 같은 명령줄 도구를 사용하여 관리할 수 있다. 또한 'system-config-selinux'와 같은 그래픽 도구를 사용하여 일부 배포판에서 SELinux를 관리할 수 있다.


 

반응형
반응형

목차

  1. nice/renice
  2. Linux 프로세스 스케줄링
  3. 프로세스 우선순위
  4. nice 값
  5. nice 값 수정 권한

nice/renice

Linux의 nice 및 renice 명령어은 실행 중인 프로세스의 우선 순위를 조정하는 데 사용되므로 시스템 리소스가 다른 작업에 할당되는 방식을 제어할 수 있다. 우선 순위를 조정하여 CPU 시간을 늘리거나 줄이는 프로세스에 영향을 주어 특정 작업이나 시나리오에 대한 시스템 성능을 최적화할 수 있다. 이 명령어를 이해하기 위해 먼저 알아야할 몇가지를 아래에 정리해 놓았다.


Linux 프로세스 스케줄링

최신 컴퓨터 시스템은 여러 명령어 스레드를 동시에 실행할 수 있는 멀티 코어, 멀티 스레드 CPU를 사용한다. 가장 큰 고성능 슈퍼 컴퓨터는 CPU당 처리 코어 및 스레드 구조가 수백 개인 CPU를 수백 또는 수천 개 포함 할 수 있으며, 수백만 개의 명령어 스레드를 병렬로 처리할 수 있다.

 

단일 사용자가 여러 애플리케이션을 실 행하는 경우 일반적인 데스크탑 시스템이나 개인용 워크스테이션은 CPU 활동으로 포화 상태가 될 수 있지 만, 적절한 규모로 적절하게 구성된 워크스테이션은 사용자가 의도한 워크로드에 맞게 설계된다.

그러나 일반적인 엔터프라이즈 또는 인터넷 서버는 사용자 및 애플리케이션의 요청을 초당 수백 또는 수천 개씩 처리 하므로 CPU가 쉽게 포화 상태가 될 수 있다.

 

CPU 부하가 있는 모든 시스템은 스레드를 즉시 예약하는 데 필요한 CPU 처리 장치보다 더 많은 프로세스 스레드를 처리해야 하는 시나리오를 경험한다. Linux 및 기타 운영 체제는 타임 슬라이싱 또는 멀티태스킹이라는 기술을 사용하여 프로세스를 관리한다.

 

운영 체제의 프로세스 스케줄러는 사용 가능한 각 CPU 코어의 프로세스 스레드를 빠르게 전환한다. 이 동 작은 상당한 수의 프로세스가 동시에 실행되고 있다는 인상을 준다.


프로세스 우선순위

각 프로세스에는 이전에 프로세스 우선순위로 알려진 다양한 중요도 측정치가 있다. Linux에서는 CPU 처리 시간을 확보하기 위해 프로세스 구성 및 우선순위 지정 규칙을 정의하는 스케줄링 정책을 구현한다.

 

Linux에는 대화형 애플리케이션 요청, 비 대화형 배치 애플리케이션 처리, 실시간 애플리케이션 요구 사항을 처리하도록 설계된 다양한 스케줄링 정책이 있다. 실시간 스케줄링 정책에서는 여전히 프로세스 우선순 위와 대기열을 사용하지만, 최근의 비 실시간(일반) 스케줄링 정책에서는 CPU 시간을 기다리는 프로세스를 바이너리 검색 트리로 구성하는 CFS(완전 공정 스케줄러)를 사용한다. 이 프로세스 우선순위 소개에서는 SCHED_NORMAL 또는 SCHED_OTHER라는 기본 스케줄링 정책을 설명한다.

 

모든 시스템 실시간 프로세스에 일반 프로세스보다 높은 우선순위가 지정되도록 SCHED_NORMAL 정책하에 실행 중인 프로세스에는 정적 실시간 우선순위 0이 할당된다. 그러나 이 정적 우선순위 값은 CPU 스케줄링 을 위해 일반 프로세스 스레드를 구성할 때 포함되지 않는다. 대신 CFS 스케줄링 알고리즘에서 일반 프로 세스 스레드를 이전에 사용한 CPU 시간이 가장 짧은 첫 번째 항목부터 누적 CPU 시간이 가장 긴 마지막 항목 까지 시간가중 바이너리 트리로 정렬한다.


nice 값

바이너리 트리의 순서는 사용자가 수정할 수 있는 프로세스별 nice 값에 따라 추가로 영향을 받는다. 해당 값은 범위가 -20(우선순위 증가)에서 19(우선순위 감소)까지이고 기본값은 0이다. 프로세스는 해당 상위 프 로세스에서 시작 nice 값을 상속한다. nice 값이 클수록 프로세스 우선순위가 기본값에서 감소했음을 나타내며, 해당 프로세스가 다른 프로세스보 다 더 적합한 것으로 기억될 수 있다.

 

nice 값이 적을수록 프로세스 우선순위가 기본값에서 증가했음을 나타내며, 해당 프로세스가 다른 프로세스보다 덜 적합한 것으로 기억될 수 있다. 프로세스에서 nice 값을 수정하면 바이너리 트리에서 프로세스 스레드의 위치가 높아지거나 낮아진다. nice 값을 늘리면 스레드의 위치가 낮아지고, 값을 줄이면 스레드의 위치가 높아진다


nice 값 수정 권한

권한 있는 사용자는 프로세스의 nice 값을 줄여 프로세스 적합도를 낮출 수 있다. 그러면 프로세스가 바 이너리 트리에서 반복적으로 더 높은 위치에 배치되어 더 자주 예약된다. 포화된 시스템에서는 다른 프로세 스에서 사용할 수 있는 전체 CPU 시간이 줄어든다. 권한이 없는 사용자는 자신의 프로세스에서 nice 값을 늘릴 수만 있다. 그러면 자신의 프로세스 적합도가 높아져 프로세스가 바이너리 트리에서 더 낮은 위치에 배치된다. 권한이 없는 사용자는 중요도를 높이기 위 해 프로세스의 nice 값을 줄일 수 없으며 다른 사용자의 프로세스에 해당하는 nice 값을 조정할 수도 없습니 다.


명령어 사용예

1. nice 명령어

nice 명령어은 지정된 우선 순위("niceness" 값이라고도 함)로 새 프로세스를 시작하는 데 사용된다. 우선 순위 수준의 범위는 -20(가장 높은 우선 순위)에서 19(가장 낮은 우선 순위)까지다. 기본적으로 새 프로세스는 일반적으로 niceness 값이 0인 부모 프로세스의 우선 순위를 상속한다.

nice 명령어의 구문

nice [OPTION] [COMMAND [ARG]...]


예를 들어 우선 순위가 낮은(높은 niceness 값) 프로세스를 시작하려면 다음을 사용한다.

nice -n 10 command_name

2. renice 명령어

renice 명령어은 이미 실행 중인 프로세스의 우선 순위를 수정하는 데 사용된다. 프로세스 ID(PID), 프로세스 그룹 ID(PGID) 또는 사용자 ID(UID)를 지정하여 프로세스의 우선 순위를 조정할 수 있다.

renice 명령어의 구문은 다음과 같다.

renice [-n] PRIORITY [-g|-p|-u] IDENTIFIER...

옵션

-n: 새로운 우선순위(niceness) 값을 지정한다.
-g: 주어진 IDENTIFIER는 PGID다.
-p: 주어진 IDENTIFIER는 PID다(옵션이 제공되지 않은 경우 기본 동작).
-u: 주어진 IDENTIFIER는 UID다.

예를 들어 PID가 12345인 프로세스의 우선 순위를 niceness 값 5로 변경하려면 다음을 사용한다.

renice -n 5 -p 12345

특정 사용자가 소유한 모든 프로세스의 우선 순위를 조정하려면 사용자의 UID와 함께 -u 옵션을 사용한다.

renice -n 5 -u 1001
반응형
반응형
Tuned

Linux Tuned 커맨드는 시스템 성능을 최적화하기 위해 시스템을 모니터링하고 프로필을 사용한다. 프로필은 디스크 설정, 커널 매개 변수, 네트워크 최적화 설정 등 시스템 매개 변수를 정의하는 규칙 모음으로 시스템 파라미터를 동적으로 조정하여 시스템 활동에 따라 시스템 설정을 동적으로 조정하며, 고성능, 저레이턴시, 전력 절약 등의 공통 사용 사례에 대한 사전 정의된 프로필도 제공한다. 이 커맨드는 다양한 예제를 통해 사용법을 설명할 수 있다.

 

Tuned를 사용하면, 시스템 튜닝 프로필을 이용해 특정 작업 부하에 대해 최적의 성능을 얻을 수 있다. 다양한 프로필이 이미 기본적으로 설치되어 있으며, 사용자가 직접 프로필을 만들 수도 있다.

이는 사전 구성된 다양한 튜닝 프로필을 적용하여 Linux 시스템의 성능을 최적화하는 시스템 성능 튜닝 서비스다. 고성능 컴퓨팅, 가상화, 절전 등과 같은 특정 사용 사례 또는 워크로드를 기반으로 시스템 설정을 자동으로 조정한다. Tuned는 성능 최적화가 중요한 서버 및 고성능 시스템에 특히 유용하다.


모듈 구성

1. Monitor 플러그인

  • disk : 모든 디스크 장치의 IO 작업 수에 따라 디스크 부하를 모니터링한다.
  • net : 네트워크 카드당 전송되는 패킷 수에 따라 네트워크 부하를 모니터링한다.
  • load : 모든 cpu의 cpu부하를 모니터링한다.

2. Tuning 플러그인

  • disk : 다양한 디스크 매개 변수 (디스크 스케줄러, 스핀다운 시간 제한 등)를 설정한다
  • net : 인터페이스 속도 및 WoL(Wake on LAN) 기능을 구성한다
  • cpu : 다양한 CPU 매개 변수(CPU 관리자, 대기시간 등)를 설정한다.

설치
RHEL/CentOS/Fedora
sudo yum install tuned

또는 데비안/우분투
sudo apt-get install tuned

사용 예시

1. 활성화

sudo systemctl enable --now tuned

2. 사용 가능한 프로필을 나열

tuned-adm list

3. 현재 활성 프로필을 표시

tuned-adm active

4. 활성 프로필을 변경

sudo tuned-adm profile <profile-name>

예) easyIT 프로필을 설정하려면 다음을 실행한다.
sudo tuned-adm profile easyIT

5. 사용자 지정 프로필을 만듭니다.

/etc/tuned/ 아래에 새 디렉토리를 생성하고 사용자 정의 설정으로 tuned.conf 파일을 추가하여 사용자 정의 튜닝 프로필을 생성할 수 있다.

sudo mkdir /etc/tuned/my-custom-profile
sudo nano /etc/tuned/my-custom-profile/tuned.conf (혹은 vi, vim으로도 가능하다.)


5-1. tuned.conf 파일에서 다음과 같은 사용자 지정 설정을 정의할 수 있다.

[main]
include=balanced

[cpu]
governor=performance

5-2. 그런 다음 다음을 사용하여 사용자 지정 프로필을 활성화한다.

sudo tuned-adm profile my-custom-profile

tuning 프로필

다음 tuning 프로필들은 RedHat을 기반으로 정리되었다.

 

  • balanced
    절전과 성능 간에 절충이 필요한 시스템에 적합하다.

  • power save
    최대 절전을 위해 시스템을 조정한다.

  • throughput-performance
    최대 처리량을 얻기 위해 시스템을 튜닝한다.

  • acceleratorperformance
    throughput-performance와 동일하게 튜닝하고 대기 시간도 100μs 미만으로 줄인다.

  • latency-performance
    전력 소비가 크더라도 대기 시간이 짧아야 하는 서버 시스템에 적합 하다.

  • network-throughput
    throughput-performance 프로필에서 파생됩니다. 최대 네 트워크 처리량을 얻기 위해 추가 네트워크 튜닝 매개 변수가 적용됩니다.

  • network-latency
    latency-performance 프로필에서 파생됩니다. 낮은 네트워크 대기 시간을 제공하기 위해 추가 네트워크 튜닝 매개 변수를 활성화한다.
  • desktop
    balance 프로필에서 파생됩니다. 대화형 애플리케이션의 빠른 응답을 제공한다.

  • hpc-compute
    latency-performance 프로필에서 파생됩니다. 고성능 컴퓨 팅에 이상적이다.
  • virtual-guest
    가상 시스템에서 실행할 경우 최대 성능을 얻기 위해 시스템을 튜닝한다.

  • virtual-host
    가상 시스템의 호스트로 사용될 경우 최대 성능을 얻기 위해 시스템을 튜닝한다.

  • intel-sst
    Intel Speed Select기술 구성을 사용하는 시스템에 최적화되었다. 다른 프로필의 오버레이로 사용한다.

  • optimize-serial-console
    직렬 콘솔의 응답성을 높인다. 다른 프로필의 오버레이로 사용한다
반응형
반응형

목차

  1. BIND
  2. 주요 구성
  3. 주요 특징
  4. 주요 기능
  5. 다운로드 및 설치
  6. 간단한 HTML 파일 생성

BIND

BIND (Berkeley Internet Name Domain)는 인터넷에서 가장 널리 사용되는 DNS (Domain Name System) 서버 소프트웨어다. 리눅스 시스템에서 도메인 이름을 IP 주소로 변환하는 데 사용되며, 주로 웹 서버, 이메일 서버 등의 인터넷 서비스에서 활용된다.

사용자가 웹 브라우저에 URL을 입력하면, DNS 서버는 해당 도메인 이름에 대한 IP 주소를 찾아 반환한다. 이렇게 함으로써 사용자는 숫자로 된 IP 주소 대신 기억하기 쉬운 도메인 이름을 사용하여 인터넷 자원에 접근할 수 있다. 따라서 BIND는 APACHE와 같은 명령어와 함께 자주 사용되는 DNS 서버 소프트웨어다.

 

쉽게 이야기하자면 우리가 아는 naver.com, daum.net, google.com과 같은 도메인 주소들은 사실 IP 주소로 이루어져 있다. 만약 172.132.42.72라고 가정하고 해당 도메인에 접속하려한다면 이 숫자들을 다 숙지해야하고, 우리가 이용하는 도메인이 1, 2개가 아니고 대부분 비슷하게 생긴 만큼 '이게 맞던가?'하는 생각이 자주 들것이다. 때문에 이를 간편하게 주소를 입력하면 해당 IP로 접속할 수 있도록 유도해주는 것이다.


주요 구성
  1. DNS 서버
    Bind는 Linux 시스템에서 DNS(도메인 이름 시스템) 서버를 구성하는 데 사용되는 소프트웨어다. DNS 서버는 호스트 이름을 IP 주소로 또는 그 반대로 변환하는 역할을 한다.

  2. 영역 파일
    바인딩 구성은 주로 영역 파일에 저장된다. 영역 파일에는 DNS 서버에서 관리하는 도메인에 대한 정보가 포함되어 있으며 각 레코드 유형에 대한 세부 정보가 포함되어 있다.

  3. 레코드 유형
    바인딩에 사용되는 주요 레코드 유형에는 A 레코드(IPv4 주소), AAAA 레코드(IPv6 주소), CNAME 레코드(별칭), MX 레코드(메일 서버), NS 레코드(네임 서버) 및 SOA 레코드가 포함된다. (권한의 시작).

주요 특징
  1. 키 바인딩
    'bind'의 주요 기능은 특정 작업이나 명령에 대한 키 바인딩을 생성하거나 수정하는 것이다. 이러한 키 바인딩은 눌렀을 때 특정 기능을 트리거하는 단일 키 또는 키 조합일 수 있다.

  2. Readline 라이브러리
    'bind'는 Bash와 같은 대화형 명령줄 프로그램에 줄 편집 및 기록 기능을 제공하는 Readline 라이브러리 위에 구축된다. 이는 bind로 구성한 키 바인딩이 Readline 라이브러리를 사용하는 다른 프로그램에서 작동함을 의미한다.

  3. 사용자 지정
    Linux bind를 사용하면 기본 설정과 작업 흐름에 맞게 명령줄 인터페이스를 사용자 지정할 수 있다. 자주 사용하는 명령 또는 기능에 대한 사용자 지정 키 바인딩을 생성하여 명령줄을 보다 효율적으로 탐색하고 상호 작용할 수 있다.

  4. 키 바인딩 나열
    bind -P 명령을 사용하여 현재 키 바인딩과 해당 기능을 모두 나열할 수 있다. 이는 기본 키 바인딩을 이해하고 수정하거나 재정의할 키 바인딩을 결정하는 데 유용하다.

  5. 구성
    bind로 구성된 키 바인딩은 .bashrc 또는 .inputrc 구성 파일에 명령을 추가하여 영구적으로 만들 수 있다. 이렇게 하면 새 셸 세션을 시작할 때마다 사용자 지정 키 바인딩을 사용할 수 있다.

주요 기능
  1. 캐싱 및 전달
    Bind는 DNS 서버를 캐싱 또는 전달하여 지정된 시간 동안 DNS 쿼리 결과를 저장 및 제공하거나 확인을 위해 다른 DNS 서버로 쿼리를 전달할 수 있다.

  2. 보안 기능
    Bind는 DNS 데이터를 인증하기 위한 DNSSEC(도메인 이름 시스템 보안 확장) 및 특정 IP 주소 또는 네트워크에 대한 서버 액세스를 제한하기 위한 액세스 제어 목록(ACL)과 같은 보안 기능을 제공한다.

  3. 구성 및 관리
    named.conf 구성 파일은 일반 설정, 영역 파일 및 기타 옵션을 관리하는 데 사용된다. Bind는 또한 관리 및 문제 해결을 위해 rndc 및 dig와 같은 다양한 명령줄 도구를 지원한다.

  4. 마스터 및 슬레이브 서버
    BIND는 마스터-슬레이브 구조를 사용하여 DNS 서비스를 제공한다. 마스터 서버는 도메인에 대한 모든 정보를 저장하고 관리하며, 슬레이브 서버는 마스터 서버로부터 정보를 복제하여 사용자의 요청에 응답한다. 이 구조를 사용하면 서버 간에 부하를 분산하고, 서버 장애 시 복구 시간을 줄일 수 있다.

  5. 정방향 및 역방향 조회
    BIND는 정방향 조회와 역방향 조회를 모두 지원한다. 정방향 조회는 도메인 이름을 IP 주소로 변환하는 것이고, 역방향 조회는 IP 주소에서 도메인 이름을 찾는 것이다.

다운로드 및 설치

1. BIND 설치

Ubuntu 및 Debian 시스템
sudo apt-get install bind9

CentOS 및 RHEL시스템
sudo yum install bind
sudo dnf install bind

* Debian 기반도 동일한지는 모르겠으나 RHEL 기반의 경우 bind와 함께 bind-utils, bind-libs을 다운받아주어야 한다. 몇몇 다른 블로그에서는 bind-chroot까지 받는 경우도 있었다.

*한번에 모든 파일 다운로드 받기
sudo dnf install bind bind-utils bind-libs...

2. 존 파일 구성
BIND 설정 파일(/etc/bind/named.conf.local 또는 /etc/named.conf 등)에 존 정보를 추가하고, 해당 존에 대한 리소스 레코드를 포함하는 존 파일을 작성한다. 존 파일에는 A 레코드, MX 레코드, CNAME 레코드 등 도메인에 대한 정보가 포함된다.

3. BIND 설정 파일 수정
/etc/bind/named.conf.options 또는 /etc/named.conf 파일에서 전역 설정을 수정할 수 있다. 예를 들어, DNS 포워더, 캐싱 옵션, 보안 설정 등을 구성할 수 있다.

4. BIND 서버 시작 및 확인
BIND 서버를 시작하고 정상적으로 작동하는지 확인한다. 예를 들어, sudo systemctl start named 또는 sudo systemctl start bind9 명령으로 서버를 시작한 후, sudo systemctl status named 또는 sudo systemctl status bind9 명령으로 서버 상태를 확인할 수 있다.

5. 방화벽 설정
DNS 서비스가 외부에서 접근 가능하도록 방화벽에서 UDP 포트 53을 열어준다.

6. 테스트
dig, nslookup 또는 host와 같은 도구를 사용하여 DNS 서버가 정상적으로 작동하는지 테스트한다. 그리고 연결되어 있는 가상화 장치나 실제 디바이스에서 설정한 도메인을 주소창에 검색해본다.


간단한 HTML 파일 생성

BIND 명령어는 도메인 생성과는 무관한 명령어 이지만 간단한 HTML 파일을 생성하는 명령을 실행하는 키 바인딩을 만들 수 있다.

1. 먼저 간단한 HTML 파일을 생성하는 셸 스크립트를 만든다. create_html.sh라는 파일에 다음 내용을 저장한다.

bash
Copy code
#!/bin/bash
cat << EOF > simple.html
<!DOCTYPE html>
<html>
<head>
  <title>Simple HTML</title>
</head>
<body>
  <h1>Hello, World!</h1>
</body>
</html>
EOF
echo "simple.html created successfully."

2. 다음을 실행하여 스크립트를 실행 가능하게 만든다.

chmod +x create_html.sh

3. 이제 특정 키 조합을 누를 때 create_html.sh 스크립트를 실행하도록 bind 명령으로 키 바인딩을 생성한다. 이 예에서는 Ctrl+Alt+H를 사용한다.

bind '"\e\C-h": "source /path/to/create_html.sh\n"'

4. /path/to/를 create_html.sh 스크립트의 실제 경로로 바꾼다.

5. 이 키 바인딩을 영구적으로 만들려면 bind 명령을 .bashrc 파일에 추가하여라.

echo 'bind '"'"'\e\C-h'"'"': "'"'"'source /path/to/create_html.sh\n'"'"'' >> ~/.bashrc

6. 다시 /path/to/를 create_html.sh 스크립트의 실제 경로로 바꾼다.

이제 Bash 셸에서 Ctrl+Alt+H를 누르면 create_html.sh 스크립트가 실행되고 simple.html이라는 간단한 HTML 파일이 생성된다. 이것은 HTML 파일을 생성하는 다소 색다른 방법이며 텍스트 편집기, 템플릿 엔진 또는 웹 프레임워크를 사용하는 것과 같이 HTML 파일을 생성하는 보다 효율적인 방법이 있다.


반응형
반응형
기본 사용 방법

Linux에서 리디렉션 기호는 명령의 입력 및 출력을 조작하는 데 사용된다. 이러한 기호를 사용하여 명령 출력을 저장하고, 일반 출력에서 ​​오류 메시지를 분리하고, 다른 명령에 대한 입력으로 파일 콘텐츠를 제공할 수 있다.

 

리디렉션에는 표준 입력(stdin), 표준 출력(stdout) 및 표준 오류(stderr)의 세 가지 주요 유형이 있다. 이러한 리디렉션에 사용되는 기호는 다음과 같다.

>: stdout을 파일로 리디렉션하고 파일이 있으면 덮어쓴다.
>>: stdout을 파일로 리디렉션하고 파일이 있는 경우 파일에 추가한다.
<: 파일을 stdin으로 리디렉션한다.
2>: stderr을 파일로 리디렉션하고 파일이 있으면 덮어쓴다.
2>>: stderr을 파일로 리디렉션하고 파일이 있는 경우 파일에 추가한다.
&> 또는 >&: stdout과 stderr을 모두 파일로 리디렉션하고 파일이 있으면 덮어쓴다.
&>> 또는 >>&: stdout 및 stderr을 모두 파일로 리디렉션하고 파일이 있는 경우 파일에 추가한다.

사용 예시

예시 1: ls 명령의 출력을 file_list.txt라는 파일로 리디렉션

$ ls > file_list.txt

이 명령은 ls 명령의 출력으로 file_list.txt 파일을 만들거나 덮어쓴다.

예시 2: date 명령의 출력을 log.txt라는 파일에 추가

$ date >> log.txt

이 명령은 기존 내용을 덮어쓰지 않고 log.txt 파일에 현재 날짜와 시간을 추가한다.

예시 3: grep 명령에 대한 입력으로 파일 내용 사용

$ grep 'pattern' < input.txt

이 명령은 input.txt 파일의 내용 내에서 지정된 패턴을 검색한다. grep 'pattern' input.txt와 동일하다.

예시 4: find 명령의 오류 출력을 errors.txt라는 파일로 리디렉션

$ find / -name "file.txt" 2> errors.txt

이 명령은 루트 디렉터리 및 해당 하위 디렉터리에서 "file.txt"라는 파일을 검색한다. 검색 중에 생성된 모든 오류 메시지(예: 권한 부족)는 errors.txt 파일에 기록되며 파일이 이미 있는 경우 내용을 덮어쓴다.

예시 5: errors.txt라는 파일에 find 명령의 오류 출력을 추가

$ find / -name "file.txt" 2>> errors.txt

이 명령은 이전 예제와 유사하지만 내용을 덮어쓰는 대신 errors.txt 파일에 오류 메시지를 추가한다.

예시 6: wget 명령의 stdout 및 stderr을 모두 download.log라는 파일로 리디렉션

$ wget https://example.com/file.zip &> download.log

이 명령은 지정된 URL에서 파일을 다운로드하고 표준 출력(예: 다운로드 진행률) 및 표준 오류(예: 오류 메시지)를 모두 download.log 파일에 기록하고 파일이 이미 있는 경우 내용을 덮어쓴다.

예시 7: wget 명령의 stdout 및 stderr을 모두 download.log라는 파일에 추가

$ wget https://example.com/file.zip &>> download.log

이 명령은 이전 예제와 유사하지만 콘텐츠를 덮어쓰는 대신 표준 출력과 표준 오류를 모두 download.log 파일에 추가한다.

반응형
반응형

이번 포스팅은 바로 전에 올린 몇몇 특수문자들의 특징에 대한 다음편이라고 보면 좋을 것 같다. 특히 grep 명령어는 정규 표현식과 자주 같이 사용되는데 이에 대해 같이 설명하면 좋으나 이 내용은 나중에 따로 "Linux 명령어" 카테고리에 올려놓도록 하겠다.

 

일반적으로 regex 또는 regexp로 정의되기도 하는 정규 표현식(Regular Expression)은 텍스트 데이터에서 패턴 일치 및 조작 매커니즘을 제공하는 언어이다. 이들은 grep, sed, awk와 같은 다양한 Linux 도구와 특정 패턴을 기반으로 텍스트를 검색, 필터링 및 수정하기 위한 많은 프로그래밍 언어에 사용된다.


정규식은 검색 패턴을 형성하는 일련의 문자로 주요 구성 요소 중 일부는 다음과 같다.


구성 요소
  1. 리터럴 문자: 문자, 숫자 및 구두점과 같이 자신과 일치하는 일반 텍스트 문자다.

  2. 메타문자: 정규 표현식에서 특정한 의미를 갖는 특수 문자다.

    .: 개행 문자를 제외한 모든 단일 문자와 일치한다.
    ^: 줄의 시작과 일치한다.
    $: 줄의 끝과 일치한다.
    *: 선행 문자 또는 그룹의 0개 이상의 발생과 일치한다.
    +: 하나 이상의 선행 문자 또는 그룹과 일치한다.
    ?: 선행 문자 또는 그룹의 0개 또는 1개 항목과 일치한다.
    \: 다음 문자의 특별한 의미를 이스케이프하여 리터럴 문자로 만든다.
    [...]: 괄호 안의 문자 중 하나와 일치하는 문자 클래스를 정의한다.
    [^...]: 대괄호 안에 있지 않은 모든 문자와 일치하는 부정 문자 클래스를 정의한다.
    {n}: 선행 문자 또는 그룹의 정확히 n번 항목과 일치한다.
    {n,}: 선행 문자 또는 그룹의 n개 이상의 발생과 일치한다.
    {n,m}: 선행 문자 또는 그룹의 최소 n개 및 최대 m개 발생과 일치한다.
    |: 교대를 나타내며 왼쪽 또는 오른쪽에 있는 표현식의 일치를 허용한다.
    (...): 문자 또는 표현식을 함께 그룹화하여 한정 기호를 전체 그룹에 적용할 수 있다.

  3. POSIX 문자 클래스: 일반적으로 사용되는 문자 그룹에 대해 미리 정의된 문자 클래스다.

    [:alnum:]: 영숫자 문자(문자 및 숫자).
    [:alpha:]: 알파벳 문자(글자).
    [:digit:]: 숫자(숫자).
    [:lower:]: 소문자.
    [:upper:]: 대문자.
    [:punct:]: 구두점 문자.
    [:space:]: 공백, 탭 및 줄 바꿈을 포함한 공백 문자

grep 명령과 함께 정규식 사용 예

특정 단어로 시작하는 줄 찾기

$ grep '^apple' fruits.txt

3글자 단어가 포함된 줄 찾기

$ grep -E '\b[a-zA-Z]{3}\b' fruits.txt

숫자 뒤에 소문자가 있는 행 찾기

$ grep -E '[0-9][a-z]' file.txt

 

반응형