Linux 기초

OneDayDev·2023년 10월 4일
0

Linux

목록 보기
1/1

Linux 기초

본 글은 데비안 계열 Linux에 대해 간략하게 정리하기 위해 작성되었습니다.

사용자 및 그룹 관리

관련 파일

/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow

사용자 생성, 수정, 삭제

useradd [option] user-name 
usermod [option] user-name
userdel [option] user-name
groupadd [option] group-name
groupmod [option] group-name
groupdel [option] group-name
  • useradd -D 명령어로 확인 할 수 있는 기본 설정은 /etc/default/useradd 파일에 명시되어 있다.
  • /etc/skel 디렉토리는 사용자에 대한 기본적인 초기화 파일들을 저장하고 있다. 사용자를 생성할 때 /etc/skel 디렉토리 내의 모든 파일들이 해당 사용자의 홈 디렉토리로 복사된다.
  • /etc/login.defs 파일은 사용자나 그룹을 생성할 때 참고하는 기본 값들이 저장되어 있다.

sudo

/etc/sudoers 파일에 sudo 명령어를 사용할 수 있는 사용자를 등록한다. 최신 리눅스에서는 wheel 그룹의 구성원일 경우 sudo 명령을 사용할 수가 있다.

ACL

기본 접근 제어 리스트

getfacl 명령어와 setfacl 명령어를 이용해 파일의 acl을 확인 및 설정한다. setfacl 명령어를 재귀적으로 사용할 수 있다는 걸 염두해두자.

작업 스케줄링

단일성 작업 예약

at [option] time-spec

at 명령으로 등록한 작업은 atq명령으로 확인할 수 있다.

주기적인 작업 예약

cron과 anacron이 있다. 셧다운 상태에서 예약 작업을 수행해야 할 시점이 경과한 경우에 대해 차이를 보인다.

디스크

디스크 파티션

크게 MBR 방식과 GPT(GUID Partition Table) 방식으로 나눌 수 있다. 현재 대부분의 x86 리눅스는 GPT 파티션을 지원한다.

# 실제 시스템에 연결되어 있는 IDE 장치명 확인 
ls -l /dev/sd* # SATA/SCSI/SA-SCSI
ls -l /dev/sr* # CD-ROM/DVD-ROM 등의 ODD

디스크 도구

fdisk

x86 시스템의 MBR 파티셔닝을 위하여 사용해온 도구

gdisk

GPT 파티션 방식으로 파티션을 생성

parted

fdisk와 같은 디스크 파티셔닝 도구

파일 시스템 & 스왑 메모리

파일 시스템

디스크 기반 파일 시스템 : MINIX, EXT, XFS, FAT, ISO9660, UDFS
분산 파일 시스템 : NFS, SMB
Pseudo 파일 시스템 : swapfs, tmpfs, fdfs, procfs, devfs

주요 파일 시스템

ex4

  • ufs 파일 시스템과 유사함
  • POSIX 표쥰을 지원
  • ex3부터 저널링 기능이 추가됨
  • inode 사용

xfs

  • RHEL 7, CentOS 7 버전의 리눅스에서 기본 파일 시스템으로 사용되고 있음
  • POSIX 표준 파일 속성 및 확장 속성을 지원
  • 저널링 기능 제공
  • inode 사용. 내부 구조는 ex4와 같진 않음
  • ex4의 블록 그룹 대신 할당 그룹 용어를 사용하고 기본적으로 볼륨을 8개의 할당 그룹으로 분할한다.
  • 파일 탐색을 위해 B+트리를 사용한다.

파일 시스템 생성

mkfs -t [filesystem-type] partition
blkid # 블록 장치의 파일 시스템의 종류와 함께 UUID 출력
lsblk -f # 파일 시스템을 확인 - 트리 형태로 표현

마운트

파일 시스템을 생성한 후에는 파일 시스템에 접근할 수 있는 경로를 생성해야 한다. 이 과정을 마운트라고 한다.

mount [option] { partition | UUID } mount-point
unmount [option] { partition | UUID } # 마운트 해제

스왑 메모리

