본문 바로가기

02. Linux & AWS

06. FTP

728x90

FTP

FTP 개요

  • FTP(File Transfer Protocol)는 파일을 전송하기 위한 서비스
  • 웹에서 FTP의 고유 기능인 파일 전송을 편리하게 할 수 있게 되어서 예전보다 인기가 많이 떨어짐
  • 파일 전송 자체를 위해서는 성능이 뛰어남
  • vsftpd(Very Secure FTPD)
    • CentOS에서 사용하는 대표적인 FTP 서버
    • 리눅스와 유닉스 환경에서 보안성과 성능이 우수한 FTP 서버

FTP 서버 설치 및 설정

  • FTP 서버 설치하기
    • CentOS에서 FTP 서버는 기본으로 설치되어 있지 않으므로 dnf 명령으로 설치
  • vsftpd.conf 파일 편집
    • vsFTPD의 설정은 /etc/vsftpd/vsftpd.conf 파일에서 설정
  • vsftpd.config
    • /etc/vsftpd/vftpd.onf 파일에서 설정
    • vsftpd (Very Secure FTP Daemon)의 동작 방식을 제어하는 설정
    • 설정 파일을 통해 FTP 서버의 보안, 사용자 권한, 파일 접근 및 네트워크 동작 방식을 설정
  • 설정 항목
    • anonymous_enable=NO
      • 익명 사용자(anonymous)의 FTP 접근을 금지
      • 익명 사용자가 로그인할 수 없도록 하여 보안을 강화
    • local_enable=YES
      • 로컬 사용자(서버에 존재하는 사용자 계정)가 FTP 서버에 접속할 수 있도록 허용
      • 서버의 로컬 사용자 계정만이 FTP에 접근할 수 있음
    • write_enable=YES
      • 파일 업로드와 같은 쓰기 작업을 허용
      • 이 옵션을 활성화하면 FTP 사용자들이 서버에 파일을 업로드하거나 수정할 수 있음
    • dirmessage_enable=YES
      • 특정 디렉터리로 진입할 때 디렉터리 메세지 파일(.message)의 내용을 표시
      • 사용자가 FTP로 디렉터리에 접근할 때 해당 디렉터리 내의 .message 파일 내용을 표시
      • 서버의 메시지를 전달하는 용도로 사용
    • xferlog_enable=YES
      • FTP 파일 전송 기록을 활성화
      • FTP 서버에서 발생하는 모든 파일 전송 작업이 기록되어 나중에 분석할 수 있음
    • connect_from_port_20=NO
      • FTP 데이터 전송에 사용되는 포트 20을 비활성화함
      • FTP 데이터 연결에 대해 포트 20을 사용하지 않고 다른 포트를 사용할 수 있도록 함
    • xferlog_std_format=YES
      • 전송 로그를 표준 FTP 로그 형식으로 기록
      • 로그 파일이 표준 FTP 형식으로 저장되며, 다양한 분석 도구에서 읽기 쉽게 만들어 줌
    • chroot_local_user=YES
      • 로컬 사용자를 chroot로 제한하여 사용자 홈 디렉터리 밖의 파일 시스템에 접근하지 못하도록 함
      • 보안을 강화하기 위한 방법으로, 사용자가 자신의 홈 디렉터리 밖으로 벗어나지 못하게 제한
    • allow_writeable_chroot=YES
      • chroot된 디렉터리가 쓰기 가능하도록 허용
      • 기본적으로 chroot된 디렉터리가 쓰기 가능하면 보안 위험이 발생할 수 있어 vsftpd는 이를 금지하지만, 이 옵션을 활성화하면 이러한 제약을 해제합니다.
    • listen=YES
      • 설명: vsftpd가 독립된 데몬으로 실행되며, IPv4 연결을 수신
      • 의미: 단독으로 실행되어 IPv4 프로토콜을 통해 클라이언트의 연결을 처리
    • pam_service_name=vsftpd
      • 설명: PAM(PAM 인증 모듈)을 사용하여 인증을 수행하며, 해당 서비스의 이름을 vsftpd로 설정
      • 의미: vsftpd가 PAM 모듈을 사용하여 사용자 인증을 처리
    • userlist_enable=YES
      • 설명: 사용자 목록 기능을 활성화
      • 의미: FTP 서버 접근을 허용하거나 차단할 사용자를 user_list 파일에 명시할 수 있다.
    • userlist_deny=NO
      • 설명: user_list에 있는 사용자의 FTP 접근을 허용
      • 의미: user_list 파일에 있는 사용자만 접근할 수 있도록 설정
    • listen_port=10021
      • 설명: FTP 서버가 수신할 포트를 10021로 지정
      • 의미: 기본 FTP 포트인 21 대신 10021 포트에서 클라이언트 연결을 수신하도록 설정. 보안이나 네트워크 요구에 의해 포트를 변경할 수 있다.
    • pasv_enable=YES
      • 설명: 수동(Passive) 모드를 활성화
      • 의미: 클라이언트가 방화벽이나 NAT 환경에 있을 때, 서버가 데이터를 전송할 포트를 열어 두어 클라이언트가 서버에 연결할 수 있게 한다.
    • pasv_min_port=21000
      • 설명: 수동 모드에서 사용할 수 있는 최소 포트를 21000으로 설정
      • 의미: 수동 모드에서 데이터 전송 시 사용하는 포트의 범위 중 최소 값을 지정
    • pasv_max_port=21999
      • 설명: 수동 모드에서 사용할 수 있는 최대 포트를 21999으로 설정
      • 의미: 수동 모드에서 사용할 수 있는 포트의 최대 값을 지정하여 포트 범위를 제한
    • pasv_addr_resolve=NO
      • 설명: 수동 모드에서 주소를 IP 주소로만 사용하고 DNS 이름을 해결하지 않도록 설정
      • 의미: DNS를 사용하지 않고 고정 IP 주소로 클라이언트와 통신할 수 있다.
  • 설정 특징
    • 포트 21은 FTP의 기본 포트이지만 보안 상의 이유로 사용자 지정 포트 10021은 FTP용 포트로 사용
    • 포트를 사용자 지정하려면 listen_port를 원하는 포트로 변경하고 connect_from_port_20을 NO로 설정
    • 인스턴스 방화벽에서 FTP에 사용할 포트를 활성화해야 함
    • 포트 10021 및 21000-21999는 사용자 지정 및 EC2 방화벽에서 활성화
    • listen 및 listen_ipv6 파라미터는 동시에 파일에 있을 수 없기 때문에 하나만 YES로 설정되도록 구성 파일을 업데이트
  • vsftpd.config 파일 편집: /etc/vsftpd/vsftpd.conf 파일에서 설정
