1. 파티션 특징 및 종류

  • 하나의 물리적 디스크를 여러 개의 논리적인 디스크로 분할하는 것

  • 다중 파티션 장점
     • 파티션마다 독립적인 파일 시스템이 운영되기 때문에 파일 점검 시간이 줄어들어 부팅 시간 단축
     • 특정 파티션의 파일 시스템이 손상되더라도 다른 파티션에 영향을 주지 않기 때문에 높은 안정성 보장
     • 필요한 파티션만 포맷할 수 있기 때문에 백업과 업그레이드 편리

  • 파티션 종류
    종류 설명
    주 파티션 
    (Primary Partition)
    부팅이 가능한 기본 파티션
    하나의 하드디스크에 최대 4개의 주 파티션 분할 가능
    하드디스크를 4개 이상의 파티션으로 사용할 때 하나의 확장 파티션을 설정하여 확장 파티션 안에 여러 개의 논리 파티션을 분할하여 데이터 저장
    확장 파티션 
    (Extended Partition)
    주 파티션 내에 생성, 하나의 물리적 디스크에 1개만 생성
    파티션 번호는 1~4번 할당
    데이터 저장 영역을 위한 것이 아니라 논리 파티션 생성
    논리 파티션 
    (Logical Partition)
    확장 파티션 안에 생성되는 파티션
    논리 파티션은 12개 이상 생성하지 않는 것을 권고하며 5번 이후의 번호 생성
    스왑 파티션 
    (Swap Partiton)
    하드 디스크의 일부를 메모리처럼 사용하는 영역
    주 파티션 또는 논리 파티션에 생성
    프로그램 실행 시 부족한 메모리 용량을 하드디스크로 대신 사용
    리눅스 설치 시 반드시 설치되어야 하는 영역
    swap 영역의 크기는 메모리의 2배를 설정하도록 권고

 

2. 디스크와 장치명

  • 예시) /dev/sda3
    sd 하드디스크 유형 지정
      1. sd : SCSI 또는 USB 방식 디스크
      2. hd : IDE 또는 ATA 방식 디스크
    a 한 케이블에 묶인 하드디스크의 우선순위
    마스터 또는 슬레이브로 설정
       첫 번째 하드디스크 : a
       두 번째 하드디스크 : b
    3 파티션 번호
      1~4번 : primary 또는 extended
      5번부터 : logical 파티션

 

3. 파일시스템

  • 운영체제가 파일을 시스템의 디스크 파티션 상에 구성하는 방식
  • 유형파일 시스템 유형종류
    시스템 유형 종류
    리눅스 전용 파일 시스템   ext, ext2, ext3, ext4(최대 16TB 지원) 
    저널링 파일 시스템   JFS, XFS(최대 파일 시스템 크기 지원, CentOS 7 버전 기본), ReiseFS
    네트워크 파일 시스템   SMB, CIFS, NFS
    클러스터링 파일 시스템   레드햇 GFS, SGI, cXFS, IBM, GPFS, IBM SanFS 등
    시스템 파일 시스템   ISO9660, UDF
    타 운영체제 지원 파일 시스템   FAT, VFAT. FAT32, NTFS, HPFS, SysV - FAT32
       1. 포맷을 할 경우 지원하는 드라이브의 최대 크기 32GB
       2. 단점 : 개별 파일 하나당 저장할 수 있는 최대 크기 4GB

      NTFS
       1. FAT32 단점을 보완하기 위해 개발된 형식 NFTS 방식으로 포맷할 경우 드라이브 최대 크기 256TB
       2. 개별 파일 하나당 저장할 수 있는 최대 크기 16TB
       3. 단점 : 윈도우 위주 형식, 호환성이 떨어지는 형태

 

4. LVM (Logical Volume Manager)

  • 여러 개의 하드디스크를 합쳐서 사용하는 기술로 한 개의 파일 시스템을 사용
  • 작은 용량의 하드디스크 여러 개를 큰 용량의 하드디스크 한 개처럼 사용
  • 다수의 디스크를 묶어서 사용함으로써 파티션의 크기 조절 가능
    개념 설명
    물리 볼륨 여러 개의 물리적 하드디스크
    볼륨 그룹 물리 볼륨을 합쳐서 하나의 물리적 그룹을 만드는 것
    논리 볼륨 볼륨 그룹을 나눠서 다수의 논리 그룹으로 나누는 것

 

5. RAID

종류
그림
설명
RAID 0
  • 스트라이핑 저장 방식 : 연속된 데이터를 여러 디스크에 나눠서 저장
  • 최소 2개 하드디스크 필요
  • 저장과 읽기 속도가 가장 빠르지만 하나의 디스크 고장 시 모든 데이터 손실
RAID 1
  • 미러링 : 하나의 디스크에 저장하면 다른 디스크에 동일한 내용이 백업되어 저장
  • 데이터 저장 시 두배 용량 필요
  • 결함 허용을 제공하지만 공간 효율성은 떨어지며, 주요한 데이터 저장 시 적합
RAID 2

  • 스트라이핑 저장 방식
  • 기록용 디스크와 데이터 복구용 디스크를 별도로 제공하며, 디스크의 사용 효율성이 낮은 형태
  • 오류 제어 기능이 없는 디스크를 위해 해밍코드 사용
  • 모든 SCSI 디스크에 ECC(에러 검출 기능)를 탑재하고 있기 때문에 실제 사용되지 않음
RAID 3
  • 스트라이핑 저장 방식
  • 오류 검출을 위해 패리티 방식 이용
  • 패리티 정보를 저장하기 위해 전용 디스크를 사용, 최소 3개 이상의 하드디스크 필요
  • 데이터 복구는 패리티 저장 디스크에 기록된 정보의 XOR를 계산하여 수행
  • 대형 레코드가 사용되는 단일 사용자 시스템에 적합
RAID 4
  • RAID 3과 유사한 방식 : 2개 이상의 데이터 디스크와 전용 패리티 디스크 사용
  • RAID 3은 Byte 단위로 데이터를 저장하는 반면 RAID 4는 Block 단위로 저장
RAID 5

  • 디스크마다 패리티 정보를 갖고 있어 패리티 디스크의 병목 현상을 감소
  • 사용 빈도가 높은 레벨이며, 최소 3개 디스크로 구성
  • 1개의 디스크 장애 시 복구가 가능하며, 2개 이상의 디스크 장애 시 복구 불가능
