8월, 2023의 게시물 표시

[Linux] Linux file permission (파일 및 디렉터리 권한 설정)

이미지
  리눅스에서 파일 및 디렉터리의 권한을 확인하고 변경하는 작업 은 시스템 보안 및 운영에 매우 중요한 부분입니다. 이 글에서는 리눅스 명령어를 이용해 파일 권한을 확인하고 변경하는 방법을 소개합니다. 테스트 환경 • Red Hat Enterprise Linux (RHEL)   Linux File permission 확인 리눅스에서는 ls 명령어를 통해 파일의 권한을 확인할 수 있습니다. # ls -l -rw-r-xr-x 1 root root 16 Apr 24 19:08 test.txt 위 출력 결과에서 파일 권한 외의 항목들(소유자, 소유 그룹, 크기, 수정 일자, 파일명 등)은 비교적 직관적으로 이해할 수 있습니다. 따라서 이 글에서는 파일 권한 부분을 중심으로 자세히 설명하겠습니다. 1. Linux file permission   1) Linux file permission 3가지 범주 소유자(user), 그룹(group), 그 외(other)   2) 리눅스 권한 3가지 읽기(Read), 쓰기(Write), 실행(Execute) 파일과 디렉터리에서는 권한의 의미가 약간 다릅니다. 특히 디렉터리에서 실행 권한(x)은 해당 디렉터리로의 진입을 허용한다는 점이 핵심입니다. 권 한 파일 디렉터리 읽기 (r)   파일을 읽을 수 있는 권한 디렉터리의 내용을 볼 수 있는 권한 쓰기 (w)     파일을 수정할 수 있는 권한         파일 및 디렉터리를 생성/삭제할 수 있음 실행 (x)     파일을 실행할 수 있는 권한   디렉터리 내부로 이동할 수 있음 ( cd ) 이 기준에 따라 test.txt 파일의 권한을 분석하면 다음과 같습니다. 소유자(root)는 파일을 읽고(r), 쓰고(w), 실행(x)할 수 있습니다. 그룹(root)은 읽기(r), 실행(x) 권한이 있습니다. 기타 사용자 도 읽기(r), 실행(x) ...

[Linux] RHEL(Red Hat Enterprise Linux) 개인 사용자 다운로드

이미지
RHEL(Red Hat Enterprise Linux)이 무엇인지 간략히 소개하고, 개인이 테스트용으로 RHEL OS를 다운로드하는 방법을 안내합니다. Red Hat Enterprise Linux(RHEL) Red Hat Enterprise Linux는 레드햇(Red Hat)에서 제공하는 리눅스 배포판 중 하나로, 흔히 줄여서 RHEL(렐)이라고 부릅니다. 참고로 레드햇은 2019년에 IBM에 인수된 바 있습니다. 최초에 레드햇의 OS 제품 명칭은 Redhat Linux였습니다. 이 배포판은 레드햇 창립자 중 한 명인 마크 유잉(Marc Ewing)이 제작한 것으로, 그는 평소 빨간 모자를 즐겨 써서 이러한 명칭이 붙었습니다. 이후 밥 영(Bob Young)을 CEO로 하여 레드햇(Red Hat)이라는 회사를 설립하게 됩니다. 레드햇은 초기에 CD 형태로 판매되는 Box 제품 인 Redhat Linux를 제공했지만, Redhat Linux 9 버전을 마지막으로 Box 제품 판매를 종료하고 오픈소스 기반의 페도라(Fedora) 프로젝트 로 전환합니다. 이 프로젝트를 기반으로 기업 고객을 위한 Red Hat Enterprise Linux (RHEL)을 서브스크립션 방식 으로 제공하게 되며, 이는 일정 기간(1~3년) 동안 제품을 사용하고 기술 지원을 받는 구독 모델 입니다. 서브스크립션 구매자는 해당 기간 동안 자유롭게 관련 버전을 다운로드하여 사용할 수 있습니다. RHEL 은 국내 대기업, 공공기관, 금융권 등에서 가장 널리 사용되는 리눅스 운영체제 중 하나입니다. 레드햇은 유료 제품이기 때문에, 과거에는 많은 사용자들이 이를 대체할 수 있는 CentOS 를 사용해 왔습니다. 그러나 CentOS의 지원이 종료되면서 최근에는 Rocky Linux 를 대안으로 선택하는 경우가 늘고 있습니다.   Red Hat 개발자 프로그램 레드햇은 개발자를 위해 개인용 Red Hat 개발자 서브스크립션 을 제공하고 있습니다. 이 프로그램은 기업에서는 사용할 수 없지만...

[Linux] RHEL Local YUM Repository 구성