# 익명 사용자 접근을 금지 (보안 강화)
anonmous_enable=NO
# 로컬 사용자(서버에 계정이 있는 사용자)에게 FTP 접근 허용
local_enable=YES
# 파일 업로드 및 쓰기 작업을 허용
write_enable=YES
# 사용자가 특정 디렉터리에 진입할 때 메시지를 표시 (Ex) .message 파일)
dirmessage_enable YES 
# 로그에 모든 파일 전송 작업을 기록
xferlog_enable=YES
# 포트 20을 사용하지 않고 다른 포트로 데이터 연결을 처리
conmect_from_port_20=NO
# 표준 형식으로 파일 전송 로그를 저장
xferlog_std_format=YES
# 로컬 사용자를 그들의 홈 디렉터리(croot)로 제한 (보안 강화)
chroot_local_user=YES
#t chroot된 디렉터리에서도 쓰기 가능하도록 허용 (보안 주의 필요)
allow_writeable_chroot=YES
# Vsftpd가 독립된 데몬으로 실행되며, IPv4 연결을 수신
listen=YES
# PAM 인증 모듈을 사용하며 vsftpd 사용자 인증 처리
pam_service_name=vsftpd
# 특정 사용자만 FTP 접근을 허용하거나 차단하는 사용자 목록 기능 활성화
userlist_enable=YES
# user_list에 있는 사용자만 FTP 서버에 접근 가능 (허용 목록)
userlist_deny=No
# FTP 서버가 수신할 포트를 10021로 설정 (기본 포트는 21)
listen_port=10021
# 수동 모드(Passive Mode) 활성화 (방화벽/NAT 환경에서 사용)
pasv_enable=YES
# 수동 모드에서 사용할 최소 포트를 21800으로 설정
pasv_min_port=21000
# 수동 모드에서 사용할 최대 포트를 21999로 설정
pasv_max_port=21999
# 수동 모드에서 DNS 이름을 사용하지 않고 IP 주소만 사용
pasv_addr_resolve=NO
  • 운영 체제에 대해 다음 변수를 설정
    • chroot_list_file=/etc/vsftpd/chroot_list
    • userlist_file=/etc/vsftpd/user_list
  • 운영 체제에 대해 다음 변수를 설정
    • chroot_list_file=/etc/vsftpd/chroot_list
      • 설명: 이 설정은 vsftpd가 특정 사용자들이 홈 디렉터리 밖으로 나가지 못하게 제한(chroot)할 때 사용할 파일을 지정합니다. 즉, /etc/vsftpd/chroot_list 파일에 명시된 사용자들은 홈 디렉터리로 chroot되어 외부 파일 시스템에 접근할 수 없다.
      • 파일 역할: 이 파일에는 사용자 계정 이름이 나열되어 있다. 해당 목록에 포함된 사용자들은 홈 디렉터리에 제한(chroot)되며, 그 범위를 벗어날 수 없습니다. 보안 목적 상 중요한 설정으로, 특정 사용자의 접근을 제어하기 위한 수단
    • userlist_file=/etc/vsftpd/user_list
      • 설명: 이 설정은 FTP 서버 접근을 허용하거나 차단할 사용자를 정의한 파일을 지정
      • /etc/vsftpd/user_list 파일에 포함된 사용자들이 FTP 서버에 접근할 수 있다.
      • 파일 역할: 이 파일에 나열된 사용자 계정은 FTP 서버에 로그인할 수 있다. 이 설정과 함께 userlist_enable=YES 및 userlist_deny=NO 설정이 사용되면, user_list 파일에 있는 사용자들만 FTP 서버에 접근이 허용. 만약 userlist_deny=YES로 설정되었다면, user_list에 있는 사용자는 접근이 금지
  • FTP 사용자를 추가
    • $ useradd -m ftp_user
    • $ passwd ftp_user
    • $ chown ftp_user:ftp_user -R /home/ftp_user/
      • Ref. -R은 “recursive” 옵션으로, 지정한 디렉터리의 모든 하위 디렉터리와 파일에 대해 재귀적으로 소유권을 변경
        • 즉, /home/ftp-user/ 디렉터리뿐만 아니라 그안에 있는 모든 파일과 하위 디렉터리의 소유권도 동일하게 변경
  • 새 사용자를 vsftpd user_list에 추가
    • echo “ftp_user” | sudo tee -a /etc/vsftpd/user_list
      • tee : 입력을 받아서 표준 출력(터미널 화면)에 출력하고, 동시에 파일로도 그 입력을 저장하는 명령
        • -a : “append”를 의마하며, 파일의 기존 내용을 덮어쓰지 않고, 새로운 내용을 파일 끝에 추가
  • vsftpd 서비스 다시 시작
    • $ sudo systemctl restart vsftpd
  • FTP 서버에 연결
    • Filezilla 일반 FTP를 사용