RAID 6
  • RAID 5를 확장한 레벨이며, 최소 4개의 디스크로 구성
  • 제2패리티를 두는 듀얼 패리티를 사용함으로써 안정성을 향상
  • 2개의 디스크 장애 시 복구가 가능하며, 3개 이상 디스크 장애 시 복구 불가능
RAID 0+1
  • RAID 0(스트라이핑 방식)과 RAID 1(미러링)을 조합
  • 디스크 2개씩 RAID 0으로 구성 후 RAID0으로 구성된 하드디스크를 RAID1로 구성
  • 미러링 전 스트라이핑을 진행하며, 속도는 빠르나 데이터 복구 시 시간 소요
RAID 1+0
  • RAID 0+1의 반대 구성
  • 디스크 2개씩 RAID 1로 구성 후 RAID 1로 구성된 하드디스크들을 RAID0으로 구성
  • 미러링 후 스트라이핑을 진행하여 손실된 데이터만 빠른 복원이 가능하므로 RAID 0+1 보다 운영상 유리

 

 

6. 파티션 분할

  • fdisk : 파티션 테이블을 관리하는 명령어로 리눅스의 디스크 파티션을 생성, 수정, 삭제
    명령어 설명
    a 부팅 파티션을 지정
    l 파티션 종류를 선택할 때 리눅스에서 지원하는 파티션 목록
    n 새로운 파티션을 추가
    t 파티션 종류를 변경
    w 파티션 정보를 저장
    p 파티션 정보를 확인
    q 작업 종료

 

 

1. 리눅스 디렉터리 및 저장 내용

디렉토리 저장 내용
/ 파일 시스템이 있는 최상위 디렉터리
모든 디렉터리의 출발점인 동시에 다른 시스템과의 연결점이 되는 디렉터리
/boot 부트 디렉터리로 부팅 시 커널 이미지와 부팅 정보 파일 저장
/proc 시스템 정보 디렉터리이며, 커널 기능을 제어하는 역할
현재 실행되는 프로세스와 실제로 사용되는 장치, 하드웨어 정보 저장
가상 파일 시스템이며, 디렉터리에서 볼 수 있는 것은 실제 드라이브가 아니라 메모리 상에 저장되어 있는 것
/lib 공유 라이브러리 디렉터리
커널 모듈 파일과 프로그램 실행을 지원해 주는 라이브러리 저장
/bin 기본적인 명령어가 저장된 디렉터리
root 사용자와 일반 사용자가 함께 사용할 수 있는 명령어 디렉터리
/dev 시스템 디바이스 파일들을 저장하는 디렉터리
하드디스크, 프린터, 입출력 장치 등과 같은 장치들을 파일화하여 관리
/etc 시스템 환경 설정 파일과 부팅 관련 스크립트 파일들이 저장되어 있는 디렉터리
사용자 정보 및 암호 정보 파일, 보안 파일 등 저장
/root 시스템 관리자(root)용 홈 디렉터리
/sbin 관리자용 시스템 표준 명령 및 시스템 관리 관련된 실행 명령어 저장
/usr 사용자 디렉터리로 사용자 데이터나 애플리케이션 저장
/home 사용자 계정 디렉터리로 계정들의 홈 디렉터리가 위치
일반 사용자들이 로그인 시 처음으로 위치하게 되는 디렉터리
/var 시스템에서 사용되는 가변적인 파일들을 저장하는 디렉터리
가변적인 파일인 로그파일, 스풀링, 캐싱 등 저장
/tmp 각종 프로그램이나 프로세스 작업 시 임시로 생성되는 파일 저장
모든 사용자에 대해서 읽기와 쓰기 허용
스티키 비트 설정으로 파일의 소유자만이 자신의 소유 파일 삭제 가능
/mnt 파일 시스템을 일시적으로 마운트할 때 사용
/lost+found 결함이 있는 파일에 대한 정보가 저장되는 디렉터리

 

 

2. 리눅스 설치 필요 정보

2.1. 하드웨어

하드웨어 정보
CPU 제조사와 모델명 확인
32비트 CPU 또는 64비트 CPU 파악
가상화 환경에서는 CPU의 물리적 개수와 코어 개수 확인
메모리(RAM) 메모리 용량 확인
SWAP 파티션 설정 시 사용
하드디스크 드라이브 하드디스크의 파일명 확인
  1. IDE 또는 ATA 하드 디스크 타입 파일명 : /dev/hdX
   2. SATA, USB, SSD, SCSI 하드디스크 타입 파일명 : /dev/sdX
네트워크 인터페이스 제조사, 모델명, 유무선 여부, 어댑터 종류
TCP/IP 속성 정보 확인

 

2.2. 네트워크 설정

  • 호스트명, 도메인, 컴퓨터 IP주소, 서브넷 마스크, 게이트웨이 주소, DNS 서버 주소

 

3. 커널

3.1.커널이란 

  • 운영체제의 핵심 부분으로 CPU나 메모리, 기타 디바이스 등의 시스템 자원을 관리하고 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는  역할

  • 커널 기능
    1. 하드웨어 리소스(CPU, 메모리, 스토리지 등) 관리
    2. 소프트웨어에서 하드웨어 및 리소스에 대한 액세스를 추상화

 

3.2. 커널 역할 및 기능

  • 추상화  
     • 물리적으로 하나 뿐인 하드웨어를 여러 사용자들이 번갈아 사용하게 중재함으로써 마치 한 개의 하드웨어가 여러 개인 것처럼 보여지도록 하는 기술
     • 물리적 자원을 추상화하여 쉽게 접근할 수 있도록 도와주는 것

 

  • 디바이스 관리
     디바이스 드라이버라는 하드웨어 입출력 제어하는 소프트웨어를 이용하여 장치 관리

  • 프로세스 관리
    리눅스에서는 프로그램 실행 시 파일 시스템 내 특정 디렉터리에 있는 프로그램의 파일을 읽어와 메모리에 적재 →프로그램이 메모리에서 실행되는 프로세스 
     프로세스가 이용할 수 있는 CPU는 하나로 동시에 실행되는 프로세스 간 CPU를 이용할 수 있는 시간 분배 필요 → 커널은 각 프로세스 PID를 통해 관리하는 역할

  • 메모리 관리
    사용자 프로그램의 요구에 따라 메모리 영역을 분배하거나 이용이 끝난 메모리 영역 회수 등을 담당 
    가상 메모리 또한 지원(가상 메모리 영역 → swap)

  • 시스템 콜
    표준 출력이나 파일 쓰기/읽기, 프로세스를 포크(프로세스 복제)하는 기능 등을 갖고 있어 사용자 프로그램에서 액세스 할 수 있도록 도움을 주는 역할

 

 

