Day 10-FTP

2019. 11. 29. 10:26Security/리눅스

FTP서비스를 사용하기 위한 기본 설정

홈 디렉토리 밑에 html에 201911129란 폴더를 만들고 http://192.168.10.11/~bst15/ 에 접속

20191129 폴더가 생성되어 있음을 확인.

 

* FTP

- 대용량의 파일 전송 서비스에 적합하며, 웹 서비스의 일부로 통합 운영되는 추세.

- xinetd보다는 standalone 형태로 운영하기 때문에 시스템에 리소스를 많이 차지.

 

#systemctl start vsftpd

// vsftpd 서버 실행

FTP의 Out of band

- 21번 포트 : 컨트롤 커넥션

- 20번 포트 : 데이터 커넥션(액티브 모드)

  -> server에서 client로 접속할때

- 1024번 이후의 포트 : 패시브 모드

  ->  client에서 server로 접속할때

 

FTP의 접속 및 전송 과정

1. FTP 클라이언트는 21번 포트를 통해 서버와 control connection을 설정.

2. 이 연결을 통해 사용자 계정, 비밀번호를 전송

3. 클라이언트는 control coneection(제어 연결)을 통해 디렉토리 변경과 같은 명령을 전송

4. 서버측은 제어연결을 통해 파일 전송을 위한 명령을 받으면 TCP data connection을 초기화

5. 하나의 파일 전송이 끝나면 data연결은 close된다(non persistent 방식)

6. 다음 파일 전송을 위해서는 새로운 TCP connection을 생성.

 

ftp 관련 파일 

- /usr/sbin/vsftpd : 데몬 
- /etc/vsftpd/vsftpd.conf : 설정파일

- /etc/pam.d/vsftpd : PAM 모듈

- /etc/vsftpd/ftpusers, /etc/vsftpd/user_list : 접근 제한 파일. 둘중에 하나만 설정해도 정상적으로 접근 제한이 작동하기 때문에 두 곳 모두에 세팅할 필요는 없고, 두 곳에 각각 다르게 세팅되지 않도록 주의해야한다.

 

* Acive mode와 Passive mode의 구분

- active, passive에 따라 FTP의 설정이 달라지기 때문에 알아둬야 함.

 

Active mode(액티브 모드)

- client가 데이터를 수신 받을 임의의 포트를 서버에 알려주면 서버는 20번 포트를 통해 클라이언트에게 데이터를 전송.

[과정]

1. Client에서 Server로 FTP 제어 연결 요청
2. Client에서 제어 연결을 통해 자신의 Data 전송 Port(Random Port)를 Server 측에 알려줌
3. Server에서 Client로 Data 전송 연결 요청

 

Passive mode(패시브 모드)

- 서버가 data를 송신할 임의의 포트를 client에 알려주어 client가 서버의 임의의 포트에 접속하여 데이터를 가져감.

[과정] 
1. Client에서 제어 연결을 통해 Server 측에 Passive 연결요청
2. Server에서 제어 연결을 통해 자신의 Data 전송 Port(Random Port)를 Client 측에 알려줌
3. Client에서 Server로 Data 전송 연결 요청

 

* vsftpd.conf

Active mode 설정
- pasv_enable=NO(default : YES)  : 클라이언트에서 passive 모드로 접속을 요청해도 active 모드로만 접속된다.

 

Passive mode 설정
- pasv_enable=YES (default : YES)
- pasv_min_port=0 (default : 0, any port)
- pasv_max_port=0 (default : 0, any port)

- default값이 0으로 되어있어도 방화벽이나 공유기 사용시에 passive mode에서 사용하는 port 번호를 등록해줘야 하기 때문에 범위를 반드시 지정

 

익명 사용자 관련 설정

-  anonymouse_enable 옵션으로 사용하며 지금은 전혀 사용하지 않는다.

 

제한 설정

max_clients=30
max_per_ip=3 (0은 무제한)
ls_recurse_enable=YES (ls –R 명령은 부하가 크다)

 

chroot 설정(중요)

- chroot 설정은 외부 디렉토리로 연결된 link 디렉토리에 접근도 금지된다.

- 이때는 mount 명령을 이용( mount --bind [원본 디렉토리] [연결할 디렉토리])

