[Linux 이론] 리눅스 기본 용어 정리 및 개발자와 엔지니어 차이점
목차 데몬(Linux daemon) 바이너리 소프트웨어 아키텍처 어플리케이션 API 프로토콜 서버 클라이언트 클러스터 개발자 vs 엔지니어 제가 2월 말에 막 IT에 입문을 시작하며 기본적인 용어들이 익숙하지 않아 많은 어려움이 있었습니다. 그래서 기본적인 용어들에 대해 정리해 보았고, 이 진로를 선택하니 "너는 개발자가 하고 싶어, 엔지니어가 하고 싶어?"라는 질문이 들어왔는데, 대답을 못했던 경험이 있어 간단히 조사하게 되었습니다. 이 글이 여러분께 도움이 되었으면 좋겠네요. 용어 정리 데몬(Linux daemon) 리눅스 데몬(Linux daemon)은 백그라운드에서 실행되며, 특정 기능을 수행하는 프로세스입니다. 일반적으로 시스템 부팅 시 자동으로 실행되어, 사용자가 로그인하지 않은 상태에서도 시..
2023.04.01
[Linux 이론] SELinux 파일 컨텍스트 제어 (fcontext)
목차 SELinux 컨텍스트 SELinux 컨텍스트 변경 semanage fcontext SELinux 기본 파일 컨텍스트 정책 정의 예 SELinux 컨텍스트 프로세스, 파일, 포트와 같은 모든 리소스에는 SELinux 컨텍스트로 레이블이 지정된다. SELinux는 /etc/ selinux/targeted/contexts/files/ 디렉터리에서 파일 레이블 지정 정책에 대한 파일 기반 데이 터베이스를 유지 관리한다. 새 파일은 해당 파일 이름이 기존 레이블 지정 정책과 일치하는 경우 기본 레이블을 가져온다. 새 파일의 이름이 기존 레이블 지정 정책과 일치하지 않는 경우에는 파일에 상위 디렉터리와 동일한 레이블이 상속된다. 레이블 상속을 사용하면 파일에 대한 명시적 정책이 존재하는지의 여부와 관계없이 ..
2023.03.24
[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 이론] 리다이렉션 기호(>, >>) 활용
기본 사용 방법 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
[Linux 이론] 특정 특수문자의 역할
목차 따옴표 백슬래시 중괄호 파이프 따옴표 작은따옴표(' ') 작은따옴표는 따옴표 안에 있는 각 문자의 리터럴 값을 보존한다. 즉, 변수 대체 또는 특수 문자 해석이 발생하지 않다. $ var="world" $ echo 'Hello $var' Output Hello $var (이 경우 셸은 $var 변수를 해석하지 않으며 출력은 리터럴 문자열 "Hello $var"다.) 큰따옴표(" ") 큰따옴표는 공백 및 기타 특수 문자를 유지하면서 특정 특수 문자(예: $, ` 및 )의 변수 대체 및 해석을 허용한다. $ var="world" $ echo "Hello $var" Output Hello world (여기서 쉘은 $var 변수를 해석하고 출력에서 ​​해당 값을 대체한다.) 백슬래시(\) 백슬래시는 다음 ..
2023.03.20
반응형

목차

  1. 데몬(Linux daemon)
  2. 바이너리
  3. 소프트웨어 아키텍처
  4. 어플리케이션
  5. API
  6. 프로토콜
  7. 서버
  8. 클라이언트
  9. 클러스터
  10. 개발자 vs 엔지니어

제가 2월 말에 막 IT에 입문을 시작하며 기본적인 용어들이 익숙하지 않아 많은 어려움이 있었습니다. 그래서 기본적인 용어들에 대해 정리해 보았고, 이 진로를 선택하니 "너는 개발자가 하고 싶어, 엔지니어가 하고 싶어?"라는 질문이 들어왔는데, 대답을 못했던 경험이 있어 간단히 조사하게 되었습니다. 이 글이 여러분께 도움이 되었으면 좋겠네요.


용어 정리
  1. 데몬(Linux daemon)
    리눅스 데몬(Linux daemon)은 백그라운드에서 실행되며, 특정 기능을 수행하는 프로세스입니다. 일반적으로 시스템 부팅 시 자동으로 실행되어, 사용자가 로그인하지 않은 상태에서도 시스템이 정상적으로 작동하도록 합니다. 데몬은 일반적으로 시스템의 핵심 기능과 밀접하게 관련되어 있으며, 파일 시스템, 네트워크, 웹 서버 등과 같은 서비스를 제공하는 역할을 합니다. 또한, 시스템 모니터링, 백업, 보안, 로깅 등과 같은 백그라운드 작업을 수행하기도 합니다. 데몬은 사용자가 직접 실행하거나 제어할 수 없으며, 일반적으로 시스템 관리자만이 제어할 수 있습니다.

  2. 바이너리
    리눅스 바이너리는 리눅스 운영 체제에서 실행되는 프로그램을 의미합니다. 이는 소스 코드를 컴파일한 결과물로, 일반적으로 실행 파일 또는 바이너리 파일이라고도 합니다. 이진 형식으로 작성되어 있으며, 실행 파일로 컴파일된 후 바로 사용할 수 있습니다. 리눅스 바이너리는 특정 CPU 아키텍처와 운영 체제 버전에 대해 컴파일되어야 하며, 다른 시스템에서 사용하려면 재컴파일이 필요할 수 있습니다. 이진 파일은 리눅스 시스템에서 사용되는 많은 유틸리티 및 프로그램의 핵심입니다.

  3. 소프트웨어 아키텍처
    소프트웨어 아키텍처(software architecture)는 소프트웨어 시스템을 구성하는 구성요소와 구성요소 간의 관계, 그리고 구성요소의 행위와 특성을 정의하는 개념적인 구조입니다. 즉, 소프트웨어 시스템을 설계하고 개발할 때 시스템의 구조, 구성요소의 역할과 책임, 그리고 구성요소 간의 상호작용을 정의하는 것을 말합니다. 이를 통해 소프트웨어 시스템을 구조화하고, 개발과 유지보수를 용이하게 할 수 있습니다.

  4. 어플리케이션
    어플리케이션은 컴퓨터나 모바일 디바이스 등에서 실행되는 소프트웨어 프로그램을 일컫는 용어입니다. 일반적으로 업무나 개인적인 용도로 사용되며, 사용자들이 컴퓨터나 모바일 디바이스에서 원하는 작업을 수행하도록 해줍니다. 예를 들어, 워드 프로세서나 게임 등이 어플리케이션의 일종입니다. 이러한 어플리케이션은 일반적으로 운영 체제에 종속되며, 사용자는 운영 체제에서 제공하는 인터페이스를 통해 어플리케이션을 실행하고 조작할 수 있습니다.

  5. API
    API란 응용 프로그램에서 데이터 및 서비스를 공유하기 위한 인터페이스입니다. 즉, 응용 프로그램 간에 서로 통신할 수 있는 방법을 제공합니다. API를 사용하면 데이터와 기능을 다른 응용 프로그램에서 사용할 수 있으며, 이는 소프트웨어 개발을 더욱 효율적이고 생산적으로 만들어 줍니다. API는 주로 웹 서비스에서 사용되며, 일반적으로 REST, SOAP 및 XML-RPC와 같은 프로토콜을 사용하여 구현됩니다.

  6. 프로토콜
    프로토콜은 서로 다른 두 시스템이나 장치들이 통신을 하기 위한 약속된 규약이나 규칙을 의미합니다. 예를 들어, 인터넷에서 데이터를 주고받을 때 사용되는 TCP/IP 프로토콜은 데이터 전송에 대한 규칙과 약속들을 정해놓은 것입니다. 프로토콜은 데이터를 주고받는 방법뿐만 아니라 데이터의 형식, 전송 속도, 보안 등 다양한 측면에서 규정될 수 있습니다. 따라서 프로토콜은 컴퓨터 네트워크나 통신 분야에서 중요한 역할을 합니다.

  7. 서버
    서버란 네트워크 상에서 다른 컴퓨터나 장치들이 네트워크를 통해 접근할 수 있는 중앙 컴퓨터 혹은 컴퓨터 시스템을 말합니다. 일반적으로 서버는 다수의 클라이언트들에 대해 처리하고, 파일, 데이터, 애플리케이션 등을 저장하고 관리합니다. 서버는 네트워크 환경에서 중앙 집중식으로 관리할 수 있는 구성 요소 중 하나입니다.

  8. 클라이언트
    클라이언트란 네트워크에서 다른 컴퓨터나 서버와 통신하여 그 서비스나 자원을 요청하고 사용하는 컴퓨터 또는 프로그램을 말합니다. 클라이언트는 서버에 접속하여 서버가 제공하는 서비스를 사용할 수 있습니다. 예를 들어, 인터넷을 사용할 때 웹 브라우저를 클라이언트로 사용하여 웹 사이트를 요청하고, 서버에서 제공하는 정보를 받아와 보는 것이 그 예입니다.

  9. 클러스터
    클러스터는 여러 대의 컴퓨터를 하나로 묶어서 하나의 컴퓨팅 자원처럼 사용할 수 있도록 만든 컴퓨터 시스템입니다. 이를 통해 컴퓨터 자원을 보다 효율적으로 활용하고, 안정적인 서비스 제공이 가능해집니다. 클러스터는 하드웨어나 소프트웨어적으로 연결되어 있으며, 여러 대의 서버를 사용하여 더 높은 가용성과 성능을 제공할 수 있습니다. 또한, 클러스터링은 대규모 데이터 처리나 고성능 컴퓨팅 등에 많이 사용됩니다.

개발자 vs 엔지니어

개발자는 주로 소프트웨어를 만드는데 집중하며, 해당 소프트웨어의 설계와 개발, 테스트 및 유지보수를 수행합니다. 이러한 개발자들은 프로그래밍 언어나 기술에 대한 전문 지식을 가지고 있으며, 적극적으로 새로운 기술과 툴을 탐색하고 적용하는 것을 선호합니다. 또한 개발자들은 소프트웨어의 기능과 디자인 측면에 관심을 가지고 있으며, 사용자가 소프트웨어를 사용하는 방법을 고려합니다.

반면에 엔지니어는 보다 넓은 시야에서 시스템 전체를 이해하고, 소프트웨어 시스템과 하드웨어 시스템 모두를 다룹니다. 이러한 엔지니어들은 주로 시스템의 아키텍처와 인프라스트럭처를 설계하며, 운영체제, 네트워크, 서버, 스토리지, 보안 등의 기술 분야에 대한 지식이 필요합니다. 엔지니어들은 이러한 기술들을 사용하여 하드웨어와 소프트웨어 시스템을 최적화하고, 시스템의 안정성, 보안성, 확장성 등을 유지보수합니다. 엔지니어들은 보통 비즈니스 요구사항을 고려하고, 사용자들이 기술적인 문제 없이 시스템을 사용할 수 있도록 지원합니다.

 

반응형
반응형

목차

  1. SELinux 컨텍스트
  2. SELinux 컨텍스트 변경
  3. semanage fcontext
  4. SELinux 기본 파일 컨텍스트 정책 정의

SELinux 컨텍스트

프로세스, 파일, 포트와 같은 모든 리소스에는 SELinux 컨텍스트로 레이블이 지정된다. SELinux는 /etc/ selinux/targeted/contexts/files/ 디렉터리에서 파일 레이블 지정 정책에 대한 파일 기반 데이 터베이스를 유지 관리한다.

 

새 파일은 해당 파일 이름이 기존 레이블 지정 정책과 일치하는 경우 기본 레이블을 가져온다. 새 파일의 이름이 기존 레이블 지정 정책과 일치하지 않는 경우에는 파일에 상위 디렉터리와 동일한 레이블이 상속된다. 레이블 상속을 사용하면 파일에 대한 명시적 정책이 존재하는지의 여부와 관계없이 모든 파일이 생성될 때 항상 레이블이 지정된다.

 

기존의 레이블 지정 정책이 있는 기본 위치에 파일이 생성되거나 사용자 지정 위치에 대한 정책이 있는 경우 새 파일에 올바른 SELinux 컨텍스트로 레이블이 지정된다. 그러나 기존 레이블 지정 정책 없이 파일이 예 기치 않은 위치에 생성되면 상속된 레이블이 새 파일의 의도된 용도에 맞지 않을 수 있다.

 

또한 파일을 새 위치에 복사하면 해당 파일의 SELinux 컨텍스트가 새 위치의 레이블 지정 정책 또는 상위 디렉터리 상속(정책이 없는 경우)으로 결정된 새 컨텍스트로 변경될 수 있다.

 

복사하는 동안 파일의 SELinux 컨텍스트를 보존하여 파일의 원래 위치에 대해 결정된 컨텍스트 레이블을 유지할 수 있다. 예를 들어 cp -p 명령은 가능한 경우 모든 파일 특성을 유지하고, cp -c 명령은 복사하는 동안 SELinux 컨텍스트만 유지한다.


SELinux 컨텍스트 변경

파일의 SELinux 컨텍스트는 semanage fcontext, restorecon, chcon 명령으로 변경한다. 파일의 컨텍스트를 설정하는 데 권장되는 방법은 semanage fcontext 명령을 사용하여 파일 컨텍스트 정책을 생성한 다음 restorecon 명령을 사용하여 정책에 지정된 컨텍스트를 파일에 적용하는 것이다.

 

이 방법을 사용하면 필요할 때마다 restorecon 명령을 사용하여 파일의 레이블을 올바른 컨텍스트로 쉽 게 다시 지정할 수 있다. 이 방법의 장점은 컨텍스트가 무엇인지 기억할 필요가 없으며 파일 집합에서 컨 텍스트를 쉽게 수정할 수 있다는 것이다.

 

chcon 명령은 SELinux 컨텍스트를 파일에 직접 설정하지만 시스템의 SELinux 정책은 참조하지 않는예다. chcon은 테스트 및 디버깅에 유용하지만 이 방법을 사용하여 컨텍스트를 수동으로 설정하는 것은 일시적이다. 수동으로 설정한 파일 컨텍스트는 재부팅 후에도 유지되지만 restorecon을 실행하여 파일 시스템 콘텐츠에 레이블을 다시 지정하는 경우 바뀔 수 있다.


semanage fcontext

파일 컨텍스트 매핑은 SELinux에서 시스템에 있는 파일 및 디렉토리의 보안 컨텍스트를 결정하는 데 사용되며, 이에 따라 적용되는 권한 및 액세스 제어가 결정된다.

semanage fcontext의 목적은 특정 파일 및 디렉토리에 대한 보안 설정 또는 "컨텍스트"를 정의하고 관리하는 것이다. 이러한 컨텍스트는 SELinux에서 각 파일 및 디렉토리에 대해 허용 또는 거부되는 작업(예: 읽기, 쓰기, 실행)을 결정하는 데 사용된다.


SELinux 기본 파일 컨텍스트 정책 정의

semanage fcontext 명령은 기본 파일 컨텍스트를 결정하는 정책을 표시하고 수정한다. semanage fcontext -l 명령을 실행하여 모든 파일 컨텍스트 정책 규칙을 나열할 수 있다. 이러한 규칙은 확장 된 정규 표현식 구문을 사용하여 경로 및 파일 이름을 지정한다.

 

정책을 볼 때 가장 일반적인 확장 정규 표현식은 (/.*)?이며, 일반적으로 디렉터리 이름에 추가된다. 이 표기법은 유머러스하게 해적이라고 한다. 얼굴에 눈 가리개가 있고 그 옆에 갈고리 손이 있는 것처럼 보이 기 때문이다.

 

이 구문은 '슬래시로 시작하고 그 뒤에 임의의 수의 문자가 있는 문자 집합'으로 설명되며, 집합은 있을 수도 있고 없을 수도 있다. 더 간단히 말하면 이 구문은 비어 있는 경우에도 디렉터리 자체와 일치하지만 해당 디렉터리 내에 생성된 거의 모든 파일 이름과 일치한다.


새 파일 컨텍스트 매핑을 추가한다.

semanage fcontext -a -t my_custom_type_t '/path/to/directory(/.*)?'

이 명령은 /path/to/directory 및 그 내용에 대한 새 파일 컨텍스트 매핑을 추가하여 SELinux 유형 my_custom_type_t를 지정된 파일 및 디렉토리에 할당한다.

기존 파일 컨텍스트 매핑을 수정한다.

semanage fcontext -m -t new_type_t '/path/to/directory(/.*)?'

이 명령은 /path/to/directory 및 그 내용에 대한 파일 컨텍스트 매핑을 수정하여 SELinux 유형을 new_type_t로 변경한다.

파일 컨텍스트 매핑을 삭제한다.

semanage fcontext -d '/path/to/directory(/.*)?'

이 명령은 /path/to/directory 및 그 내용에 대한 파일 컨텍스트 매핑을 제거한다.

모든 파일 컨텍스트 매핑을 나열한다.

semanage fcontext -l

이 명령은 현재 시스템에 정의된 모든 파일 컨텍스트 매핑을 나열한다.

semanage fcontext를 사용하여 파일 컨텍스트 매핑을 수정한 후 일반적으로 restorecon 명령을 실행하여 파일 및 디렉토리에 새 컨텍스트를 적용해야 한다.

restorecon -Rv /path/to/directory

이 명령은 semanage fcontext에 의해 정의된 새 매핑을 기반으로 지정된 파일 및 디렉토리의 SELinux 컨텍스트를 업데이트한다.

SELinux 부분은 사실 현업에서는 잘 사용되지는 않는다고 한다. 때문에 참고만하고 시험을 준비하고 있다면 합격을 해야할 테니 알아두는 것이 좋다.

반응형
반응형

목차

  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를 관리할 수 있다.


 

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

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

 

반응형
반응형

목차

  1. 따옴표
  2. 백슬래시
  3. 중괄호
  4. 파이프

따옴표

작은따옴표(' ')
작은따옴표는 따옴표 안에 있는 각 문자의 리터럴 값을 보존한다. 즉, 변수 대체 또는 특수 문자 해석이 발생하지 않다.

$ var="world"
$ echo 'Hello $var'

Output
Hello $var (이 경우 셸은 $var 변수를 해석하지 않으며 출력은 리터럴 문자열 "Hello $var"다.)

큰따옴표(" ")
큰따옴표는 공백 및 기타 특수 문자를 유지하면서 특정 특수 문자(예: $, ` 및 )의 변수 대체 및 해석을 허용한다. 