4. 하드웨어, CPU 작동 모드, 저장 장치의 특징, 소프트웨어

4.1. 하드웨어 목록

하드웨어 역할
CPU 계산 처리 수행하는 장치
레지스터 (CPU 내) CPU 계산에 사용하는 값을 놓는 영역, 전원을 끄면 데이터가 사라지는 형태
캐시메모리 (CPU 내) CPU와 메모리 간의 버퍼
  • CPU의 계산 결과를 캐시
  • 전원을 끄면 데이터가 사라지는 형태
메모리
(주 기억장지)
(primary memory)
CPU에서 실행 중인 프로그램이나 계산 결과를 일시적으로 두는 디바이스
  • CPU로부터 액세스 가능한 기억 영역
  • 전원을 끄면 데이터가 사라지는 형태
스토리지
(보조 스토리지)
(secondary memory)
메모리에 있는 계산 결과를 파일로 저장하는 디바이스
  • CPU로 부터 액세스 불가능한 기억 영역
  • CPU가 파일에 액세스하려면 한 번 메모리를 읽어야함, 전원을 꺼도 데이터 남아있는 형태
NIC 데이터를 다른 컴퓨터와 송수신하는 장치

 

4.2. CPU 작동 모드

CPU 동작 모드 하드웨어
액세스 제한
대상 소프트 웨어 프로세스 동시 실행
커널 모드 X 커널 가능
사용자 모드 O 커널 이외 불가능(인터럽트 발생)

 

4.3.  저장 장치의 특징

 

4.4. 소프트웨어 목록

이름 설명
프로그램 처리를 위해 만들어진 소프트웨어
프로세스 메모리에 로드된 실행 중 프로그램, 하위 프로세스는 새롭게 가상 메모리 확보
스레드 프로세스 내에서 실행되는 흐름의 단위, 멀티 스레드는 프로세스 내의 메모리를 공유해서 사용 가능
응용 프로그램 컴퓨터에 사용하는 목적에 따라 제작된 기능적 프로그램
모듈 특정 기능을 가진 작은 프로그램, 모듈을 결합하여 응용 프로그램과 라이브러리 생성
라이브러리 재사용 가능한 형태로 정리한 프로그램, 라이브러리 단독으로는 동작 X
패키지 프로그램의 실행에 필요한 것을 정리한 것
실행파일, 라이브러리, 모듈, 설정파일, 자원(이미지, 음악 파일 등)
미들웨어 사용자의 특정한 요구대로 만들어 제공하는 프로그램, 운영체제와 응용 소프트웨어의 중간에서 조정과 중개의 역할 수행
커널 하드웨어를 조작하기 위한 소프트웨어
시스템 라이브러리 응용 프프로그램이 커널을 호출하는 라이브러리
시스템 유틸리티 컴퓨터의 분석, 관리, 유지보수를 수행하는 소프트웨어
OS 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원

 

 

 

참고 자료 : https://www.devkuma.com/docs/linux/kernel/basic1/

 

 

 

  • pwconv 명령어는 리눅스 시스템에 패스워드 정책을 shadow 패스워드 방식으로 적용하는 명령어
  • pwconv 명령어가 수행
    1. /etc/passwd 파일의 두번째 필드에 있는 암호화된 패스워드를 모두 x로 표시
    2. /etc/shadow 파일의 두번째 필드에 암호화된 패스워드를 저장

  • 현재 리눅스 서버들은 대부분 shadow 패스워드 정책을 이미 적용하고 있으므로 pwconv는 리눅스 버전에서는 거의 필요하지 않는 명령어
  • pwconv명령어와 반대로 패스워드정책을 shadow 패스워드정책에서 일반 패스워드정책으로 변경하는 pwunconv 명령어도 함께 알아 두면 좋음

 

명령어위치

/usr/sbin/pwconv



사용 형식

pwconv



예시

  1. pwconv 명령어을 사용한 후 /etc/passwd 파일 확인 → 사용자 계정의 비밀번호 부분 x 표시
  1. pwconv 명령을 통해 /etc/passwd, /etc/shadow 파일이 생성된 것을 확인 가능



/etc/passwd 파일과 /etc/shadow 파일이란

1. /etc/passwd 파일

  • /etc/passwd 파일에는 Linux 시스템에 등록된 사용자 계정마다 정보가 담겨있음
  • /etc/passwd 파일은 일반사용자들이 내용 확인 가능



2. /etc/shadow 파일

  • 은 root만이 확인 가능(root만 읽을 수 있도록 400이라는 퍼미션을 가짐)
  • /etc/shadow 파일에서 패스워드 사용 문자 수, 사용 기간 설정 등 설정 가능

 

  • DIG(Domain Information Groper)는 DNS 이름 서버를 쿼리하는 강력한 명령줄 도구
  • dig 명령어를 사용하면 호스트 주소, 메일 교환 및 이름 서버를 비롯한 다양한 DNS 레코드에 대한 정보를 쿼리 가능
  • dig 명령어는 유연성과 사용 편의성 때문에 DNS 문제를 해결하는 데 시스템 관리자 중 가장 많이 사용되는 도구
  • DNS 조회 웹 페이지 : https://ko.rakko.tools/tools/18/

1. dig 설치

  • 시스템 유형에서 dig 명령을 사용할 수 있는지 확인

    $ dig -v
    DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3

  • CentOS 및 Fedora에 dig 명령어 설치

    $ yum install -y bind-utils


