반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

hann-blume

Linux - FTP (File Transfer Protocol) 본문

Linux

Linux - FTP (File Transfer Protocol)

hann-blume 2020. 3. 21. 18:15

 

 

 

FTP (File Transfer Protocol) : 파일전송규약


- System간 File을 업로드 & 다운로드를 진행할 때 사용되는 통신규약
- TCP/IP 환경에서 파일 전송용 Application Protocol
- 시스템에 등록된 사용자들을 위한 FTP Service와 

익명의 모든 사용자에게 개방하는 Anonymous FTP Service가 있음.
(일반적으로 익명 서비스의 경우 업로드는 허용하지 않음)

- FTP는 TCP 기반으로서 TCP 서비스만 사용하게됨
- 20번의 Data 포트(데이터 전송용)와 Control 포트인 21번 포트. 2개의 포트를 사용
- FTP mode에 따라 Data 포트가 항상 20번 포트를 사용하는 것은 아님(Control 21번 포트는 고정)

- Active와 Passive 모드가 있으며 접속요청을 하는 클라이언트가 결정하게 됨

 

 


(시스템에 등록된 사용자는 /etc/passwd에 정의되어있는 사용자들을 말함. 익명사용자는 시스템에 등록되어 있지 않고
anonymous 라는 공용 계정을 사용하는 사람들을 말함)

Client -> Server = 업로드
Server -> Client = 다운로드

Active모드는 Server가 Client로 접근을 하는 것이기 때문에
Client가 방화벽 설정을 해주어야하는 단점이 있다.

Passive모드는 Client가 Server로 접근.
Server가 랜덤포트를 선정해서 Client에게 주면 Client는 해당 포트로 접근해서 사용한다.
하지만 말그대로 랜덤이기 때문에 접속할 때 마다 포트가 바뀌기 때문에
방화벽에 규칙을 추가해서 계속 바뀌는 것을 방지한다.


제어판 - 시스템 및 보안 - windows 방화벽에서 앱 허용 - 설정변경 - 다른 앱 허용 - 찾아보기 - fpt 검색
- ftp.exe- 열기 - 추가
하면 '파일 전송 프로그램'이 목록에 생김.



기본 접속기 ([윈도우]cmd - ftp)는 기본적으로 Active모드만 가능하고
Passive모드를 사용하고싶으면 알 FTP같은 프로그램을 설치해주면 된다.
프로그램을 사용하면 추가적으로 방화벽 설정을 자동으로 해주는 장점도 있다.

ftp 패키지 설치
# yum -y install vsftpd-*
# rpm -qa | grep vsftpd

방화벽 
# firewall-cmd --permanent --add-service=ftp


랜덤포트 3500~3550을 미리 열어놓는다
# firewall-cmd --permanent --add-port=3500-3550/tcp
# firewall-cmd --reload

ftp시작
# systemctl start vsftpd
자동시작 등록
# systemctl enable vsftpd

백업
# mkdir /backup/ftp

# cp -p /etc/vsftpd/vsftpd.conf /backup/ftp

# vi /etc/vsftpd/vsftpd.conf

12 anonymous_enable=YES
익명 사용자 접근 허용


16 local_enable=YES
일반 사용자 접근 허용


19 write_enable=YES
쓰기 작업을 허용(업로드를 허용)


29 anon_upload_enable=YES
익명 사용자 업로드 허용


33 anon_mkdir_write_enable=YES
익명 사용자 쓰기 권한 허용 - 19라인이 허용이여도 33라인이 거부이면
익명 사용자는 쓰기가 불가능하다.


23 local_umask=022
허가권 세팅값

 

 

위의 문장별 의미는 이 포스팅의 맨 아래에 정리하도록 하겠다.(매우 많다.)

!! 익명사용자와 관련된 12 29 33번 줄은 기본값이 NO이기 때문에 YES라고 되어있어도
주석이 되어있으면 기본값 NO로 거부된다.


알FTP - 접속하기 - 192.168.131.100 - hann - password입력 - passive mode체크 - 접속 
등록된 사용자는 ftp 접속시 자신의 홈 디렉터리에서 시작한다.

 

 

반대로
익명사용자는 ftp 접속시 pub디렉터리에서 시작한다.

 


/ver/ftp/pub은 익명사용자의 홈 디렉터리라고 생각하면 된다.
pub 위치는 /ver/ftp/

 


ftp에서 익명으로 접속후 pub하위에 폴더를 생성해보자.

우클릭-새폴더

 


생성이 되지않는다.
그럼 설정파일에가서 주석을 풀어주고 모든 권한을 YES로 해주자.
그래도 안된다.
이유는
# ls -ld /var/ftp/pub
other에 쓰기권한이 없어서이다.

# chmod 757 /var/ftp/pub


다시해보면 폴더가 생성된다.


참고로
만약 /var/ftp/pub가 아니라 /var/ftp의 퍼미션을 757로
/var/ftp의 other 퍼미션에 쓰기권한을 주게되면
모든 익명사용자의 ftp접속을 차단한다. (이건 그냥 규칙)


43 connect_from_port_20=YES
20포트 연결을 사용하겠다. (Active 사용가능)

Wireshark를 실행시켜보자

필터링 은
ftp or ftp-data 로 한다.

ftp - Active 로 hann 접속

 

패스워드는 1을 사용중인데
Wireshark를 보면 PASS 1 로 패스워드가 그대로 노출되는 것을 알 수 있다.

 



Passive모드

 

