2024.06.19 - [Linux] - Linux Basic (CentOS 7)

✔ 서비스 관리 명령어

- 서비스 동작을 관리하는 명령어

# systemctl [서브 명령어] [서비스]

서브 명령어 설명
start 서비스 실행
restart 서비스 재실행
stop 서비스 중지
status 서비스 상태 확인
enable 부팅 시 서비스 자동 실행
disable enable 해제
reload 설정 파일 다시 불러오기

 


✔ 방화벽 기본 명령어 (firewalld)

◾ 방화벽 실행 상태 확인

# firewall-cmd --state

 

방화벽 설정 상태 확인

# firewall-cmd --list-all (--zone=public) : 생략(기본값)

※ 상태 기반 방화벽

- 나가는 것들은 다 보내주고 들어오는 것만 막음

- 나가는 패킷을 기억하고 있다가 응답 패킷을 받음

 

방화벽 설정 다시 불러오기

# firewall-cmd --reload

 

방화벽에 서비스 및 포트 등록 / 해제

 - 일시적(런타임) : 등록 즉시 방화벽에 적용됨, 설정을 다시 불러오거나 재시작 시 없어짐

 - 영구적 : 등록을 해도 바로 적용이 안됨, 설정을 다시 불러오거나 재시작 시 적용됨

 

 서비스로 등록 및 해제

- 등록
# firewall-comd --add-service=[서비스 이름] 일시적
# firewall-cmd --add-service=[서비스 이름] --permanent 영구적
# firewall-cmd --add-service={서비스1, 서비스2, 서비스3, ⋯} 여러 서비스 등록
- 해제
# firewall-cmd --remove-service=[서비스 이름]  

 

◾ 포트로 등록 및 해제

- 등록
# firewall-cmd --add-port=[포트 번호]/[udp/tcp] 일시적
# firewall-cmd --add-port=[포트 번호]/[udp/tcp] --permanet 영구적
# firewall-cmd --add-port={포트1/tcp, 포트2/udp, ⋯} 여러 포트 등록
- 해제
# firewall-cmd --remove-port=[포트 번호]/[udp/tcp]  

✔ 서비스 구축 순서

1. 서비스에 필요한 패키지 찾기

2. 패키지 버전 확인

3. 패키지 설치

4. 설정 및 확인 (시작을 해야 가능한 경우도 존재)

5. 서비스 시작 # systemctl restart [서비스]

6. 서비스 확인 # systemctl status [서비스]

7. 방화벽 설정

8. 방화벽 설정 확인 # firwall-cmd --list-all

9. 포트 상태 확인 # netstat -nltp | grep [포트 번호]


✔ 파일 압축

- xz, bzip2, gzip, zip, compress

← 갈수록 압축률이 좋다

 

◾ 압축

명령어 옵션 압축 후 파일 확장자
xz [파일] -k 옵션 사용 시 원본 남음 [파일].xz
bzip2 [파일] -k 옵션 사용 시 원본 남음 [파일].bz2
gzip [파일]   [파일].gz
zip [결과이름].zip [파일]   [파일].zip

 

◾ 압축 해제

명령어 옵션
xz -d [파일].xz  
bzip2 -d [파일].bz2 bunzip2 [파일].bz2
gzip -d [파일].gz gunzip [파일].gz
unzip [파일].zip -d [디렉토리] [디렉토리] 안에 압축 해제
-q 압축 과정 안보이기

 

◾ 파일 묶기 (자주 사용)

- tar를 사용하여 디렉토리나 여러 개의 파일을 묶어서 하나의 파일로 만듦

 

# tar [옵션] [결과이름].tar [대상]

동작 옵션 일반 옵션 압축 옵션
c 묶기 f 필수 옵션 J xz
x 풀기 v 진행 과정 확인 j bzip2
r 추가     z gzip
t 확인        
        [결과이름].tar.[xz/bz2/gz]

✔ Process

Process란?

- 현재 실행중인 프로그램

→ 프로그램을 설치하면 디스크에 저장됨

→ 특정한 목적을 위해 프로그램을 실행하면 메모리에 상주