2. Dig 출력 이해

  • 간단한 형식으로 추가 옵션 없이 단일 호스트(도메인)를 쿼리

  • dig 명령은 매우 상세하게 도메인의 내용을 출력

  • www.baidu.com 도메인으로 테스트

    $ dig www.baidu.com
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25980
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.baidu.com.                 IN      A
    
    ;; ANSWER SECTION:
    www.baidu.com.          356     IN      CNAME   www.a.shifen.com.
    www.a.shifen.com.       83      IN      CNAME   www.wshifen.com.
    www.wshifen.com.        296     IN      A       119.63.197.151
    www.wshifen.com.        296     IN      A       119.63.197.139
    
    ;; Query time: 34 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 00:13:05 2022
    ;; MSG SIZE  rcvd: 116


3. ANSWER SECTION의 내용 확인

  • dig 쿼리에 대한 특정 내용만 답변으로 추출

3.1. ANSWER SECTION의 짧은 내용 얻기

  • 쿼리에 대한 짧은 대답을 얻으려면 +short 옵션을 사용
  • 질의한 도메인 ANSWER SECTION의 답만 출력
  • 출력에는 CNAME과 A 레코드의 IP 주소를 포함
    $ dig www.baidu.com +short
    www.a.shifen.com.
    www.wshifen.com.
    119.63.197.139
    119.63.197.151

3.2. ANSWER SECTION 자세한 내용 얻기

  • ANSWER SECTION의 자세한 응답 확인을 보려면 +noall 옵션을 사용한 후, +answer 옵션을 사용하여 ANSWER SECTION만 출력
    $ dig www.baidu.com +noall +answer
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com +noall +answer
    ;; global options: +cmd
    www.baidu.com.          234     IN      CNAME   www.a.shifen.com.
    www.a.shifen.com.       7       IN      CNAME   www.wshifen.com.
    www.wshifen.com.        118     IN      A       119.63.197.139
    www.wshifen.com.        118     IN      A       119.63.197.151


4. 특정 DNS에서 도메인 쿼리

  • 기본적으로 DNS를 지정되지 않은 경우 도메인에 대한 질의 불가

  • DNS 명령어에 @DNS을 추가하지 않으면, /etc/resolv.conf 파일에 나열된 DNS 서버를 사용

  • 쿼리를 실행할 DNS를 지정하려면 @ 기호 뒤에 DNS IP 주소 또는 호스트 이름을 사용

  • 예시로는 AWS의 DNS 서버(1.1.1.1)에서 www.baidu.com 도메인에 대한 정보를 쿼리함

    $ dig www.baidu.com @1.1.1.1
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com @1.1.1.1
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5787
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.baidu.com.                 IN      A
    
    ;; ANSWER SECTION:
    www.baidu.com.          1183    IN      CNAME   www.a.shifen.com.
    www.a.shifen.com.       283     IN      CNAME   www.wshifen.com.
    www.wshifen.com.        283     IN      A       119.63.197.151
    www.wshifen.com.        283     IN      A       119.63.197.139
    
    ;; Query time: 3 msec
    ;; SERVER: 1.1.1.1#53(1.1.1.1)
    ;; WHEN: Wed Jun 22 01:05:52 2022
    ;; MSG SIZE  rcvd: 116


5. 레코드 유형 쿼리

  • dig 명령어를 사용하면 쿼리 끝에 레코드 유형을 추가하여 유효한 DNS 쿼리를 수행 가능
  • 아래 섹션은 A(IP 주소), CNAME(도메인 별칭), TXT(텍스트 레코드), MX(메일 교환기) 및 NS(DNS 서버)와 같은 가장 일반적인 레코드를 검색하는 방법 정리

5.1. A 레코드 쿼리

  • 도메인 이름에 대한 모든 주소 목록을 가져오려면 아래 옵션을 사용

  • DNS 레코드 유형이 지정되지 않은 경우 dig에서 A 레코드를 요청 → 옵션을 지정하지 않고 A 레코드를 쿼리 가능

    # 형식 : dig 도메인 -t A 또는 dig 도메인 A 또는 dig 도메인
    $ dig www.baidu.com -t A
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com -t A
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46904
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.baidu.com.                 IN      A
    
    ;; ANSWER SECTION:
    www.baidu.com.          541     IN      CNAME   www.a.shifen.com.
    www.a.shifen.com.       195     IN      CNAME   www.wshifen.com.
    www.wshifen.com.        146     IN      A       103.235.46.40
    
    ;; Query time: 34 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:33:45 2022
    ;; MSG SIZE  rcvd: 100

5.2. CNAME 레코드 쿼리

  • 도메인 별칭 이름을 찾으려면 cname 옵션을 사용

    # 형식 : dig 도메인 -t cname 또는 dig 도메인 cname
    $ dig www.baidu.com -t cname
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com -t cname
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45541
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.baidu.com.                 IN      CNAME
    
    ;; ANSWER SECTION:
    www.baidu.com.          145     IN      CNAME   www.a.shifen.com.
    
    ;; Query time: 38 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:38:13 2022
    ;; MSG SIZE  rcvd: 58

5.3. TXT 레코드 쿼리

  • 특정 도메인에 대한 모든 TXT 레코드를 검색하려면 txt 옵션을 사용

    # 형식 : dig 도메인 -t txt 또는 dig 도메인 txt
    $ dig baidu.com -t txt
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> baidu.com -t txt
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20891
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;baidu.com.                     IN      TXT
    
    ;; ANSWER SECTION:
    baidu.com.              7200    IN      TXT     "_globalsign-domain-verification=qjb28W2jJSrWj04NHpB0CvgK9tle5JkOq-EcyWBgnE"
    baidu.com.              7200    IN      TXT     "v=spf1 include:spf1.baidu.com include:spf2.baidu.com include:spf3.baidu.com include:spf4.baidu.com a mx ptr -all"
    baidu.com.              7200    IN      TXT     "google-site-verification=GHb98-6msqyx_qqjGl5eRatD3QTHyVB6-xQ3gJB5UwM"
    
    ;; Query time: 109 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:44:16 2022
    ;; MSG SIZE  rcvd: 320

5.4. MX 레코드 쿼리

  • 특정 도메인의 모든 메일 서버 목록을 가져오려면 mx 옵션을 사용

    # 형식 : dig 도메인 -t mx 또는 dig 도메인 mx
    $ dig baidu.com -t mx
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> baidu.com -t mx
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60866
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;baidu.com.                     IN      MX
    
    ;; ANSWER SECTION:
    baidu.com.              7111    IN      MX      20 jpmx.baidu.com.
    baidu.com.              7111    IN      MX      20 mx50.baidu.com.
    baidu.com.              7111    IN      MX      20 usmx01.baidu.com.
    baidu.com.              7111    IN      MX      10 mx.maillb.baidu.com.
    baidu.com.              7111    IN      MX      15 mx.n.shifen.com.
    baidu.com.              7111    IN      MX      20 mx1.baidu.com.
    
    ;; Query time: 33 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:43:50 2022
    ;; MSG SIZE  rcvd: 166

