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 |