토이 프로젝트에서 대용량 파일을 서버로 업로드하고 이를 활용하기 위해 FTP가 필요한 상황이 발생했습니다.
FTP에 'guest' 계정으로 접속을 하여 'root'(최상단) 폴더까지의 접근을 막고,
오직 'guest' 폴더 내에서만 사용 할 수 있도록 만들어보겠습니다.
우분투에 유저를 생성합니다.
sudo adduser guest
비밀번호를 입력하고, 나머지 설정은 넘어가도록 하겠습니다.
그럼 디렉토리에 home/guest가 생성됩니다.
리눅스 서버에서 가장 흔히 사용하는 FTP (File Transfer Protocol) 서버 프로그램
서버 관리와 설정이 간편하다는 장점과 보안 강화 등 많은 장점을 가지고 있다.
vsftpd를 설치하기에 앞서 설치 가능한 패키지 리스트를 밑의 명령어를 통해 최신화하고 vsftpd를 설치해줍시다.
sudo apt update
sudo apt install vsftpd
설치가 끝나면 vsftpd의 설정파일을 수정합니다.
sudo nano /etc/vsftpd.conf
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
pasv_addr_resolve=YES
pasv_address=**자신의 아이피**
allow_writeable_chroot=YES
ftpd_banner=Welcome to blah FTP service.
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_list_enable=YES (기본값 = NO)
명시된 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다.
수정이 끝나면 vsftpd를 재시작하고 서버가 부팅될때 start 작업 없이 시작됩니다.
sudo systemctl restart vsftpd && sudo systemctl enable vsftpd
명령어를 통해 ufw를 설치합니다.
apt install ufw
ufw 포트를 열어줍시다.
ftp: 20, 21, 10000:10100 | ssh: 22
sudo ufw allow from any to any port 20,21,10000:10100 proto tcp
sudo ufw allow 22
반드시 22포트를 열어주셔야 gcp에서 ssh 연결이 작동됩니다.
만약 놓쳐서 ssh 접근이 불가능 하다면 Google Cloud Console로 이동하여 직렬콘솔로 ufw를 꺼주시거나
사용중인 VM 인스턴스에 시작 스크립트를 밑의 명령어를 입력 한 뒤 재부팅 해주시면 됩니다.
/usr/sbin/ufw disable
VPC 네트워크의 방화벽에 들어갑니다.
방화벽 규칙을 만들기를 선택. 밑의 사진과 같이 설정해주시면 됩니다.
방화벽 설정을 마쳤다면 VM 인스턴스로 이동해주세요.
인스턴스 수정에 들어간 다음 인스턴스 네트워크 태그를 아까 대상태그에 입력한 vsftpd를 입력해주면 끝입니다.
ftp://guest@자신의 아이피
파인더에서도 접속뿐만 아니라 다른 클라이언트를 통해서도 접속이 원활하게 작동합니다.
netstat -a |grep ftp |grep ESTABLISHED 명령어를 통해 ftp에 접속 현황을 볼 수 있습니다.
사진에 보이는 root 폴더는 서버 최상단 폴더가 아닌 테스트로 이름 지은 폴더입니다. (home/guest/root)
ftp 연결에서 행만 돌고있어요
=> 방화벽에 제대로 활성화가 안된거 같습니다. ufw 포트와 gcp 방화벽을 다시 한번 확인해주세요
클라이언트에서는 접속이 원활한데, 파인더에서 접속은 되지만 디렉토리 목록이 안보여요
=> 방화벽 설정과 함께 sudo nano /etc/vsftpd.conf 밑의 코드를 살펴봅시다.
listen=YES
listen_ipv6=NO
...more
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
pasv_addr_resolve=YES
pasv_address=**자신의 아이피**
이 부분이 제대로 작성되었는지 확인합니다.
update: 23.10.04 llisten -> listen 오타 수정