5.5. NS 레코드 쿼리

  • 특정 도메인에 대한 권한 있는 이름 서버를 찾으려면 ns 옵션을 사용

    # 형식 : dig 도메인 -t ns 또는 dig 도메인 ns
    $ dig baidu.com -t ns
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> baidu.com -t ns
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15087
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;baidu.com.                     IN      NS
    
    ;; ANSWER SECTION:
    baidu.com.              21600   IN      NS      ns2.baidu.com.
    baidu.com.              21600   IN      NS      ns7.baidu.com.
    baidu.com.              21600   IN      NS      dns.baidu.com.
    baidu.com.              21600   IN      NS      ns4.baidu.com.
    baidu.com.              21600   IN      NS      ns3.baidu.com.
    
    ;; Query time: 84 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:43:18 2022
    ;; MSG SIZE  rcvd: 117

5.6. 모든 레코드 쿼리

  • 특정 도메인에 대한 모든 DNS 레코드 목록을 가져오려면 임의 옵션을 사용

    # 형식 : dig 도메인 -t any 또는 dig 도메인 any
    $ dig baidu.com -t any
    ;; Truncated, retrying in TCP mode.
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> baidu.com -t any
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5705
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 17, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;baidu.com.                     IN      ANY
    
    ;; ANSWER SECTION:
    baidu.com.              7200    IN      SOA     dns.baidu.com. sa.baidu.com. 2012145445 300 300 2592000 7200
    baidu.com.              7200    IN      TXT     "google-site-verification=GHb98-6msqyx_qqjGl5eRatD3QTHyVB6-xQ3gJB5UwM"
    baidu.com.              7200    IN      TXT     "v=spf1 include:spf1.baidu.com include:spf2.baidu.com include:spf3.baidu.com include:spf4.baidu.com a mx ptr -all"
    baidu.com.              7200    IN      TXT     "_globalsign-domain-verification=qjb28W2jJSrWj04NHpB0CvgK9tle5JkOq-EcyWBgnE"
    baidu.com.              7200    IN      MX      20 mx50.baidu.com.
    baidu.com.              7200    IN      MX      15 mx.n.shifen.com.
    baidu.com.              7200    IN      MX      10 mx.maillb.baidu.com.
    baidu.com.              7200    IN      MX      20 mx1.baidu.com.
    baidu.com.              7200    IN      MX      20 jpmx.baidu.com.
    baidu.com.              7200    IN      MX      20 usmx01.baidu.com.
    baidu.com.              600     IN      A       220.181.38.251
    baidu.com.              600     IN      A       220.181.38.148
    baidu.com.              21600   IN      NS      ns7.baidu.com.
    baidu.com.              21600   IN      NS      ns3.baidu.com.
    baidu.com.              21600   IN      NS      dns.baidu.com.
    baidu.com.              21600   IN      NS      ns2.baidu.com.
    baidu.com.              21600   IN      NS      ns4.baidu.com.
    
    ;; Query time: 152 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:45:49 2022
    ;; MSG SIZE  rcvd: 620


6. 역 DNS 조회

  • 특정 IP 주소와 연결된 호스트 이름을 쿼리하려면 -x 옵션을 사용

  • 예시로 208.118.235.148에 대해 역방향 조회를 수행

    $ dig -x 8.8.8.8
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> -x 8.8.8.8
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10553
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;8.8.8.8.in-addr.arpa.          IN      PTR
    
    ;; ANSWER SECTION:
    8.8.8.8.in-addr.arpa.   19236   IN      PTR     dns.google.
    
    ;; Query time: 32 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:53:35 2022
    ;; MSG SIZE  rcvd: 62


7. 대량 쿼리

  • 많은 수의 도메인을 쿼리하려면 해당 도메인을 파일에 추가하고(행당 하나의 도메인) -f 옵션 뒤에 파일 이름을 붙이면 질의 가능

  • 파일에 있는 나열된 도메인을 쿼리

    $ cat domainlist.txt
    www.baidu.com
    www.google.com
    
    # domainlist.txt 파일에 있는 도메인 질의
    $ dig -f domainlist.txt
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57218
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.baidu.com.                 IN      A
    
    ;; ANSWER SECTION:
    www.baidu.com.          443     IN      CNAME   www.a.shifen.com.
    www.a.shifen.com.       235     IN      CNAME   www.wshifen.com.
    www.wshifen.com.        226     IN      A       119.63.197.139
    www.wshifen.com.        226     IN      A       119.63.197.151
    
    ;; Query time: 34 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:58:00 2022
    ;; MSG SIZE  rcvd: 116
    
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.google.com
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13832
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;www.google.com.                        IN      A
    
    ;; ANSWER SECTION:
    www.google.com.         300     IN      A       142.250.204.100
    
    ;; Query time: 51 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Wed Jun 22 01:58:00 2022
    ;; MSG SIZE  rcvd: 48


8. .digrc 파일

  • dig 명령의 동작은 ${HOME}/.digrc 파일에서 사용자별 옵션을 설정하여 제어 가능

  • 사용자의 홈 디렉터리에 .digrc 파일이 있는 경우 파일에 지정된 옵션이 명령줄 인수 앞에 적용됨

  • 섹션만 표시하려면 텍스트 편집기를 열고 다음 ~/.digrc 파일을 생성 → ANSWER SECTION의 자세한 응답 확인하기 위해 +noall과 +answer 저장

    $ cat ~/.digrc
    +noall +answer
    
    $ dig www.baidu.com
    ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com +noall +answer
    ;; global options: +cmd
    www.baidu.com.          234     IN      CNAME   www.a.shifen.com.
    www.a.shifen.com.       7       IN      CNAME   www.wshifen.com.
    www.wshifen.com.        118     IN      A       119.63.197.139
    www.wshifen.com.        118     IN      A       119.63.197.151


