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 주소로 클라이언트와 통신할 수 있다.
- anonymous_enable=NO
- 설정 특징
- 포트 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에 있는 사용자는 접근이 금지
- chroot_list_file=/etc/vsftpd/chroot_list
- FTP 사용자를 추가
- $ useradd -m ftp_user
- $ passwd ftp_user
- $ chown ftp_user:ftp_user -R /home/ftp_user/
- Ref. -R은 “recursive” 옵션으로, 지정한 디렉터리의 모든 하위 디렉터리와 파일에 대해 재귀적으로 소유권을 변경
- 즉, /home/ftp-user/ 디렉터리뿐만 아니라 그안에 있는 모든 파일과 하위 디렉터리의 소유권도 동일하게 변경
- Ref. -R은 “recursive” 옵션으로, 지정한 디렉터리의 모든 하위 디렉터리와 파일에 대해 재귀적으로 소유권을 변경
- 새 사용자를 vsftpd user_list에 추가
- echo “ftp_user” | sudo tee -a /etc/vsftpd/user_list
- tee : 입력을 받아서 표준 출력(터미널 화면)에 출력하고, 동시에 파일로도 그 입력을 저장하는 명령
- -a : “append”를 의마하며, 파일의 기존 내용을 덮어쓰지 않고, 새로운 내용을 파일 끝에 추가
- tee : 입력을 받아서 표준 출력(터미널 화면)에 출력하고, 동시에 파일로도 그 입력을 저장하는 명령
- echo “ftp_user” | sudo tee -a /etc/vsftpd/user_list
- 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 명령으로 파일을 묶어서 아카이브 파일을 만들어도 원본 파일은 그대로 있음
- 생성될 아카이브의 이름을 지정, f 다음에 오는 이름을 아카이브 명으로 간주
- 아카이브 내용 확인: 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
- gunzip
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
- bzcat
- bzip2
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 |