파일 아카이브와 압축

파일 아카이브

  • 아카이브
  • : 원래 ‘보관소, 저장소’ 뜻이나, 리눅스에는 ‘파일을 묶어서 하나로 만든 것’이라는 의미로 사용
  • tar 명령
    • 원래 여러 파일이나 디렉터리를 묶어서 마그네틱 테이프와 같은 이동식 저장 장치에 보관하기 위해 사용하는 명령
    • 현재는 다른 시스템과 파일을 주고받거나, 백업을 하기 위해 여러 파일이나 디렉터리를 하나의 아카이브 파일로 생성하거나, 기존 아카이브에서 파일을 추출하기 위해 사용
    • tar
      • 기능: 파일과 디렉터리를 묶어 하나의 아카이브 파일을 생성
      • 형식: tar 기능[옵션] [아카이브 파일] [파일명]
      • 기능
        • c : 새로운 tar 파일을 생성
        • t : tar 파일의 내용을 출력
        • x : tar 파일에서 원본 파일을 추출
        • r : 새로운 파일을 추가
        • u : 수정된 파일을 업데이트
      • 옵션
        • f : 아카이브 파일이나 테이프 장치를 지정. 파일명을 ‘-’로 지정하면 tar 파일 대신 표준 입력에서 읽어들인다.
        • v : 처리하고 있는 파일의 정보를 출력
        • h : 심볼릭 링크의 원본 파일을 포함
        • p : 파일 복구 시 원래 접근 권한을 유지
        • j : bzip2로 압축하거나 해제
        • z : gzip으로 압축하거나 해제
      • 사용 예
        • $ tar xvf unix.tar
        • $ tar cvf unix.tar Unix
  • 아카이브 생성: cvf 옵션
    • 아카이브를 생성하려면 c 기능을 사용
    • v 옵션
      • 처리 중인 파일의 이름을 화면에 출력
      • 지정하지 않아도 괜찮지만 파일이 올바로 처리되는지 확인하려면 사용하는 것이 좋음
    • f 옵션
      • 생성될 아카이브의 이름을 지정, f 다음에 오는 이름을 아카이브 명으로 간주
        • Ex. $ tar cvf arctest.tar archtest
      • tar 명령으로 파일을 묶어서 아카이브 파일을 만들어도 원본 파일은 그대로 있음
  • 아카이브 내용 확인: tvf 옵션
    • 아카이브의 내용을 확인할 때는 t 기능을 사용, v 옵션은 파일의 상세 정보를 보기 위해 지정
  • 아카이브 업데이트: uvf 옵션
    • 일부 파일 내용이 바뀌었을 때 u 기능을 이용하여 수정된 파일을 추가
    • 지정한 파일이 아카이브에 없는 파일이거나, 아카이브에 있는 파일이지만 수정도니 파일일 때 아카이브의 마지막에 추가
  • 아카이브 생성하고 압축
    • 압축을 하면 아카이브 파일의 크기가 작아지므로 디스크 공간이 부족할 때 이용
    • bzip2로 압축할 경우 j 옵션을 사용
    • tar 파일로 생성한 것과 압축한 파일의 크기를 비교했을 경우 bzip2로 압축한 파일의 크기가 더 작음
    • 압축한 아카이브 파일의 내용은 tvf 로 확인이 가능하며 xvf로 추출할 수 있음