이미지
RHEL(Redhat Enterprise Linux)에 Local YUM Repository 구성하는 방법에 대하여 설명합니다. 레드햇 리눅스 같은 경우 기업환경의 인터넷이 되지 않는 환경에서 사용되는 경우가 많은데 Local YUM Repository를 구성하여 패키지를 쉽게 설치할 수 있습니다.   테스트 환경 • Red Hat Enterprise Linux (RHEL)   Local YUM Repository 구성 목적 Local YUM Repository를 구성하는 방법에 여러 가지가 있지만 가장 간단한 방법인 설치 CD를 이용해 구성하는 방법에 대해 소개합니다. 주로 이 방법은 OS 엔지니어가 RHEL을 설치 후 사용하며, local repo를 서버에 구성한 뒤 철수합니다. 그러면 애플리케이션 측에서 추가 패키지를 요청하여도 서버 관리자분들이 yum 명령어를 사용하여 쉽게 서버에 설치할 수 있습니다.   Local YUM Repository 설정 레드햇 설치 CD에는 기본 RHEL 서브스크립션에서 제공하는 RPM 패키지들이 모두 포함되어 있습니다. 따라서 RHEL을 설치한 버전과 동일한 ISO 파일 이 준비되어 있어야 하며, 이를 통해 로컬 저장소를 구성할 수 있습니다.   VMware Workstation을 기준으로 설명하자면, RHEL ISO 파일을 가상 머신에 마운트 하면 됩니다. ISO 파일이 마운트되면 시스템은 자동으로 /dev/sr0 장치를 생성하게 되며, 이는 udev 에 의해 처리됩니다.   CD가 삽입되면 시스템에서는 /dev/sr0 장치를 자동으로 생성합니다. 이 장치는 **광학 디스크 장치(CD/DVD)**로 인식되며, 이를 확인하는 가장 쉬운 방법은 lsblk 명령어를 사용하는 것입니다. # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 2G 0 disk └─mpatha ...

[Linux] Restrict SU Command to root user(su command 사용자 제한 설정)

이미지
  su 명령어(substitute user)를 사용하면 일반 사용자도 root 권한을 획득할 수 있습니다. 기본적으로는 root 패스워드만 알고 있다면 누구나 su 명령어를 이용해 root로 전환이 가능합니다. 하지만 보안 강화를 위해, 지정된 사용자만 su 명령어를 사용할 수 있도록 제한할 수 있습니다. 이는 PAM(Pluggable Authentication Modules) 설정을 통해 구현할 수 있습니다.   su command 제한 목적 PAM 모듈 설정을 수정하면 지정된 사용자만 su 명령어를 사용할 수 있도록 제한할 수 있습니다. 운영 환경에서는 일반적으로 root 계정의 직접적인 SSH 접속을 차단하고, su 명령어 사용 역시 특정 사용자로 제한하여 root 권한 획득 경로를 통제하는 방식으로 보안을 강화합니다.   테스트 환경 다음과 같은 OS 버전에서 설정을 테스트하였습니다. RHEL 6 RHEL 7 RHEL 8 RHEL 9   wheel 그룹 사용자만 su command 사용하도록 설정 이 설정을 적용하면 su 명령어는 wheel 그룹에 속한 사용자만 사용할 수 있도록 제한됩니다. 설정 전, wheel 그룹에 필요한 사용자가 포함되어 있는지 반드시 확인해야 합니다. 특히 root 계정의 SSH 접속이 차단된 환경에서 wheel 그룹에 사용자 없이 설정을 적용하면, root 로그인은 콘솔 접근만 가능해집니다. VM이나 클라우드 환경에서는 문제가 없지만, 물리 서버의 경우 서버실에 직접 방문해야 할 수 있습니다. /etc/pam.d/su 파일에는 아래와 같은 라인이 기본적으로 주석 처리되어 있습니다. 이 주석을 해제하면 wheel 그룹 사용자만 su 명령을 사용할 수 있습니다. #auth required pam_wheel.so use_uid 설정 적용 및 사용자 그룹 추가 /etc/pam.d/su 파일에서 위 라인의 주석을 해제하여 w...

[Ansible Modules] Fetch module 설명 및 활용