9. dig 사용 옵션

  • dig 명령어에는 ‘-‘ 옵션과 ‘+’ 옵션이 있음
  • dig 사용 주요 옵션
    옵션 설명 비고
    -b source IP를 다른 IP로 설정 interface IP
    -f batch 모두 동작시 파일이름을 지정
    -m debugging
    -p 53 이외의 포트번호를 지정
    -4 or -6 IPv4 또는 IPv6 강제 지정
    -t Type을 지정 기본 문법에 포함
    -c Class를 지정 사실상 무의미 (IN)
    -x reverse lookup IP to name
    +tcp TCP 프로토콜 사용 +notcp
    +trace delegation path 추적 +notrace
    +short Answer Section 결과만을 표시 +noshort
    +comments Comments Section 표시 +nocomments
    +question Question Section 표시 +noquestion
    +answer Answer Section 표시 +noanswer
    +authority Authority Section 표시 +noauthority
    +additional Additional Section 표시 +noadditional
    +stats Statistics Section 표시 +nostats
    +all Comments부터 Statistics Section 모두 표시 +noall
    +multiline 긴 record를 여러 줄로 보기 좋게 표시 +nomultiline

참고 자료

  • crontab 명령어는 사용자가 주기적인 작업을 등록하기 위해 사용
  • crontab 명령어 형식
    $ crontab [option] 파일명

1. crontab의 옵션


2. crontab 기본 (crontab basic)

  • 기본이 되는 크론탭 사용법
  • 편집할 수 있는 곳이 로딩 → 크론탭을 설정할 수 있는 장소에 접근

2.1. crontab -e 명령어를 통해 crontab 파일 수정

  • 각종 크론탭 명령어를 입력후 콜론(:) 입력 후에 wq 를 입력해 크론탭을 갱신

    1. wq로 저장하면 "crontab: installing new crontab"이 출력

    2. q로 저장하면 "crontab: no changes made to crontab" 출력

      $ crontab -e
      
      # crontab을 통해 편집할 수 있는 곳에 접근
      */3 * * * * /opt/fujitsu/ServerViewSuite/RAIDManager/svrack/svrack.sh -c
      
      # srvmagtCron: restarts daemons that died
      0,15,30,45 * * * * /bin/sh -c "[ -x /etc/srvmagt/srvmagtCron ] && /etc/srvmagt/srvmagtCron"
  • crontab -e 입력 후 다음과 같은 내용을 입력 → crontab 갱싱

    1. 별이 다섯개 뒤에 명령어 입력 → "매분마다 실행" 별이 지칭하는 것"

    2. 쉘스크립트 뿐만 아니라 리눅스 커맨드도 사용 가능

      $ crontab -e
      
      # crontab 파일 내용
      * * * * * ls -al
      
      # crontab 파일 내용을 수정한 후 wq!로 저장하면 아래의 내용 출력
      no crontab for root - using an empty one
      crontab: installing new crontab
      
      # * * * * * 를 적용해서 매분마다 ls -al 실행

2.2 crontab -l 명령어를 통해 crontab 파일 읽기

  • 현재 crontab에 어떤 내용이 들어있는지 확인

  • cat 명령어로 파일을 읽어들인 것처럼 표준 출력으로 크론탭 내용을 출력

    $ crontab -l
    */3 * * * * /opt/fujitsu/ServerViewSuite/RAIDManager/svrack/svrack.sh -c
    
    # srvmagtCron: restarts daemons that died
    0,15,30,45 * * * * /bin/sh -c "[ -x /etc/srvmagt/srvmagtCron ] && /etc/srvmagt/srvmagtCron"

2.3 crontab -r 명령어를 통해 crontab 파일 삭제

  • crontab -r 명령어를 통해 crontab 파일의 모든 내용 삭제

    # crontab 삭제
    $ crontab -r
    
    # 삭제되었는지 crontab 확인
    $ crontab -l
    no crontab for root



3. 주기 결정

  • 각 별 위치에 따라 주기를 다르게 설정 가능

  • 순서대로 분-시간-일-월-요일 순서

  • 괄호 안의 숫자 범위 내로 별 대신 입력 가능 → 숫자로 기간 결정

  • 요일은 0부터 7까지 숫자로 표기

    1. 0과 7이 일요일

    2. 1은 월요일

    3. 2는 화요일

    4. 3은 수요일

    5. 4는 목요일

    6. 5는 금요일

    7. 6은 토요일

      # Example of job definition:
      # .---------------- minute (0 - 59)
      # |  .------------- hour (0 - 23)
      # |  |  .---------- day of month (1 - 31)
      # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
      # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
      # |  |  |  |  |
      # *  *  *  *  * user-name command to be executed
      
      *      *      *      *      *
      분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)



4. 주기별 예제

  • 주기 입력 방법엔 * , - , / 을 이용
  • 각각의 특수기호가 하는 기능이 다름
    1. * : 모든
    2. - : 3-5로 하면 3에서 5까지 기간을 지정
    3. / : 분에 */10을 하면 10분마다 반복할 수 있게 지정
  • 조합을 어떻게 하느냐에 따라 입맛대로 주기를 설정 가능

4.1. 매분 실행

# 매분 test.sh 실행
* * * * * /home/script/test.sh

4.2. 특정 시간 실행

# 매주 금요일 오전 5시 45분에 test.sh 를 실행
45 5 * * 5 /home/script/test.sh

4.3. 반복 실행

# 매일 매시간 0분, 20분, 40분에 test.sh 를 실행
0,20,40 * * * * /home/script/test.sh

4.4. 범위 실행

# 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행
0-30 1 * * * /home/script/test.sh

4.5. 간격 실행

# 매 10분마다 test.sh 를 실행
*/10 * * * * /home/script/test.sh

4.6 조금 복잡하게 실행

# 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행
*/10 2,3,4 5-6 * * /home/script/test.sh



5. cron 사용 팁

5.1. 한 줄에 하나의 명령만 사용

# 잘못된 예
* * * 5 5
/home/script/test.sh

# 잘된 예
* * * 5 5 /home/script/test.sh

5.2. 주석을 사용 가능

  • # 을 입력해서 그 뒤로 나오는 모든 문자를 주석 처리 가능

    # 주석 #
    #--------------------#
    # 이것은 주석입니다. #
    #--------------------#



6. cron 로깅 (cron logging)