$ var="world"
$ echo "Hello $var"

Output
Hello world (여기서 쉘은 $var 변수를 해석하고 출력에서 ​​해당 값을 대체한다.)

백슬래시(\)

백슬래시는 다음 문자의 특별한 의미를 억제하기 위한 이스케이프 문자로 사용된다. 예를 들어 큰따옴표 문자열 안에 리터럴 달러 기호($) 또는 큰따옴표(")를 포함하려는 경우 백슬래시를 사용할 수 있다.

$ var="world"
$ echo "Hello \$var"

Hello $var (이 경우 백슬래시가 달러 기호를 이스케이프하여 변수 대체를 방지한다.)
$ echo "This is a \"quote\" within a quote."

Output
This is a "quote" within a quote.
(여기에서 백슬래시는 내부 큰따옴표를 이스케이프하여 출력에서 ​​리터럴 문자로 처리되도록 한다.)

백슬래시는 이외에도 줄을 바꿔줄 때도 사용할 수 있다. 즉, 입력을 하다 끝에 ' \ '를 입력하고 엔터를 치면 이어서 작성할 수 있다.

$ echo 'hello world, everything will be okey \
have a nice day reader.'

Output
hello world, everything will be okey have a nice day reader.

중괄호 {}

Linux에서 중괄호 {}는 단일 표현식으로 여러 문자열 또는 패턴을 생성하는 메커니즘인 중괄호 확장을 만드는 데 사용된다. 중괄호 확장은 시퀀스를 생성하거나 여러 파일에서 배치 작업을 수행하는 데 유용하다.

$ echo file{1,2,3}.txt

Output
file1.txt file2.txt file3.txt
(이 예에서 중괄호 확장은 중괄호 안에 1, 2 및 3 값을 대체하여 세 개의 개별 문자열을 생성한다.)

중괄호 확장은 범위와 함께 사용할 수도 있다.

$ echo file{1..5}.txt

Output
file1.txt file2.txt file3.txt file4.txt file5.txt
(이 경우 중괄호 확장은 '1'에서 '5'까지의 숫자 범위를 반복하여 5개의 문자열 시퀀스를 생성한다.)

문자와 함께 중괄호 확장을 사용할 수도 있다.

$ echo file{a..d}.txt

Output
filea.txt fileb.txt filec.txt filed.txt

중괄호 확장을 결합하고 중첩하여 더 복잡한 패턴을 생성할 수 있다.

$ echo {A,B}{1..3}

Output
A1 A2 A3 B1 B2 B3
(이 예에서 중괄호 확장은 'A' 및 'B' 값을 '1'에서 '3'까지의 숫자와 결합하여 6개의 문자열을 생성한다.)

중괄호 확장은 종종 cp, mv 또는 mkdir과 같은 명령과 함께 사용되어 여러 파일 또는 디렉토리에서 작업을 수행한다.

$ mkdir project{1,2,3}
(이 명령은 project1, project2 및 project3이라는 세 개의 디렉토리를 만든다.)

이중 중괄호 {{ }}

이중 중괄호 {{ }}는 그 자체로 특별한 의미나 기능을 갖지 않는다. 그러나 일반적으로 Ansible, Jinja2 또는 Mustache와 같은 다양한 구성 관리 및 템플릿 도구와 함께 구성 파일 또는 템플릿에 사용된다.

이러한 도구는 이중 중괄호를 사용하여 변수 대체를 위한 자리 표시자를 나타내거나 구성 파일 또는 템플릿을 처리하는 동안 평가하고 해당 값으로 대체해야 하는 표현식을 지정한다.

  • 간단한 Ansible 플레이북 playbook.yml 예시
---
- hosts: localhost
  tasks:
    - name: Display a message with a variable
      debug:
        msg: "Hello, {{ name }}!"

이 플레이북에서는 이중 중괄호 {{ }}를 사용하여 name이라는 변수를 나타낸다. 이 플레이북이 실행되면 Ansible은 {{ name }}을 변수 name의 값으로 바꾼다.

이제 변수 정의가 포함된 vars.yml 파일을 만든다.

---
name: "world"

다음 명령을 사용하여 Ansible 플레이북을 실행할 수 있다.

$ ansible-playbook -i localhost, -c local -e @vars.yml playbook.yml

실행시 출력 메시지

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Display a message with a variable] ***************************************
ok: [localhost] => {
    "msg": "Hello, world!"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

출력에서 플레이북의 {{ name }} 자리 표시자가 name 변수의 값인 "world"로 대체된 것을 볼 수 있다.

파이프 |

한 명령의 출력을 다른 명령의 입력으로 보내는 과정인 파이핑에 파이프 기호(|)를 사용한다. 이를 통해 임시 파일 없이 강력한 명령 체인을 생성하고 데이터를 보다 효율적으로 처리할 수 있다.

다음과 같은 과일 목록이 포함된 fruits.txt라는 파일이 있다고 가정한다.

apple
banana
orange
grape
watermelon

이름이 5자 이상인 과일의 총 개수를 찾으려고 한다. grep, wc 및 파이프 기호 |의 조합을 사용하여 이를 달성할 수 있다.

$ cat fruits.txt | grep -E '^.{6,}$' | wc -l

이 예에서는 다음 명령을 사용하고 해당 출력을 파이프한다.
  • cat fruits.txt
    이 명령은 fruits.txt 파일의 내용을 읽고 파이프 기호(|)를 통해 다음 명령으로 보낸다.

  • grep -E '^.{6,}$'
    이 명령은 문자가 6개 이상인 행만 일치시켜 입력 행을 필터링한다(주어진 정규식 기반). 그런 다음 출력이 다음 명령으로 전달된다.

  • wc -l
    이 명령은 입력된 줄의 수를 세는데, 이는 이름이 5자보다 긴 과일의 수에 해당한다.

 

이 명령 체인의 최종 출력은 '2'이며 이름이 5자보다 긴 과일(오렌지 및 수박)의 총 수이다.


반응형