물리 메모리가 부족한 경우를 해결하기 위해 사용하는 방법이 가상 메모리.
가상 메모리 = 물리 메모리 + 스왑
CPU가 데이터를 접근하기 위해서는 프로세스가 물리 메모리 영역에 존재해야 하고, 이 때 만약 프로세스가 스왑 영역에 존재한다면, 스왑 영역의 데이터를 물리 메모리 영역으로 이동시키는 작업이 필요하다. 이 작업을 페이지 인이라고 하고 반대인 경우를 페이지 아웃이라고 한다. 그리고 두 작업을 통틀어 페이징이라고 한다.

swapon # 스왑 영역의 활성화와 영역 확인에 사용
free # 전체 물리 메모리 사이즈 및 사용량, 스왑 영역의 사용량 등을 출력
mkswap [patition]
swapoff 

위의 명령어를 활용해서 스왑 영역을 생성 및 삭제할 수 있다.

논리 볼륨

논리 볼륨 장점

  • 디스크 파티션의 구조와 상관없이 원하는 크기의 볼륨을 생성할 수 있다.
  • 볼륨을 쉽게 확장할 수 있다.
  • 데이터를 유지한 상태에서 논리 볼륨을 구성하고 있는 디스크를 제거할 수 있다.
  • RAID를 적용할 수 있다
  • 스냅샷 기능을 사용할 수 있다.

논리 볼륨을 구성할 때, 물리 볼륨 > 볼륨 그룹 > 논리 볼륨 순서로 진행된다.

명령어

논리 볼륨을 구성하기 위해 파티션 정보를 확인할 수 있는 명령은 lvmdiskcan 이다.
물리 볼륨 생성 및 삭제는 pvcreatepvremove명령을 사용한다. (상태 확인은 pvdisplay)
볼륨 그룹 구성은 vgcreatevgremote명령을 사용한다. (상태 확인은 vgdisplay)
논리 볼륨은 lvcreatelvremove명령을 사용한다. (상태 확인은 lvdisplay)

볼륨 그룹과 논리 볼륨 관리

볼륨 그룹 확장 > vgextend
볼륨 그룹 축소 > vgreduce
논리 그룹 확장 > lvextend
논리 그룹 축소 > lvreduce

Systemd

  • systemd는 기존의 init 프로세스를 대체하며 새로운 PID 1번 프로세스다.
  • 시스템 관리, 로그 관리, 서비스 관리, 초기화 스크립트 관리 등 시스템의 모든 부분에 관여한다.
  • init 프로세스에 대한 호환성 제공
  • systemd 유닛 사용 - 서비스 유닛, 타겟 유닛, 자동마운트 유닛, 장치 경로 ... 등이 있다.
  • 시스템 부팅 시 서비스 병렬 시작으로 부팅 시간 단축
  • On-demand 서비스 실행
  • 시스템 상태 스냅샷 지원
  • Upstart 대체
  • 의존성 기반 서비스 제어 로직 제공
  • CGroup 관리
  • systemctl을 사용한 사용자 정의 명령 미지원
  • 서비스에 대해서 5분의 타임아웃 적용
  • 소켓 버스 기반 활성화

systemctl

systemctl은 systemd 유닛을 관리하는 명령이다.

systemctl start [service] # 시작
systemctl stop [service] # 정지
systemctl status [service] # 상태 확인 
systemctl restart [service] # 재시작
systemctl enable [service] # 활성화
systemctl disable [service] # 비활성화

systemctl list-units # 시스템에 존재하는 유닛 중 실행 상태인 유닛을 확인
systemctl list-sockets # 시스템에서 대기 중인 소켓 유닛을 확인

systemctl is-active [service] # 특정 유닛 실행 확인
systemctl is-enabled [service] # 특정 유닛 활성화 확인
systemctl list-dependencies [service] # 특정 유닛 의존성 확인

그 밖에도 mask, unmask, reload 등을 활용해 유닛을 제어할 수 있다.

로그 관리

init -> syslog, systemd -> rsyslog
* rsyslog는 syslog에 비해 성능과 보안성이 향상되었음.
rsyslog에 systemd-journal이 추가되었음.
systemd-journal은 시스템에서 발생되는 모든 로그를 기록하고 바이너리 파일 형태로 저장한다.
저널 데이터 파일이 저장되는 /run 디렉토리는 메모리 기반 파일시스템인 tmpfs로 마운트 되어 있으므로 재부팅이 되면 저널 데이터 파일은 삭제된다.