44번째줄위치에 아래 내용을 추가해주자
pasv_enable=YES
위 문장은 없거나 주석이여도 기본값이 YES이다.
하지만 NO 이면 Passive모드에서 파일 업로드가 되지않는다.
pasv_min_port=3500
pasv_max_port=3550

이번엔 Passive모드 hann로 접속
FTP에서 파일을 업로드하면
명시해준 포트번호 내에서 할당하여 사용하는 것을 알 수 있다.


37 dirmessage_enable=YES
접속 메세지 설정
접속메세지는 접속 계정의 홈디렉터리에 .message 형식으로 파일을 만들어준 후에 사용한다.
# vi /home/hann/.message
# vi /var/ftp/.message

디렉터리 이동제한
105 #chroot_local_user=YES
106 #chroot_list_enable=YES
108 #chroot_list_file=/etc/vsftpd/chroot_list

chroot 3개 다 주석풀어주면 사용
allow_writeable_chroot=YES
allow가 있어야 적용

# vi /etc/vsftpd/chroot_list
해당 파일에 적힌 사용자는 위의 제한을 받지않게 된다

deny_file={*.exe}
업로드 파일 제한

useradd user1

user1과 hann 비교



40 xferlog_std_format=YES   
FTP Log 저장 시 표준방법으로 저장
즉, FTP에 관한 로그를 저장함

Log가 저장되는 위치
57 #xferlog_file=/var/log/xferlog

# vi /var/log/xferlog

Fri Mar  6 16:25:43 2020 1 ::ffff:192.168.1.1 0 /a.exe b _ i r user1 ftp 0 * i
b는 실행파일
a는 문서파일
i = 서버에게 업로드가 된 것.
o = 다운로드
0 = 파일크기
맨뒤 c = 전송성공
맨위 i = 전송실패(불안정한 전송)
r = 로컬계정
a ? = 익명계정
ftp = 사용한 서비스

보안에 관련된 로그(접속기록,생성,삭제,전환 등등의 전반적인 로그)
# tail secure
# tail -f secure
tail 을 실시간으로 확인

같은 연결로 로그인해보면 실시간으로 로그인 로그가 나온다.

 

 

 

anonymous_enable=YES 익명사용자의 FTP접속을 허용할지 결정
local_enable=YES 로컬사용자의 FTP접속을 허용할지 결정
write_enable=YES FTP 접속 후 쓰기작업을 허용할지 결정 ( 로컬, 익명 둘 다 포함 )
local_umask=022 업로드 된 File의 허가권의 기본값을 정의
#anon_upload_enable=YES 익명사용자는 기본적으로 업로드가 거부, 해당옵션을 이용하여 업로드를 허가해 줄 수 있다
#anon_mkdir_write_enable=YES 익명사용자가 FTP접속 후 Directory 생성을 가능하게 할지 결정
dirmessage_enable=YES FTP 접속 시 해당 계정의 홈 Directory로 자동 접근 그때, 각 계정의 홈 Directory에 dirmessage를 설정하여 화면에 표시 할 수 있음
xferlog_enable=YES FTP Log 기록을 남길지 결정
connect_from_port_20=YES FTP 서버의 데이터 Port 정의
#xferlog_file=/var/log/xferlog FTP Log가 저장되는 위치 정의
xferlog_std_format=YES FTP Log 저장 시 표준방법으로 저장 
#idle_session_timeout=600 FTP 접속 후 600초 동안 아무런 작업을 진행하지 않으면 접속을 종료
#data_connection_timeout=120 데이터 전송용 포트 연결 대기시간
#ftpd_banner=Welcome FTP 접속 시 화면에 띄어줄 Banner 문구 지정
#chroot_local_user=YES 사용자 디렉터리 이동제한 설정( 기본값 : 모든 사용자가 자신의 홈 directory이외의 다른 directory로 이동이 불가)
#chroot_list_enable=YES 사용자 디렉터리 이동제한 시 이동제한을 제외 시킬 사용자 목록 정의 파일인 chroot_list_file의 사용 여부를 결정
#chroot_list_file=/etc/vsftpd/chroot_list 사용자 디렉터리 이동제한 시 이동제한을 제외 시킬 사용자의 목록을 정의한 파일의 위치 정의
pam_service_name=vsftpdPAM 인증 서비스 사용시 사용할 설정 파일 정의
tcp_wrappers=YES TCP_Wrapper에 의한 FTP 서비스를 제어 받을 것인지 결정
max_clients=0 최대 Client 수 지정
max_per_ip=0 동시 FTP 사용자 수 지정
pasv_enable=YES Passive Mode 사용
pasv_min_port Passive Mode 사용시 사용할 Data Port 시작 값
pasv_max_port  Passive Mode 사용시 사용할 Data Port 끝 값
deny_file={*.[확장자],*.[확장자]} Data Upload시 제한할 파일명 정의
guest_enable=NO 가상사용자 운영여부 지정
guest_username=ftp 가상사용자의 실제 계정 명 지정
user_sub_token=xxx 가상 사용자들을 지칭할 가상의 변수 지정
local_root=/home/virtual/dir_name 가상사용자들의 홈 Directory
allow_writeable_chroot=YES chroot가 적용 된 사용자에게만 쓰기 권한 부여

 

 

 

 

 

 

 

여기까지 FTP 에 대한 설명이 끝났다.

반응형

'Linux' 카테고리의 다른 글

Linux - Samba  (0) 2020.03.21
Linux - NFS (Network File System)  (0) 2020.03.21
Linux - VNC (Virtual Network Computing)  (0) 2020.03.21
Linux - SSH (Secure Shell)  (0) 2020.03.21
Linux - Telnet  (0) 2020.03.21