→  이렇게 실행되어 메모리에 상주하게 되는 프로그램을 프로세스라 함

- 모든 프로세스는 프로세스 번호(PID)가 할당되어 관리

- 모든 프로세스는 부모-자식 관계를 가지고 있으며, 부모 프로세스를 종료하면 자식 프로세스도 종료됨

 

◾ Systemd

- 서비스와 프로세스를 관리해오던 init 프로세스가 CentOS 7 버전 부터 systemd라는 데몬 프로세스로 대체

- 시스템 관리, 로그 관리, 서비스 관리, 초기화 스크립트 관리 등의 시스템 관리의 전반적인 작업 수행

- PID번호 1번을 사용하는 최상위 프로세스이며 시스템 부팅될 때 최초로 실행되는 프로세스

 

▫ 기능 및 특징

- init 프로세스에 대한 호환성 제공

- 시스템 부팅 시 서비스 병렬 시작

   전원 켜기 → 바이오스 → 부트로더 → 커널 → systemd → 부팅 완료

: 시스템이 부팅될 때 최소한의 서비스로만 실행하여 부팅 시간 단축

→ 그 후 필요한 서비스들은 병렬로 실행

 

◾ 프로세스 종류

▫ Foreground Process

- 실행하면 화면에 나타나서 사용자와 상호 작용을 하는 프로세스

- 어떤 명령을 실행하면 동작이 끝날 때 까지 기다려야 하는 프로세스

- 대부분의 응용 프로그램

 

▫ Background Process

- 실행은 되어 있지만 화면에는 나타나지 않는 프로세스

- 서버 데몬

 

▫ Daemon Process

- 서비스를 제공하는 프로세스(서버 역할을 할 수 있게 하는 프로세스)

- 보통 뒤에 'd'가 붙음

 

▫ Orphan Process(고아 프로세스)

- 자식 프로세스가 실행 중일 때 부모 프로세스가 종료된 자식 프로세스

- 1번 프로세스가 고아 프로세스의 부모 프로세스가 되어 작업(종료) 지원

 

▫ Zombie Process

- 프로세스가 실행 종료가 되었는데도 테이블 목록에 남아있는 프로세스

 

◾ 작업 전환하기 (Foreground ↔ Background)

- 어떤 작업을 잠깐 멈췄다가 백그라운드 혹은 포그라운드로 실행

- 작업 일시중지, 작업 대기 : Ctrl+z

- 작업 끝내기 : Ctrl+c

- 작업 프로세스 확인 : jobs

 

◾ Kill

- 프로세스에 특정한 시그널을 보내는 명령

- 시그널 번호 없이 kill을 한 경우는 프로세스 정상 종료(15)

- 시그널 번호 9번은 강제 종료

kill -[시그널 번호] [PID 또는 %작업번호]

 

◾ ps

- 사용자의 실행 중인 프로세스 목록을 확인

- ps 명령이 내려진 순간 실행 중인 프로세스 목록을 스크린샷 찍듯이 그 순간의 프로세스를 보여줌

- 주로 같이 사용하는 옵션 : -ef, aux

-e 모든 프로세스를 출력
-f UID, PID, PPID 등 함께 출력
aux 프로세스 소유자를 기준으로 모든 프로세스 출력, 프로세스의 CPU 사용량, 메모리 사용량 등과 함께 출력

 

◾ top

- 프로세스를 실시간(약 5초마다)으로 볼 수 있음

1. top 실행 후 사용할 수 있는 옵션

shift + t 실행된 시간이 큰 순서로 정렬
shift + m 메모리에 사용량이 큰 순서로 정렬
shift + p  cpu 사용량이 큰 순서로 정렬
 k Process 종료