이미지
  Ansible modules 중 하나인 Fetch module에 대해 알아보겠습니다. Fetch는 관리 대상 노드에서 제어 노드로 파일을 복사해 오는 데 사용되는 모듈입니다 Fetch module 이란 Fetch는 영어로 "가져오다"라는 의미입니다. Ansible의 copy 모듈과 반대로 동작하는 기능으로, copy 가 제어 노드에서 관리 노드로 파일을 전송하는 데 사용된다면, fetch 는 그 반대 방향으로, 관리 대상 노드의 파일을 제어 노드로 복사해 오는 데 사용됩니다. 여기서 제어 노드(control node)는 Ansible을 실행하는 노드를, 관리 노드(managed node)는 Ansible로 관리되는 대상 시스템을 의미합니다. Ansible modules(fetch_module) Fetch module 옵션   fetch 모듈에서 주로 사용되는 주요 옵션은 다음과 같습니다: src : 관리 대상 노드에서 복사해 올 파일의 경로입니다. dest : 제어 노드에 파일을 저장할 경로입니다. flat (기본값: false ) false : {{ inventory_hostname }}/path/to/file 형태의 디렉토리 구조로 파일이 저장됩니다. 호스트별로 디렉토리가 생성되므로 여러 노드에서 같은 파일 경로를 가져올 때 유용합니다. true : 파일 경로 구조 없이 파일만 단순 복사됩니다. 이름이 같은 파일은 덮어써지기 때문에, 관리 노드가 하나이거나 파일명이 충돌하지 않는 경우에 적합합니다. 또한 디렉토리를 지정할 경우 dest 경로 끝에 슬래시( / )를 반드시 붙여야 합니다. Fetch module 사용 방법 예제에서는 다음과 같은 인벤토리 파일을 사용합니다. [test] rocky86.lab.example.com rocky84.lab.example.com   예제 1. 기본값( flat: false )으로 파일 가져오기 fetch  모듈을 이용해 관리 노드의...

[Ansible plugins] 앤서블 플러그인이란 무엇인가 - what is plugin?

이미지
   Ansible에서 playbook을 작성할 때 modules 만큼 중요한 요소가 plugins 입니다. 이번 글에서는 Ansible plugins이 무엇인지, 그리고 어떤 역할을 하는지 간단히 살펴보겠습니다.   Ansible plugins ? Ansible 공식 문서에 따르면, plugins은 "Ansible의 핵심 기능을 확장하는 코드 모음이며, plugin 아키텍처를 통해 풍부하고 유연하며 확장 가능한 기능 세트를 가능하게 한다"고 설명되어 있습니다. Plugins are pieces of code that augment Ansible’s core functionality. Ansible uses a plugin architecture to enable a rich, flexible and expandable feature set. 즉, 플러그인은 Ansible이 원활히 작동하도록 지원하는 부가 기능이라 이해할 수 있습니다. 다만, 이 설명만으로는 다소 추상적으로 느껴질 수 있습니다. 그래서 실제로 Ansible에 어떤 종류의 plugins이 포함되어 있으며, 이들이 어떤 방식으로 실행을 보조하는지를 살펴보겠습니다.   Ansible plugins 종류 Ansible 2.9 버전 기준 공식 문서를 살펴보면, Ansible Core에 기본 포함된 다양한 plugin 목록을 확인할 수 있습니다. 이 목록을 보다 보면 Become , Inventory , Lookup , Vars , Filters 처럼 익숙한 이름이 눈에 띕니다. 이처럼 plugins는 모듈처럼 대상 노드에서 직접 작업을 수행하지는 않지만, 우리가 이미 사용 중인 인벤토리 , 변수 , Become 기능처럼 Ansible 실행에 필수적인 역할을 담당합니다. 아래 그림에서 보이는 각 이름은 plugin의 타입(type)을 나타내며, 하나의 타입 안에는 여러 개의 plugins가 포함되어 있습니다. 예를 들어, Beco...

[Ubuntu] Ubuntu 고정IP 설정

이미지
  Ubuntu 설치 시 기본값으로 DHCP가 활성화되어 있어 자동으로 IP가 할당됩니다. 하지만 서버 운영 환경에서는 대부분 고정 IP를 사용해야 하므로, DHCP 설정을 고정 IP로 변경하는 작업이 필요합니다. Windows에서는 IP를 수동으로 설정하지 않아도 되는 경우가 많지만, 서버에서는 네트워크 식별을 위해 고정된 IP를 사용하는 것이 일반적입니다. 이 글에서는 Ubuntu 22버전 이상에서 고정 IP를 설정하는 방법을 소개합니다. 테스트 환경 Ubuntu 22.04   Ubuntu IP변경 전 상태 확인 Ubuntu 설치 직후 기본 IP 설정 상태를 확인해보면 다음과 같습니다. root@master:~# ip addr show ... 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:ee:0d:6d brd ff:ff:ff:ff:ff:ff altname enp2s1 inet 192.168.243.178/24 metric 100 brd 192.168.243.255 scope global dynamic ens33 ... ens33 이라는 네트워크 인터페이스가 존재하며, 현재 DHCP를 통해 192.168.243.178 IP가 자동으로 할당된 상태입니다. Ubuntu에서는 netplan 이라는 도구를 사용해 네트워크 설정을 관리합니다. netplan get all 명령어를 사용하면 현재 설정 상태를 확인할 수 있습니다. root@master:~# netplan get all network: version: 2 ethernets: ens33: dhcp4: true 위 결과에서 ens33 인터페이스가 dhcp4: true 로 설정되어 있음을 알 수 있습니다. 해당 설정은 /et...