파일 압축

gzip/gunzip: .gz 파일

  • gzip 명령: 지정한 파일을 압축하여 ‘파일명.gz’ 파일을 생성
    • 기능: 파일을 압축
    • 형식: gzip [옵션] [파일명]
    • 옵션
      • -d : 파일 압축을 해제
      • -l : 압축된 파일의 정보를 출력
      • -r : 하위 디렉터리를 탐색하여 압축
      • -t : 압축 파일을 검사
      • -v : 압축 정보를 화면에 출력
      • -9 : 최대한 압축
    • 사용 예
      • $ gzip a.txt
      • $ gzip -v b.txt c.txt
    • Ex. -l 옵션: 사용하면 압축 파일에 대한 정보를 확인
    $ gzip arctest.tar
    $ ls
    $ gzip -l arctest.tar.gz
    
  • zcat 명령: 압축 파일의 내용 보기
    • 기능: gzip으로 압축된 파일의 내용을 출력
    • 형식: zcat [파일명]
    • 사용 예
      • $ zcat abc.gz
      • $ zcat abc
      • $ zcat arctest.tar.gz | more
  • gunzip 명령: 압축 풀기
    • gunzip
      • 기능: gzip로 압축된 파일의 압축을 푼다
      • 형식: gunzip [파일명]
      • 사용 예
        • $ gunzip abc.gz
        • $ gunzip abc

bzip2/bunzip2: .bz2 파일

  • bzip2는 gzip에 비해 대체로 압축률은 좋지만 속도가 약간 느림
    • bzip2
      • 기능: 파일을 압축
      • 형식: bzip2 [옵션] [파일명]
      • 옵션
        • -d : 파일 압축을 해제
        • -l : 압축된 파일의 정보를 출력
        • -t : 압축 파일을 검사
        • -v : 압축 정보를 화면에 출력
        • --best : 최대한 압축
      • 사용 예
        • $ bzip2 abc.txt
        • $ bzip2 -v a.txt b.txt
    • bzcat Command: 압축 파일의 내용 보기
      • bzcat
        • 기능: 압축된 파일의 내용 출력
        • 형식: bzcat [파일명]
        • 사용 예
          • $ bzcat abc.bz2
          • $ bzcat abc
      • bunzip2 명령
        • 기능: bzip2로 압축한 파일의 압축을 푼다
        • 형식: bunzip2 [파일명]
        • 사용 예
          • $ bunzip2 abc.txt.bz2
          • $ bunzip2 abc.txt
728x90

'02. Linux & AWS' 카테고리의 다른 글

07. 데이터베이스 서버  (0) 2024.10.27
05. 소프트웨어 관리  (2) 2024.10.27
04. 프로세스 관리  (1) 2024.10.27
03. 링크 & 셸  (0) 2024.10.20
02. AWS EC2 설정, Linux 기본 명령어, 사용자&그룹  (0) 2024.10.20