6.1. crontab을 사용할 때 처리 내역을 로그에 남김

  • 크론탭을 사용해서 정기적으로 작업을 처리할 때, 해당 처리 내역에 대해 로그를 남김
  • /home/script/test.sh 쉘 스크립트를 매분마다 실행 → test.sh.log 파일에 작업 내용을 갱신
  • 2>&1 을 제거하면 쉘스크립트에서 표준 출력 내용 출력
  • 2>&1은 표준 에러를 표준 출력
      * * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1

6.2. crontab의 사용에 대한 처리 내역을 지속적으로 로그에 남김

  • 자주 실행 되고 또한 지속적으로 로깅이 되야 해서 로그를 계속 남겨둬야 한다면 다음처럼 입력
  • 계속 로그가 누적이 되는 것을 확인
  • 로그가 과도하게 쌓이면 서비스에 영향 줌 → 가끔씩 비워주거나 파일을 새로 생성 필요
      * * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1

6.3. crontab에 로그가 필요하지 않아 삭제

  • 로그는 필요 없는 크론을 위해서 /home/script/test.sh.log 파일이 아닌 /dev/null에 저장
      * * * * * /home/script/test.sh > /dev/null 2>&1


7. crontab 백업 (crontab backup)

  • crontab -r 를 쓰거나 실수로 crontab 디렉토리를 날려버려서 기존 크론 내역들이 회복이 불가능할 수 있음
  • 시스템 문제로 또는 실수로 크론탭이 삭제 될 수 있기에 주기적으로 크론탭 백업은 필수

7.1. crontab 백업하는 방법 → crontab 내용을 txt 파일로 만들어 저장

crontab -l > /home/bak/crontab_bak.txt

7.2. crontab 백업하는 방법 → crontab 내용을 txt 파일로 만들어 자동으로 저장

  • 매일 오후 11시 50분에 크론탭을 백업해두는 크론 명령어
    50 23 * * * crontab -l > /home/bak/crontab_bak.txt

작업 예약 스케줄러 파일인 cron

  • 특정한 시간에 또는 특정 시간마다 어떤 작업을 자동으로 수행하게 해주고 싶을 때 사용하는 명령어
  • cron은 특정한 시간에 특정한 작업을 수행하게 해주는 스케줄링 역할

1. 시스템 크론(system cron)

  • cron 시스템에는 시스템에서 기본적으로 사용하는 cron 설정
  • 시스템 운영에 필요한 작업은 root 권한으로 /etc/crontab에 등록해서 주기적으로 수행 가능

2. 사용자 크론(user cron)

  • root나 일반 사용자가 자신의 cron 설정을 직접하여 사용
  • 사용자는 crontab이라는 명령을 수행해서 등록


cron과 관련된 여러 파일들

1. cron

  • /usr/sbin/cron → 크론 데몬 파일

2. crontab

  • cron 작업을 설정하는 파일 → crontab 파일
  • cron 프로세스는 /etc/crontab 파일에 설정된 값을 읽어서 수행
  • crontab 파일은 OS에 따라 저장되는 위치가 다를 수 있음
  • crontab의 파일 내용
    1. m h dom mon dow user command
    2. 분 시 일 월 요일 사용자 실행명령 → crontab의 형식
    3. *의 의미는 every
    4. 25 6 * * * root test -x /usr/sbin/anacron ~
    5. 6시 26분마다 root 사용자가 test -x /usr/sbin/anacron ~ 명령 실행

3. /usr/sbin/anacron

  • cron과 비슷한 동작을 할 수 있게하는 프로그램
  • 서버가 일정 시간 중지되었을 때에도 작업이 실행되는 것을 보장하기 위해 사용하는 도구

4. /etc/cron.daily, /etc/cron.hourly, /etc/cron.weekly, /etc/cron.monthly

  • 시스템 크론 설정 디렉토리
  • cron은 주기적으로 실행할 내용을 시스템 크론 설정 디렉토리에 넣어 놓고 작동

5. /var/log/cron

  • 크론 실행 내용이 기록되는 로그 파일

6. /etc/cron.allow, /etc/cron.deny

  • 크론 접근을 허용할 ID, 크론 접근을 허용하지 않을 ID 등을 설정


cron 동작 방식, cron 실행 흐름

  • cron 동작 방식을 보면 cron 데몬(crond)가 crontab을 참조
  • cron 데몬은 어떤 task를 언제 어떻게 수행할 지를 crontab에서 찾아서 실행
  • cron 데몬은 시스템 스케줄러 정보 뿐만 아니라 각각 사용자가 설정한 작업 예약 정보도 crontab에서 확인
  • cron 파일이 데몬이기 때문에 부팅시 백그라운드로 실행
    $ ps -ef | grep cron

crontab 설정 형식(crontab 파일의 7 필드)

  • m h dom mon dow user command 설명

crontab 설정 값에 사용할 기호

1. * (별표)

  • 각 필드 자리에 * 기호가 오면 해당 필드의 모든 값을 의미
  • 두 번째 필드에 *가 오면 매 시간 마다
  • 세 번째 필드에 *가 오면 매일
  • 네 번째 필드에 *가 오면 매월

2. - (하이픈)

  • 그 사이의 모든값을 의미
  • 세 번째 필드에 '1-5' 값이 오면 1일, 2일, 3일, 4일, 5일 의미

3. , (쉼표)

  • 지정한 모든 값을 의미
  • 불규칙적인 값 지정할 때 주로 사용
  • 두 번째 필드에서 "1,3,4"는 1시, 3시, 4시를 의미

4. / (슬래시)

  • 연결된 설정 값 범위에서 특정 주기로 나눌 때 사용

  • 일반적으로 FTP 서버를 이용한 파일 전송은 보안 기능이 적용 X
  • 안전한 파일 전송을 위해 사용하는 가장 일반적인 방법 → SFTP와 FTPS를 사용

SFTP

  • SFTP는 암호화된 SSH 연결을 이용
  • SFTP는 서버 접속, 파일 전송, 그리고 파일 관리를 지원하기 위해 IETF(Internet Engineering Task Force)에서 개발한 네트워크 프로토콜
  • SFTP를 사용하기 위해선 SSH2 프로그램을 설치한 후에 활성화 필요