#chroot_local_user=YES (d:No)

 

#chroot_list_enable=YES
// chroot_local_user가 NO일 때는 chroot_list_file에 지정된 사용자만 chroot를 적용

// chroot_local_user가 YES일 때는 chroot_list_file에 지정된 사용자만 chroot를 적용하지 않음

 

#chroot_list_file=/etc/vsftpd/chroot_list

// default 값 : /etc/vsftpd/chroot_list

 

#allow_writeable_chroot=YES

// chroot 적용 사용자의 경우 이 설정이 반드시 필요.

 

ftp가 standalone인 경우에 사용되는 항목
listen=YES
tcp_wrappers=YES
- /etc/hosts.deny 이나 /etc/hosts.allow 파일에 정의
- vsftpd : 192.168.10. (마지막에 .은 패턴을 지정) 

 

등록된 사용자(/etc/passwd) 관련 설정
local_enable=YES(No로 할경우 익명 사용자(어나니머스)만 접속 가능) 
write_enable=YES
local_umask=022

 

FTP의 접근 제한 파일

1. user_list 

userlist_file(/etc/vsftpd/user_list)에 등록된 계정에 대한 접속 제어는 userlist_enable과 userlist_deny에 따라 결정. userlist_enable의 default는 No지만 YUM으로 설치된 경우 Yes로 설정되어 있다.

2. ftpusers

PAM에 의한 접속 제어는 userlist를 이용한 방법과 유사. 이 기능은 /etc/pam.d/vsftpd에 접속 제한 방식을 설정하고 접속이 제한된 계정의 목록은 ftpusers 파일을 이용한다.

1. /etc/vsftpd/vsftpd.conf

2. pam_service_name = vsftpd(vsftpd 서버의 PAM 제어를 위한 서비스명을 등록. 등록된 이름으로 설정 파일이 생성.)를 설정이 되어있는지 확인

3. /etc/pam.d/vsftpd의 sense 설정이 

Deny 라면 ftpusers에 등록된 계정은 ftp 접속을 불허

Allow 라면 ftpusers에 등록된 게정만 ftp 접속을 허용

 

[실습]st1 계정으로는 ftp 접속이 되게하고 st2 계정으로는 ftp 접속이 안 되게하기

1. userlist를 이용하는 방법

#cat /etc/vsftpd/vsftpd.conf : userlist_enbale 값이 yes로 되어있음을 확인

#cat /etc/vsftpd/user_list : userlist_deny 값이 디폴트인 yes로 설정되어 있기때문에 user_list 파일에 등록된 사용자는 접속이 불허됨으로 접속이 불허할 st2를 목록에 추가.

#systemctl restart vsftpd : 데몬 재시작

st1은 ftp를 통해서 접속이 되고 st2는 접속이 되지 않음을 확인 가능.

 

2. ftpuser를 이용하는 방법

#cat /etc/pam.d/vsftpd : cat 명령을 통해 sense가 deny로 설정되어있기때문에 ftpusers에 등록된 계정은

                                ftp 접속을 불허함을 알 수 있다.

ftpusers에 st2 추가

#systemctl restart vsftpd : 데몬 재시작

st1은 ftp를 통해서 접속이 되고 st2는 접속이 되지 않음을 확인 가능.

 

user_list에 의해 접속이 거부되었을 때는 530 Permission denied로 뜨고, 

ftpusers에 의해 접속이 거부되었을 때는 530 Login incorrect로 뜬다.

 

* 용어 및 개념 정리

Out of band : 리소스를 2개이상 먹는 것. 예를들어 FTP에서 접속해서 폴더들을 탐색하거나 이동하는 제어 시그널은 21번 포트를 사용하지만 데이터를 업로드하거나 다운로드 받을때는 새로운 20번 포트를 사용한다.   

 

'Security > 리눅스' 카테고리의 다른 글

DAY 12-DNS 서버(2)  (0) 2019.12.04
Day 11-DNS 서버  (0) 2019.12.03
Day 9-CRON, RSYNC, 서비스와 데몬  (0) 2019.11.28
Day 8-리눅스 프로세스 및 RPM&YUM  (0) 2019.11.27
Day 7-IP alias, 리눅스 파일시스템  (0) 2019.11.26