[FTP (File Transfer Protocol)]
- client가 FTP server에 접속하여 자신의 파일을 server에 넘겨주거나(upload)
server에 있는 파일을 내 컴퓨터로 전송(download)
- 정보
패키지 : vsftpd-*
데몬 : vsftpd
방화벽 : port=21 and 20 or random/tcp, service=ftp
설정파일 : /etc/vsftpd/vsftpd.conf
Active Mode
- 데이터 전송포트를 Client가 결정함
- Server가 Client로 데이터 전송 시 방화벽 문제로 인하여 데이터 전송 불가(화이트 보드 현상)
- Client의 방화벽을 모두 열 수 없는 현실적인 문제에 직면
-> FTP프로그램만 방화벽을 열어주도록 설정
- 동작 방식
server는 21번 port를 command port로 사용하고 20번 port를 data port로 사용
client는 random port 2개를 각각 command port와 data port로 사용
client가 FTP server에 접속을 하면 자신의 command port를 이용하여
server의 command port(21/tcp)로 연결하여 명령어를 주고 받음
client가 data 전송을 요청하면 server가 자신의 data port(20/tcp)를 이용하여
client의 data port로 연결하여 명령어를 주고 받음
- 설정파일
anonymous_enable : 익명 ftp 서비스 활성화 여부 설정
local_enable : 로컬 계정 사용자 접속 여부 설정
write_enable : 쓰기 가능 여부 설정
local_umask : 파일 권한 정의(파일의 권한은 644)
anon_upload_enable : anonymous 사용자가 upload하는걸 허용할 것인가
dirmessage_enable : 특정 디렉토리에 접근했을 때 메시지를 띄울것인가
xferlog_enable : xferlog 파일 사용 여부(ftp 로그 파일)
xferlog_file : xferlog 파일 저장 경로
xferlog_std_format : xferlog를 기본 형태로 사용할 것인지 여부
connect_from_port_20 : 20번 port 연결 여부 -> active 모드 사용 여부
idle_session_timeout : 아무동작도 하지 않을 때 time out 되기까지 시간 설정
data_connection_timeout : 데이터를 주고 받을 때 time out 되기까지 시간 설정
ftpd_banner : ftp 접속 시 뜨는 문구
-> banner_ftp : banner로 띄울 파일 지정
chroot_local_user : local user 격리 허용 여부
chroot_list_enalble : 격리 예외 목록 사용 여부
chroot_list_file=/etc/vsftpd/chroot_list : 격리 예외 목록 (원래 존재하는 파일이 아니기 때문에 사용하려면 만들어줘야함)
* chroot : 특정 사용자를 자신의 홈디렉터리에서 벗어나지 못하도록 격리하는 것
allow_writeable_chroot=YES
-> chroot를 설정했을 경우 필수적으로 추가 해줘야하는 문구
ftp 접속 테스트용 계정 RWJ 생성 후 진행
ftp 패키지 설치 후 방화벽 예외 규칙을 추가 해준다
win 10을 ftp client로 사용해서 ftp server인 CentOS에 연결을 시도 해본다
client가 server에 성공적으로 접속 했지만 server에서 client로 data를 보낼 때
client의 방화벽 문제로 차단되는 화이트보드 현상이 발생한다
이를 해결하기 위해서는 client의 방화벽 또한 열어줘야 한다
하지만 random port에 따라 모든 포트의 방화벽을 여는 것은 보안상 문제가 생기기 때문에
ftp 프로그램에 한해서만 방화벽을 여는 식으로 설정한다
(이 또한 보안상 문제가 있으며 실제로 사용하지는 않는다)
ftp 프로그램에 한해서 연결을 허용한다는 인바운드 규칙을 추가 후 다시 연결 해본다
성공적으로 접속 후 데이터도 잘 주고 받는 것을 확인 할 수 있다
(파일을 가져오는건 get, 넣는 것은 put)
이번에는 RWJ 계정에 chroot를 설정하여 차이점을 살펴본다
설정파일에서 chroot list 사용을 활성화 시키고 해당 위치에 chroot_list 파일을 생성, 내용에 RWJ를 입력해준다
(원래 존재하는 파일이 아니기 때문에 생성 해줘야 한다)
서비스 재시작으로 설정을 적용 시킨뒤 다시 win10에서 접속 해보면
chroot에 쓰기 권한이 없어서 오류가 뜨기 때문에 설정파일에 allow_writeable_chroot=YES를 추가 해주도록 한다
왼쪽은 chroot 설정을 하지 않았을 때 오른쪽은 chroot를 설정했을 때다
설정 전에는 어느 디렉토리든 자유롭게 이동이 가능했던 것과 다르게
RWJ 홈 디렉터리가 최상위 디렉터리로 인식되어 상위 디렉토리로 이동할 수 없게 격리된 것을 확인할 수 있다
'Linux' 카테고리의 다른 글
FTP-passive mode (0) | 2022.10.05 |
---|---|
firewall 정리 (0) | 2022.10.04 |
DHCP(2) (0) | 2022.09.27 |
DHCP(1) (0) | 2022.09.27 |
Process 관리 (0) | 2022.09.23 |