- k 입력 후 종료할 PID 입력
- signal을 입력하라 표시되면 9를 넣어줌
c 명령 인자 표시 / 비표시
l(소문자 L) uptime line(첫번째 행)을 표시 / 비표시
space bar Refresh
u 입력한 유저 소유의 Process만 표시
- which user와 같이 유저를 입력하라 표시 될 때 Userㄹ를 입력
- blank(공백) 입력시 모두 표시
shift + b 상단의 uptime 및 기타 정보 값을 블락 선택해 표시
f 화면에 표시될 프로세스 관련 항목 설정
i idle 또는 좀비 상태의 프로세스는 표시 되지 않음
d [sec] 설정된 초 단위로 Refresh
z 출력 색상 변경
c command 뒤에 인자값 표시
q 명령어 종료

 

2. top 실행 전 옵션 : top의 정보들을 서식으로 출력하기 위한 옵션

-b 배치모드 옵션
-n top 실행 주기를 설정
-p process ID
※ 특정 프로세스 모니터링
top -H -p [pid]

※ Load Average : 각 1분, 5분, 15분 간의 시스템 부하율

 

3. ps와 top의 차이점

ps는 ps한 시점에 proc에서 검색한 cpu 사용량

top은 proc에서 일정 주기로 합산해서 cpu 사용율을 출력


✔ 파일 시스템

◾ 파일 시스템이란?

- 운영체제가 파티션이나 디스크에 데이터를 저장하고 읽고, 쓰고, 찾기 위해 구성하는 체계

- 운영체제를 설치하기 전에 파티션 분할 작업 후 포맷 → 포맷이라는 작업을 통해 파일 시스템 구축

- 파일 시스템의 종류에 따라 지원하는 파티션의 갯수, 크기, 파일 크기, 파일 이름의 길이 등 차이가 있음

 

◾ 파일 시스템의 기능

- 사용자가 파일을 생성, 수정, 삭제할 수 있도록 제공

- 파일을 사용하기 적합한 형태의 구조로 구성, 추가 정보 제공

- 다른 사용자와 공동으로 사용할 수 있는 적절한 제어 방법 제공

- 파일 공유를 위해 판독 접근, 기록 접근, 수행 접근 등 다양한 접근 제어 방법을 제공

- 백업이나 복구를 위한 기능 준비

- 장치 간 독립성을 유지하기 위해 적절한 이름 제공

- 정보의 암호화 및 복호화 제공

- 파일이나 디렉토리에 접근하기 쉬운 인터페이스 및 명령어 제공

 

◾ 하드 디스크

- 리눅스에서 장치는 연결 방식에 따라 이름이 결정됨

- 뒤에 a,b,c,… 순서대로 시스템이 부여

- 파티션의 경우 파일명 뒤에 1,2, …로 만들어짐

 

1. S-ATA, SCSI, USB 연결

- /dev/sda, /dev/sdb, /dev/sdc,

2. IDE

- /dev/hda, /dev/hdb, /dev/sdc,

3. CD_ROM, DVD

- /dev/cdrom, /dev/dvd, /dev/sr0

 

◾ mount

- 파일 시스템을 전체 디렉토리 구조의 특정 디렉토리에 연결하는 것

- 마운트되는 디렉토리를 마운트포인트(마운트지점)이라 함

- 일회성, 재부팅을 하게되면 마운트 풀림

- 영구적으로 마운트를 하기 위해서는 /etc/fstab에 등록

 

▫ 사용법

mount [option] [device] [directory]

[option]
-a : /etc/fstab에 등록된 파일 시스템 마운트
-t [타입] : 파일 시스템 타입 설정 (ext2, ext3, ext4, iso9660, cifs, nfs 등)
-o [옵션] : 추가 마운트 옵션 설정 (ro, rw, remount, username=, password= 등)

※ 일반적으로는 옵션 생략(기본 옵션 사용)
ex) mount /dev/sdb1 /data

umount [option] [device]
umount [option] [directory]

 

※ 의사파일시스템

- Pseudo(슈도,의사) 파일 시스템은 메모리 기반의 파일시스템으로 시스템 성능을 높이고

  커널 정보에 접근할 수 있도록 지원

- 메모리 기반 파일 시스템은 대부분 시스템에 의하여 자동으로 생성되거나 해제

  (시스템의 특정 상태를 보여주고자 OS에서 동적으로 생성)

- 사용중인 메모리 기반 파일 시스템을 사용자가 임의로 해제할 경우 시스템에 문제가 발생할 수 있음