SFTP의 특징

  1. 안전한 파일 전송
    • SFTP는 안전한 파일 전송을 위해 SSH로 연결을 암호화
  1. 안전한 FTP 서버 접속
    • 안전한 서버 접속을 위해 인증 방법으로서 패스워드 뿐만 아니라 공개키(Public Key)를 이용한 접속을 지원
  1. 대부분의 플랫폼에서 사용 가능
    • SFTP는 Windows, Unix, linux 등 대부분의 플랫폼에서 지원
  1. SSH 서버가 제공하는 프로그램 (VSFTP 서버와 별개)
    • VSFTP 서버와 별개의 프로그램이지만, 안전한 파일 전송을 지원한다는 점에서 FTP와 동일한 역할

SFTP 서버 설정

1. OpenSSH 패키지 다운

  • sftp 명령어를 사용하려면 SSH 패키지가 필요
  • OpenSSH 패키지를 설치하면 SSH 패키지를 설치 가능
    $ yum install openssh-server openssh -y

2. SSH 서버의 설정 파일 변경

  • /etc/ssh/sshd_confg 파일을 수정

  • 기존에 있던 설정을 internal-sftp로 변경 (아래에 설명)

    $ vi /etc/ssh/sshd_config
    
    # 기존에 있던 Subsystem을 주석처리하고 새로운 Subsystem을 추가
    # override default of no subsystems
    # Subsystem     sftp    /usr/libexec/openssh/sftp-server
    Subsystem       sftp    internal-sftp
    
    # Example of overriding settings on a per-user basis
    Match User sftp-users
        X11Forwarding no
        AllowTcpForwarding no
    #  ChrootDirectory /home/%u
        ForceCommand internal-sftp

3. /etc/ssh/sshd_config 파일 내 적용 요소 설명

  1. #Subsystem sftp /usr/libexec/openssh/sftp-server
    • 서브시스템으로 사용되던 기존 sftp 프로그램을 사용 X → 앞에 주석 추가
  1. Subsystem sftp internal-sftp
    • SSH 서버에서 외부 프로그램을 사용
    • 키워드 Subsystem에 이름 sftp와 명령어 internal-sftp를 지정
    • internal-sftp는 Match Group sftp-users의 ChrootDirectory 옵션을 사용해 각 사용자 별로 chroot를 적용하기 위해 sftp-server 대신 사용
  1. Match Group sftp-users
    • sftp를 사용할 그룹 이름과 옵션을 정의
    • 그룹 안에 속한 사용자들은 ssh 및 scp를 사용 불가능 → 오직 sftp만 사용 가능
      1. X11Forwarding no → ssh 접속해서 GUI 기반의 어플리케이션 실행 X
      2. AllowTcpForwarding no → TCP 포워딩을 불가능
    • chroot를 적용돼 자신의 홈 디렉토리를 루트(/) 디렉토리로 인식
      1. ChrootDirectory는 root로 적용될 디렉토리 위치를 지정
      2. %u → 인증된 사용자의 사용자 이름을 지정
    • ForceCommand internal-sftp → internal-sftp를 강제 명령으로 실행

4. 그룹 생성 및 그룹에 사용자 포함

  • SFTP 사용이 적용될 그룹 sftp-users를 생성하기 위해 명령어 groupadd를 사용

  • 그룹을 만든 후 사용자를 그룹에 포함 → 예시 : hippo 사용자

  • hippo 사용자의 홈디렉토리에 그룹 회원들이 접속할 수 있도록 권한을 변경

    # 변경한 /etc/ssh/sshd_config을 새로 적용
    $ systemctl restart sshd
    
    # sftp-users 그룹 생성
    $ groupadd sftp-users
    
    # sftp-users 그룹에 root 사용자를 추가
    # usermod -g sftp-users root를 하면 그룹 하나만 속함 -> 사용 X
    $ usermod -aG sftp-users root
    $ id root
    uid=0(root) gid=0(root) groups=0(root),10(wheel),1000(sftp-users)
    
    # hippo 사용자가 없기에 새로 추가 필요
    $ id hippo
    id: hippo: no such user
    
    # hippo 사용자 추가
    $ adduser hippo
    $ passwd hippo
    
    # sftp-users에 hippo 사용자 추가
    $ usermod -aG sftp-users hippo
    
    # hippo 사용자가 정상적으로 생성되고 sftp-users에 들어있는 지 확인
    # wheel 그룹에 속하려면 /etc/group의 wheel에 hippo를 추가해야 함
    $ id hippo
    uid=1000(hippo) gid=1001(hippo) groups=1001(hippo),10(wheel),1000(sftp-users)
    
    # 권한 변경
    $ chmod 755 /home/hippo
    
    $ ls -al /home
    drwxr-xr-x   2 hippo hippo 4096 Jan 30 21:54 hippo

리눅스 SFTP 클라이언트 테스트

  • 접속하는 윈도우 SFTP 클라이언트

  • 리눅스 클라이언트로 이용하여 테스트

  • 리눅스 SFTP 접속 → IP 접속을 허용해줘야 함 (ACL 정책 확인 필요)

    $ sftp -P 22000 root@[서버 IP] 
    root@[서버 IP]'s password: 
    Connected to [서버 IP]. 
    
    # SFTP 접속 위치의 파일 확인 
    sftp> ls 
    test.sh   time 
    
    # SFTP 현재 위치 확인 
    sftp> pwd 
    Remote working directory: /root 
    
    # SFTP 접속 해제 
    sftp> exit`

  • PowerTop는 리눅스 시스템에서 전력사용을 모니터링 명령어
  • 많은 서버를 운영하다보면 전원에 신경이 쓰이기에 전원 모니터링 필요

powertop 설치

  • powertop 설치 방법
    $ yum install powertop

powertop 사용 방법

$ powertop

1. idle 상태를 확인 → 탭 간 이동은 tab을 이용, 종료는 q를 이용


2. Idle stats을 보면 C0로 되어 있는지 여부를 확인 가능


3. Frequency stats를 보면 CPU의 사용률 확인 가능


4. Device stats를 보면 Device들의 상태 확인 가능


5. c-state과 관련된 설정 확인 → Good / Bad에서 Bad가 나쁜 의미 아님(C-State와 관련 있는 설정을 의미)


참고 URL : http://egloos.zum.com/repository/v/5876237


+ Recent posts