systemd-journald 데몬은 /run/log/journal에 저널 데이터 파일을 생성하고 저장한 로그 중에서 syslog 형태의 로그를 rsyslogd로 전달한다. rsyslogd에 의해 수집되는 로그는 /var/log에 생성되고 저장.

로그 파일의 순환 과정은 logrotate 유틸리티를 사용하여 이루어진다. logrotate는 /etc/logrotate.conf 파일을 사용하여 설정할 수 있다.

/etc/rsyslog.conf 파일의 룰을 통해 저장할 로그의 종류 및 우선순위를 설정할 수 있고, 수신한 로그를 /var/log 디렉토리의 각 파일로 전달한다. /etc/rsyslog.conf 파일의 룰 부분은 필터와 액션으로 정의된다.

journal 데이터를 조회하기 위하여 journalctl 명령을 사용한다.

소프트웨어 패키지

레드햇 계열의 소프트웨어 패키지는 RPM(Redhat Package Manager)이다.
RPM 패키지는 rpm이라고 하는 저수준의 도구와 yum이라고 하는 고수준의 도구로 설치하거나 관리한다.
rpm은 설치에 사용되기 보다는 패키지에 대한 정보를 수집하거나 관리하는데 주로 사용되고, 패키지 설치는 rpm보다는 yum이 주로 사용된다.

rpm

rpm -q [query-option] [query-argument]

rpm -q -a # 설치된 모든 패키지의 이름과 버전 출력
rpm -q -f /var/www/html # -f : 패키지가 설치될 때 생성되는 파일을 출력
rpm -q -c httpd # -c : 패키지에 포함된 파일 중에서 설정파일을 출력
rpm -q -d httpd # -d : 패키지와 관련된 도움말 페이지를 포함하여 모든 문서관련 파일을 출력
rpm -q -l httpd # -l : 패키지에 포함된 모든 파일을 출력
rpm -q -s httpd # -s : 패키지 안의 파일들의 상태를 출력
rpm -q -i httpd # -i : 상세 정보를 출력
rpm -q -R httpd # -R : 패키지의 종속성을 출력

YUM(Yellowdog Updater Modified)

yum info httpd # 패키지 정보 확인
yum provides /etc/ssh/sshd_config # 지정된 파일과 관련된 패키지를 확인
yum search apache # 패키지를 검색
yum list # 패키지 목록을 확인
yum [-y] install package-name # 패키지 설치
yum [-y] update package-name # 패키지 업데이트
yum [y] remove package-name # 패키지 삭제
yum groups subcommand [argument] # 여러 개의 패키지들을 그룹화

패키지 설치 기록은 /var/log/yum.log파일을 확인하거나 yum history 명령을 사용해 기록을 조회할 수 있다.

네트워크 관리

ip 명령은 라우팅, 장치에 대한 설정을 조정하거나 보여주는 명령어
ifconfig 명령은 네트워크 인터페이스를 구성하거나 확인하기 위한 용도로 사용해 온 명령. 또한, 네트워크 인터페이스를 활성화 또는 비활성화시키거나 네트워크 설정을 변경할 수도 있다.
ifconfig 명령을 사용하여 네트워크 설정을 변경할 수 있지만, 변경된 설정이 영구적으로 적용되진 않는다.
영구적으로 변경하기 위해서 네트워크 관리자 서비스를 사용하는 방식을 사용해야 된다.

최신 리눅스에서는 설치 옵션에 따라 ifconfig 도구가 설치되지 않을 수 있다. 네트워크 관련 도구(ifconfig, netstat, route 등)가 포함된 net-tools 패키지를 설치하면 된다.

네트워크 정보 확인

ip route # 라우팅 테이블 확인 
traceroute [option] destination # 목적지까지 가는 라우터 경로를 출력 
tracepath [option] destination # traceroute에 비해 간결하게 출력됨
ping [option] destination # ICMP 패킷 주고받아서 네트워크 연결 확인 

네트워크 관리자