- swapfs : 스왑 파일 시스템은 물리 메모리를 보조하기 위한 디스크 내 스왑영역에서 사용하는 파일 시스템

- tmpfs : 임시 파일 시스템은 디스크 기반의 쓰기 오버헤드를 줄이기 위해 메모리에 파일을 기록하는 파일 시스템

  메모리 기반이므로 데이터의 보관을 보장하지 않음

- fdfs : 파일 설명자 파일 시스템은 /dev/fd 디렉토리의 파일 설명자를 사용할 수 있는 명시적인 이름을 제공

- procfs : 프로세스 파일 시스템은 현재 동작중인 프로세서의 목록을 관리하는 파일 시스템

  프로세스의 목록을 관리할 때 각 프로세스의 PID로 관리. /proc 디렉토리가 해당

- devfs : 디바이스 파일 시스템은 시스템에서 사용하는 모든 디바이스의 이름 공간을 관리하기 위해 사용

  /dev 위치가 해당

 

▪ 디스크 추가하기

디스크 추가 → 파티션 만들기 → (RAID/LVM)→ 파일시스템 생성 → 마운트 → 필요시 fstab 등록

 

1. 디스크 추가

2. 파티션 만들기

fdisk -l [파티션 명] : 파티션 정보 출력
ex) fdisk -l /dev/sdb
fdisk [디스크이름] : [디스크] 파티션 작업(설정)
ex) fdisk /dev/sdb
n : add a new partition
d : delete a partition
w : write table to disk and exit
q : quit without saving changes
t : change a partition`s system id
p : print the partition

n : 새 파티션 만들기
p : 주 파티션 만들기
1 : 파티션 번호 부여
2048 : 시작 섹터 지정
???? : 마지막 세터 지정 / +size : K,M,G - 파티션 크기 지정 가능

p : 파티션 테이블 확인
t : 시스템 아이디 변경
l : 코드 확인
83 : 리눅스용 파티션 설정
w : 저장하고 나가기

 

3. 파일 시스템 생성

mkfs -t [파일 시스템] [파티션]
mkfs.[파일 시스템] [파티션]

ex) mkfs -t ext4 /dev/sdb1 or mkfs.ext4 /dev/sdb1

 

4. 마운트

mkdir /test1 			# 마운트 포인트 생성
touch /test1/nomtest		# 테스트 파일 생성
mount /dev/sdb1 /test1		# 마운트

 

5. /etc/fstab에 등록 > 재부팅 해도 계속 마운트

vim /etc/fstab
[파티션 이름] [마운트 포인트] [파일 시스템 타입] [마운트 옵션] [덤프 수행 여부] [파일 시스템 검사]

ex) /dev/sdb1 /test1 ext4 defaults 0 0
ex) UUID='uuid는 blkid에서 확인 가능' /test1 ext4 defaults 0 0

 

◾ LVM (Logical Volume Manager)

- 여러개의 하드 디스크를 하나의 디스크처럼 혹은 두, 세 개의 디스크처럼 사용할 수 있음

- 사용 중인 파티션의 크기를 줄이거나 확장 가능 → 가장 큰 장점

- 특히 파티션 확장 시 간단한 명령만으로 데이터 이전 및 손실없이 가능

- 파티션 축소 시 데이터 손실의 위험성이 존재함

- 최근 배포판에서는 자동 파티션 선택 시 기본으로 LVM으로 구성

 

▫ LVM 볼륨 종류

1. 물리 볼륨(Physical Volume)

- 실제 디스크에 물리적으로 분할한 파티션

- LVM을 구성하는 실제 파티션으로 물리 볼륨으로 생성

- pvcreate, pvscan(간략하게 보기), pvdisplay(상세하게 보기)

pvcreate [파일 시스템 생성한 파티션]
pvcreate /dev/sdb1

 

2. 볼륨 그룹(Vloume Group)

- 물리 볼륨이 모여서 만들어진 그룹

- 실제 디스크의 역할을 함

- vgcreate, vgscan, vgdisplay, vgextend

vgcreate [볼륨 그룹 명] [물리 볼륨 명1] [물리 볼륨 명2] ...

vgextend [확장할 볼륨 그룹 명] [물리 볼륨 명1] [물리 볼륨 명2] ...

 

3. 논리 볼륨(Logical Group)

- 볼륨 그룹에서 사용자가 필요한만큼 할당해서 만들어진 공간

- 실제 디스크에서의 파티션 역할을 함

- lvcreate, lvscan, lvdisplay, lvextend

lvcreate --size [용량] --name [논리 볼륨 명] [볼륨 그룹 명]
lvcreate -l +100%FREE --name [논리 볼륨 명] [볼륨 그룹 명]

lvextend --size [용량] --name [논리 볼륨 명]
lvextend -l +100%FREE [논리 볼륨 명]

xfs_growfs [논리 볼륨 명] : xfs 파일시스템 재조정(조절)
resize2fs [논리 볼륨 명] : ext4 파일시스템 재조정

 

▫ LVM 구성

1. 디스크 추가 시

- 디스크 추가 → 파티션 생성 → 물리 볼륨 생성 → 볼륨 그룹 생성

→ 논리 볼륨 생성 → 파일 시스템 생성 → 마운트

 

2. 용량 확장 시

- 디스크 추가 → 파티션 생성 → 물리 볼륨 생성 → 기존 볼륨 그룹에 추가(볼륨 그룹 확장)
→ 논리 볼륨 확장 → 파일 시스템 조절

 

◾ RAID

- 여러 개의 디스크를 하나의 디스크처럼 사용

- 비용 절감, 신뢰성 향상, 성능 향상의 효과를 냄

 

▫ Hardware RAID

- 하드웨어 제조업체에서 여러 개의 디스크를 하나의 디스크처럼 사용할 수 있게 장비를 만들어서 공급

- 소프트웨어 RAID보다 안정적이고, 제조업체의 기술지원을 받을 수 있지만 비쌈

 

▫ Software RAID

- 운영체제에서 지원하는 방식으로 RAID 구성

- 저렴한 비용으로 RAID를 구성할 수 있으나 하드웨어 RAID보다 신뢰성이나 속도 등이 떨어질 수 있음

 

▫ RAID 0

- Striping

- 데이터가 디스크에 읽기/쓰기 병렬로 수행

- RAID 레벨 중 가장 빠름

- 100%의 공간 효율성 (단, 크기가 다른 디스크의 경우 작은 것을 기준)

- 신뢰성 낮음 (디스크 하나에 오류가 발생하면 모든 데이터 손실)

 

▫ RAID 1

- Mirroring

- 디스크에 중복 저장

- 중복 저장 → 공간 효율성 50% → 비용 두배

- 중복 저장 → 신뢰성 높음 (디스크 하나가 오류가 발생하더라도 다른 디스크에 데이터가 남아 있음)

 

▫ RAID 5

- RAID 1의 안정성 + 공간 효율성

- 최소 3개 이상의 디스크로 구성

- 오류가 발생할 때는 Parity를 이용하여 데이터 복구

- 1개의 디스크에 오류가 발생하더라도 원래의 데이터 추출 가능

 

▫ RAID 6

- 전체적인 구성은 RAID 5와 비슷함

- 최소 4개의 디스크 필요

- 2개의 Parity bit를 사용하여 데이터 복구

- 2개의 디스크에 오류가 발생하더라도 원래 데이터 추출 가능

- RAID 5보다 공간 효율성 및 처리 속도는 떨어지나 신뢰성 향상

 

▫ RAID 구성하기

#1. mdadm 설치
yum install -y mdadm

#2. 추가한 디스크 파일 시스템 생성
fdisk /dev/sdb, fdisk /dev/sdc, fdisk /dev/sdd
t : fd (Linux Raid Auto)

#3. RAID 디스크 만들기
mdadm --create [/dev/md127] --level=[5] --raid-device=[3] [/dev/sdb1 /dev/sdc1 /deb/sdd1]
--create [] : RAID 디스크 명 (127부터 역순으로)
--level=[] : RAID 레벨
--raid-device=[] : RAID 구성할 디스크 수
[] : RAID 구성할 디스크들

#4. RAID 구성 후 확인
cat /proc/mdstat 		// 간단히 확인
mdadm --detail [/dev/md127]	//자세히 확인

#5. 파일시스템 만들기
mkfs.xfs /dev/md127

#6. 마운트
mount /dev/md127 /t1

※ /etc/fstab에 등록시 UUID로 등록하기
(mdadm --detail로 확인되는 UUID와 blkid로 확인되는 UUID가 다름)
(blkid에 나오는 uuid로 등록할 것)

 


✔ LINK

- 파일 연결

 

◾ Hard Link

- 원본과 동일한 inode 사용 (inode 공유)

- 원본 파일의 이동이나 삭제 시에도 존재함

- 파일 링크 카운터 증가

- 파일 복사랑 비슷, 차이점은 저장 공간을 따로 차지하지 않음

- 동일한 파일 시스템에서만 적용

ln [링크 대상] [링크 파일 이름]

 

◾ Symbolic Link

- 새로운 inode 생성

- 원본 파일의 이동이나 삭제 시 링크가 끊김

- 윈도우의 바로가기와 비슷

- 다른 파일 시스템에서도 생성 가능

- 디렉토리는 심볼릭 링크만 생성 가능

ln -s [링크 대상] [링크 파일 이름]
※ -f : 강제로 변경

 

※ 아이노드 (inode)

- 아이노드는 전통적인 유닉스 계열 파일 시스템에서 사용하는 일종의 자료구조로 각각의 파일은 하나의 아이노드를

할당 받아 관리됨

- 아이노드에는 아이노드 넘버(Inode Number), 접근 모드(읽기, 쓰기, 실행 권한), 파일 형식(파일, 디렉토리, 블록 및 캐릭터 디바이스 등), 소유자 정보(소유자와 그룹에 대한 식별자), 파일 크기, 타임스탬프 등의 정보를 저장함

- 일반적으로 파일 시스템을 생성할 때 전체 공간의 약 1%를 아이노드를 위해 할당하고, 아이노드를 위한 공간이 한정되어 있는 만큼 파일 시스템에서 생성할 수 있는 파일의 최대 개수도 한정되어 있음

 


✔ 시간 관련

◾ date

- 현재 서버에 세팅되어있는 날짜 및 시간 출력

- 수동으로 시간 조정 가능

date mmddHHMMyyyy

 

◾ timedatectl

- 날짜 및 시간, 타임존 출력

timedatectl
timedatectl list-timezones
timedatectl list-timezones | grep -i seoul
timedatectl set-timezone Asia/Seoul

 

◾ rdate

- 인터넷의 타임서버와 시간 동기화(일회성)

rdate -s time.bora.net

 


✔ sudoers / su

◼ sudo

- sudo 명령어는 일반 계정이 일시적으로 root의 권한을 갖게 함

- root 계정은 SuperUser 계정

→ root로 접속해서 작업할 경우 사고 발생 시 누가 언제 로그인 했는지 알 수 없음

→ 일반 계정에서 'su'를 통해 root로 접속 시 누가 언제 전환했는지만 로그에 남음

→ sudo로 작업하는 경우 어떤 작업을 했는지 로그에 다 남음 (/var/log/secure)

- 일반 계정으로 접속하여 작업을 하는 도중 파일을 받거나 할 경우 일반 계정의 홈 디렉토리에 자료가 남음

 

◾ sudo 권한 부여

- 기본 설정은 /etc/sudoers 파일의 95행 부터 시작

- sudoers 파일은 Readonly 파일 → !를 사용하면 강제로 수정 가능

- 수정 시 visudo 명령어를 사용

→ visudo를 사용하면 sudoers 파일의 임시파일이 생성

→ 임사 파일에 수정 후 저자하게 되면 문법 검사 실행

 

1. visudo로 계정 추가

- 100행의 root와 같은 문법으로 계정을 추가

→ 설정한 계정만 권한을 가짐

 

2. visudo로 그룹 추가

- 107행의 wheel과 같은 문법으로 그룹 추가

→ 추가한 그룹에 속한 계정들이 권한을 가짐

 

3. wheel 그룹에 추가

- 관리의 편의를 위해 관리자 권한을 가진 그룹인 wheel이 존재

- wheel 그룹에 속하게 되면 sudo 권한을 가짐

※ 원활한 su 명령 사용을 위해 wheel 그룹에 속하는 것이 편함

문법 검사

 

◾ sudo 로그 저장 위치 변경

- sudo의 로그는 기본적으로 /var/log/secure에 저장

- 관리의 편의성을 위해 로그를 분리하여 저장하기도 함

1. sudo의 log를 정의

- visudo를 사용하여 sudoers 파일 마지막에 추가

→ Default syslog=local1

 

2. log 저장 위치 변경

- CentOS7의 경우 Rsyslog 서비스에서 로그를 관리

vim /etc/rsyslog.conf
75행 쯤에 추가
# sudo log
local1.*			/var/log/sudo.log

 

3. rsyslog 재시작 및 /var/log/sudo.log 확인

systemctl restart rsyslog
sudo cat /var/log/sudo.log

 

◼ su

◾ su 권한이란?

- 현재의 사용자를 로그아웃하지 않고 다른 사용자 계정으로 전환하는 명령어

- su 명령어를 사용할 경우 일반 사용자들도 root로 접속 가능

 

◾ su 권한 제한 방법

1. 퍼미션 & 소유 그룹 변경

- su 명령어의 실행 파일의 퍼미션 확인

→ /usr/bin/su

→ SetUID가 설정되어 있으며 Other도 실행 가능

→ Other에 실행 권한 제거 후 'su'명령어를 사용해야 하는 계정들을 하나의 그룹에 포함 시킨 후 소유 그룹으로 지정

 

2. 리눅스 보안 모듈인 pam 모듈 활용

- su 관련 모듈인 /etc/pam.d/su 에서 설정

- 4행 또는 6행을 설정함으로써 wheel 그룹만 su 가능 (주석 해제)

→ 4행 주석 해제 시 비밀번번호 없이 su 가능

→ 6행 주석 해제 시 비밀번호가 있어야 su 가능


✔ CRON / at

◾ CRON

- 어떤 일을 주기적으로 실행해야할 때 사용

- 정해진 시간에 반복적으로 작업을 실행

 

▪ 주기 설정

- vim /etc/crontab

* * * * *
분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-6)
ex)
매일 새벽 1시 30분 마다			// 30 1 * * * 
매월 10일 오후 6시 마다			// * 18 10 * *
1월 15일 새벽 3시 30분 마다		// 30 3 15 1 *
매주 수요일 9시 30분 마다			// 30 9 * * 3

 

※ 시간 옵션

* 전체 시간  
숫자 그 숫자 자체  
숫자 범위 ex) 분 필드에 1-5 : 1분, 2분, 3분, 4분, 5분을 의미
, 나열된 수 ex) 분 필드에 1,3,5 : 1분, 3분, 5분을 의미
/ 특정 단위를 건너 뜀 ex) 분 필드에 */5 : 5분마다를 의미

 

▪ 실행

crontab [옵션]
	-l 크론탭 내용 출력
    	-e 크론탭 작성 및 수정
    	-r 크론탭 삭제
    	-u [user] [user]의 크론탭 - root만 가능

 

▪ crontab 사용제한

- /etc/cron.allow와 /etc/cron.deny로 제한 가능

- 두 파일이 모두 있을 수도 있고, 하나만 있을 수도 있음

- 두 파일 모두 없는 경우는 root만 cron 사용

- 둘 다 있는 경우 allow 적용

 

◼ at

- 지정한 시간에 원하는 명령이나 작업을 실행

- 일회성 작업 예약

at [옵션] [시간]
	-l : 명령 목록 출력
    -r 번호 : [번호] 명령 삭제
    
# yum install -y at
# systemctl restart atd
 1. 시간 지정 및 명령어 입력
 ex)
 # at 10:00 tomorrow
 # at 10:00 feb 15
 # at 10:00 + 3days
 # at now + 1hours
 # at 16:00
 # at 4:00pm
 
 2. 입력 종료
 Ctrl + d
 
 3. 예약 확인
 # at -l 또는 atq : 예약 시간 및 작업번호 확인
 /var/spool/at	: root만 확인 가능
 
 4. 작업 삭제
 # at -r [작업번호]
 # atrm [작업번호]

✔ SSH-Server

◾ SSH-Server

- TCP 보안 채널을 형성하여 그 위에서 기타 응용 프로토콜이 안전하게 데이터를 교환하도록 함

- SSL과 비슷하게 비대칭키 + 대칭키 방식을 사용하여 데이터를 암호화 함.

 

◾ SSH Key 접속

- 비대칭키 방식을 이용하여 공개키를 접속하려는 서버에 전송 후 개인키, 공개키 인증을 이용하여 접속

 

◾ SSH Config 설정

# vim /etc/ssh/sshd_config
17행 ssh 서비스 포트 설정
38행 root 사용자 접속 허용 여부
43행 공개키 인증 설정
47행 공개키 저장 위치 및 키 이름
65행 아이디/비밀번호 인증 설정(키, 비밀번호 인증 둘 다 설정 시 키 우선)

 

◾ 리눅스 클라이언트

1. 키 생성

1. 키 생성
$ ssh-keygen
※ $ ssh-keygen -t rsa -b 2048 // 키 생성 기본 값은 rsa, 2048bit

2. 키 확인
- 계정의 홈 디렉토리에 .ssh 디렉토리 확인
- id_rsa (개인키), id_rsa.pub (공개키)
- 파일 내용 확인 가능

3. 키 전송
$ ssh-copy-id 계정@IP 주소

4. 서버에서 키 확인
- 계정의 홈 디렉토리/.ssh 디렉토리 안/authorized_keys 확인

 

◾ SCP

- 네트워크 상의 호스트 간 안전한 원격 파일 복사를 지원

- SSH 프로토콜을 사용하여 동일하게 인증을 통과해야함

1. 현재 클라이언트의 파일을 원격지로 복사
$ scp [복사할 파일] [계정]@[목적지IP]:[목적지]
# scp backup.sh root@192.168.56.10:/root

2. 원격지의 파일을 현재 클라이언트로 복사
$ scp [계정]@[IP]:[복사할 파일] [목적지]
# scp root@192.168.56.10:/var/named/syc.com.db .

3. 원격지에서 원격지로 복사
$ scp [계정]@[IP]:[복사할 파일] [계정]@[목적지IP]:[목적지]

◾ ssh 키 자동 배포 스크립트

- 여러 개의 서버에 자동으로 공개키를 배포할 때 사용

- sshpass 패키지 사용

: 다른 컴퓨터에 바로 ssh 연결을 할 수 있고, 연결된 컴퓨터에서 명령어를 실행시킬 수 있는 기능을 가진 패키지

vim send_ssh_key.sh
#!/bin/bash

# 키를 배포할 서버 지정
#servers="server1IP server2IP server3IP ..."
servers="192.168.56.4 192.168.56.5 192.168.56.10"

# 키를 변수로 사용
sshKey="$HOME/.ssh/id_rsa"
sshPub="$HOME/.ssh/id_rsa.pub"

#ssh 비밀번호 저장
pass="$HOME/pass.txt"

#키 생성
ssh-keygen -q -N "" -f $sshKey

#SSH 키 배포
for server in $servers
do
	echo $server
    	sshpass -f "$pass" ssh-copy-id -i $sshPub [ID]@$server
done

 


✔ XXXX

◾ XXXX

-

-

'Linux' 카테고리의 다른 글

CentOS 7 - HTTPS  (0) 2024.07.29
CentOS 7 - DNS Server  (0) 2024.07.22
CentOS 7 - WEB Server  (0) 2024.07.22
CentOS 7 - DHCP Server  (0) 2024.07.17
Linux Basic (CentOS 7)  (0) 2024.06.19

+ Recent posts