네트워크 관리자는 3가지 유형의 관리 도구를 제공한다

  • nmcli : 커맨드라인 도구
  • nmtui : 텍스트 유저 인터페이스 도구
  • nm-connection-editor : 그래픽 도구
nmcli connection show [option] [connection-name] # 연결 확인
nmcli connection add [subcommand] [args] [subcommand] [args] ...  # 연결 생성
nmcli connection delete connection-name # 연결 삭제
nmcli connection modify connection-name subcommand args  # 연결 수정
nmcli connection { up | down } connection-name # 설정 활성화 및 비활성화

hostname

호스트 이름은 static, transient, pretty 세 가지 방식으로 분류된다

  • static : /etc/hostname 파일에 저장
  • transient : 커널이 유지 관리하는 동적 호스트 이름. DHCP, mDNS로 변경될 수 있음
  • pretty : 자유 형식의 UTF8로 인코딩된 호스트 이름. 특수문자 표현 가능
    static과 transient 두 가지 방식으로 설정되어 있다면 static 호스트이름이 지정된다.

hostnamectl [set-hostname] 명령으로 호스트 이름을 확인 및 변경할 수 있다. 특수문자가 포함되지 않으면 static 포함되면 Pretty 호스트이름이 설정된다.

방화벽

리눅스에서 기본저긍로 제공하는 방화벽 서비스는 iptables과 firewalld가 있다.
iptables는 Netfilter라는 커널 모듈을 제어해서 패킷 필터링을 한다.
systemd와 함께 출시된 firewalld가 최신 리눅스의 기본 방화벽 서비스로 제공된다.
iptables는 룰을 변경할 때 서비스를 중지해야 하기 때문에 네트워크 변화가 수시로 발생되는 오픈스택이나 가상화에서 사용할 때 제한적이다. firewalld는 동적으로 방화벽 설정을 변경할 수 있어 대응할 수 있다.

firewalld의 특징

  • XML 파일형태로 보관
  • Runtime(운영 중일 때 재시작 없이 적용되는 설정. 재시작 시 삭제됨) 및 permanent(영구 적용, 서비스를 reload or restart 되어야 반영) 설정
  • 사전에 정의된 영역(Zone, 네트워크 연결에 대한 신뢰도를 정의한 것) - 패킷을 분류해서 처리하는 과정
  • 사전에 정의된 서비스(서비스와 포트번호 및 프로토콜을 미리 매핑)
  • D-Bus(메시지 버스 시스템) 사용 - 응용 프로그램 간에 교류할 수 있는 인터페이스 제공

firewalld 서비스의 설정과 관련된 파일들

  • /usr/lib/firewalld : firewalld 기본 구성과 관련된 파일과 대비용 파일 등이 저장
  • /etc/firewalld : firewalld에 실제로 적용되는 설정파일과 규칙이 저장

리치 규칙

방화벽 규칙을 세부적으로 설정할 때 사용.
특정 이벤트가 발생했을 때 해당 이벤트에 대한 로그나 감사 기록을 생성할 수 있다.

네트워크 티밍

티밍 : 여러 개의 물리 인터페이스를 묶어 하나의 논리 인터페이스로 구성하고 IP 주소를 부여하는 방식
티밍 의의 : 대역폭을 늘려 데이터 처리량을 높여주거나, 부하분산을 통해 효율성을 높이고, 트래픽 처리 속도를 향상시킬 수 있고, 네트워크 인터페이스에 장애가 발생했을 때 좀 더 안전한 네트워크 구성을 위해 설정

본딩은 커널 영역에서 이뤄지지만, 티밍은 사용자 영역에서 동작하기 때문에 쉽게 관리하고 운영할 수 있다.

티밍은 설정에 따라 트래픽 처리 방식이 달라지는데 여기에서 처리 방식을 결정해주는 것이 러너이다.
그리고 러너를 제어하고 인터페이스를 관리하는 등의 작업을 해주는 것이 teamd 데몬이다.

SELinux

SELinux는 리눅스 시스템의 보안을 강화해주는 커널 모듈이다. SELinux를 사용하면 DAC 모델이 아닌 MAC 모델을 사용한다.

마치며

작성해야 될 내용이 태산만큼 많지만 추후에 업데이트할 생각으로 마친다.

profile
안녕하세요.

0개의 댓글