Google Cloud, Ubuntu, FTP, vsftpd
읽는 시간 : 3 분 소요
대용량 파일을 서버로 업로드하기 위해서는 FTP를 쓰는 것이 제일 쉽고 빠릅니다.
구글 클라우드 플랫폼에서 root SSH키 생성 후 WINSCP SFTP 접속하기
https://blog.wsgvet.com/google-cloud-platform-root-ssh-winscp-setting지난번에 소개해드렸던 SFTP의 경우 root 계정으로 어느 위치든 편하게 이동할 수 있는 장점이 있지만
보안접속 특성상 CPU를 엄청나게 먹습니다. 그리고 속도도 2~3MB/s 정도 밖에 나오지 않습니다.
그래서 우분투 20.04에 vsftpd를 설치하고 파일을 이동하는 방법에 대해 설명드리겠습니다.
1번 방법은 단순히 /home/ftpuser 디렉토리에만 파일을 업로드 및 수정할 수 있게하는 셋팅입니다.
웹서버의 루트에 직접 파일을 업로드 및 수정하려면 FTP 유저 생성-2 로 가세요!
1sudo adduser ftpuser위 명령어로 ftpuser 라는 계정을 생성합니다.
1~# sudo adduser ftpuser2Adding user `ftpuser' ...3Adding new group `ftpuser' (1004) ...4Adding new user `ftpuser' (1003) with group `ftpuser' ...5Creating home directory `/home/ftpuser' ...6Copying files from `/etc/skel' ...7New password:8Retype new password:9passwd: password updated successfully10Changing the user information for ftpuser11Enter the new value, or press ENTER for the default12 Full Name []:13 Room Number []:14 Work Phone []:15 Home Phone []:16 Other []:17Is the information correct? [Y/n] y18~#위와 같이 생성 후 비번을 지정하고, 밑에 물어보는게 있는데 그냥 엔터 막 누르면 됩니다. 마지막에 y엔터 해주시구요.
home directory `/home/ftpuser' 이 의미는 ftpuser가 로그인하게 되면 home 디렉토리가 그렇다는 뜻입니다. 권한도 여기 밖에 없어서 이곳으로 파일을 전송한 후 root 권한이 있는 계정으로 원하는 폴더로 옮긴 후 unzip을 이용하면 빠르겠죠? ^^
1번 방법으로는 단순하게 업로드 후 root 계정으로 SSH접속해서 일일이 이동 후 압축 해제 및 권한 설정으로 매우 복잡합니다. 그래서 ftp유저에게 직접 파일을 수정하는 권한을 주면 문제가 없겠죠? ^^
FTP서버의 루트를 /var/www/gnuboard 로 잡을 것입니다.
해당 경로를 자신에게 맞게 수정하세요!!
1sudo useradd ftpwww -g www-dataftpwww라는 계정을 www-data그룹에 속하도록 하면서 유저를 생성합니다.
1sudo passwd ftpwwwftpwww 계정의 비번을 생성합니다. FTP클라이언트에서 접속할 때 필요한 비번입니다.
1sudo usermod -d /var/www/gnuboard ftpwwwftpwww의 홈 디렉토리를 /var/www/gnuboard 로 잡습니다.
1sudo chown -R www-data:www-data /var/www/gnuboard/var/www/gnuboard 디렉토리와 그 이하 파일 및 폴더의 소유권을 www-data그룹의 www-data에게 줍니다.
1sudo chmod -R 775 /var/www/gnuboard775로 잡은 이유는 ftpuser2가 www-data그룹 소속이기 때문에 쓰기를 할 수 있게 하기 위함입니다.
이제 기본 설정은 끝났습니다. vsftpd 설정에도 약간의 차이가 있으니 참고하세요!
1sudo apt install vsftpd위 명령어로 잘 설치될 것입니다.
1sudo mv /etc/vsftpd.conf /etc/vsftpd.conf_orig위 명령어로 기존 vsftpd 설정을 백업합니다.
1sudo nano /etc/vsftpd.conf위 명령어로 설정파일을 새로 생성할 것입니다.
"FTP 유저 생성 - 1 번의 경우"
1listen=NO2listen_ipv6=YES3anonymous_enable=NO4local_enable=YES5write_enable=YES6local_umask=0227dirmessage_enable=YES8use_localtime=YES9xferlog_enable=YES10connect_from_port_20=YES11chroot_local_user=YES12secure_chroot_dir=/var/run/vsftpd/empty13pam_service_name=vsftpd14rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem15rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key16ssl_enable=NO17pasv_enable=Yes18pasv_min_port=1000019pasv_max_port=1010020allow_writeable_chroot=YES위 내용을 복사해서 붙여넣기 합니다. (FTP 유저 생성 - 1 번의 경우 위와 같이 하면 됩니다.)
FTP 유저 생성 - 2의 경우 약간 다릅니다.
1listen=NO2listen_ipv6=YES3anonymous_enable=NO4local_enable=YES5write_enable=YES6local_umask=0027file_open_mode=07778dirmessage_enable=YES9use_localtime=YES10xferlog_enable=YES11connect_from_port_20=YES12chroot_local_user=YES13secure_chroot_dir=/var/run/vsftpd/empty14pam_service_name=vsftpd15rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem16rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key17ssl_enable=NO18pasv_enable=Yes19pasv_min_port=1000020pasv_max_port=1010021allow_writeable_chroot=YES위와 같이 넣습니다.
1local_umask=0022file_open_mode=0777위 설정에 의해서 ftpwww가 업로드한 파일과 폴더의 권한이 775로 맞춰집니다.
그누보드의 경우
웹루트에 있는 config.php에서 166번째 줄에 보면
1// 퍼미션2define('G5_DIR_PERMISSION', 0755); // 디렉토리 생성시 퍼미션define('G5_FILE_PERMISSION', 0644); // 파일 생성시 퍼미션위와 같은 내용이 나옵니다.
즉 www-data에 의해 파일이나 폴더가 업로드 되면 주어지는 퍼미션에 대한 옵션인데요.
1// 퍼미션2define('G5_DIR_PERMISSION', 0775); // 디렉토리 생성시 퍼미션define('G5_FILE_PERMISSION', 0664); // 파일 생성시 퍼미션www-data 그룹에 있는 ftpwww도 수정할 수 있게 바꿔야 정상적으로 삭제도 되겠죠? ^^
컨트롤 + O, 엔터, 컨트롤 + X 로 저장 후 빠져나옵니다.
1sudo systemctl restart vsftpd && sudo systemctl enable vsftpd위 명령어로 vsftpd의 설정을 적용하고 재부팅시 시작하도록 합니다.
우분투 20.04 자체 방화벽인 ufw에서 방화벽을 엽니다.
1sudo ufw allow from any to any port 20,21,10000:10100 proto tcp위와 같이 방화벽 셋팅을 완료합니다.
이제 구글 클라우드 플랫폼에서도 열어줘야 합니다.
구글 클라우드 플랫폼에 접속 -> VPC 네트워크 -> 방화벽을 클릭합니다.
위와 같이 + 방화벽 규칙 만들기를 클릭합니다.
빨간색 박스에 있는 내용을 다 넣습니다.
특히 tcp에 20,21,10000-10100 을 넣어줍니다. 그리고 저장을 누릅니다.
Compute Engine의 VM 인스턴스를 누릅니다.
자신의 서버를 누릅니다.
위와 같이 수정을 누릅니다.
네트워크 태그에 ftpd 를 넣습니다.
제일 밑에 저장을 누릅니다.
이제 서버 셋팅은 끝났습니다.
위 링크로 가서 filezilla client 를 다운 받습니다.
설치하면
위와 같은 화면이 나오는데 왼쪽위에 아이콘을 누른 후 스샷에 있는대로 정보를 넣습니다.
호스트에는 외부IP 주소나 홈페이지주소를 넣으면 됩니다.
포트는 안넣어도 알아서 21로 잡아주니깐 안넣을거구요.
암호화도 그냥 있는거 쓰면 됩니다.
사용자에는 아까 생성한 ftpuser를 넣구요.
비밀번호도 아까 만들었던 그 비번을 넣으면 됩니다.
그리고 연결을 누릅니다.
드디어 연결이 성공했습니다.
왼쪽 부분이 내 컴퓨터 부분이고 오른쪽이 서버 쪽 공간입니다.
참고로 서버 쪽 공간은 /home/ftpuser 디렉토리입니다.
업로드를 해보면 100Mbps 기준 회선에서 풀속도가 나옵니다. 11.2MB/s 까지도 나오더라구요. ㅎㅎ
이제 업로드 후 SSH로 접속해서 원하는 곳으로 이동해준 후 압축을 풀어서 쓰시면 됩니다.
예를들면
1sudo mv /home/ftpuser/abcd.zip /var/www위와 같이 FTP폴더에 업로드한 abcd.zip 파일을 /var/www 에 옮기는 것입니다.
그런 후 unzip을 하면 제일 좋겠죠? ^^
위와 같은 방식으로 파일을 전송하면 전혀 암호화되지 않습니다.
그래서 암호화 전송을 설정하면 안심이 되겠죠?
마침 우리는 Let's Encrpyt에서 발급 받은 Wildcard 인증서가 있죠 ^^
그 인증서를 이용해서 TLS 전송을 할 예정입니다.
1sudo mv /etc/vsftpd.conf /etc/vsftpd.conf_plain기존에 쓰던 파일을 _plain 이름으로 바꿔줍니다.
1sudo nano /etc/vsftpd.conf위 명령어로 새로 생성합니다.
1listen=NO2listen_ipv6=YES3anonymous_enable=NO4local_enable=YES5write_enable=YES6local_umask=0027file_open_mode=07778dirmessage_enable=YES9use_localtime=YES10xferlog_enable=YES11connect_from_port_20=YES12chroot_local_user=YES13secure_chroot_dir=/var/run/vsftpd/empty14pam_service_name=vsftpd15pasv_enable=Yes16pasv_min_port=1000017pasv_max_port=1010018allow_writeable_chroot=YES19ssl_enable=YES20allow_anon_ssl=NO21force_local_data_ssl=YES22force_local_logins_ssl=YES23ssl_tlsv1=YES24ssl_sslv2=NO25ssl_sslv3=NO26require_ssl_reuse=NO27ssl_ciphers=HIGH28rsa_cert_file=/etc/letsencrypt/live/aced.ga/fullchain.pem29rsa_private_key_file=/etc/letsencrypt/live/aced.ga/privkey.pem위 내용을 복사해서 붙여넣기 합니다. (FTP 유저 생성 -2 셋팅과 같습니다.)
마지막에 인증서 경로를 꼭 바꿔주세요!!!!!!!
컨트롤 + O, 엔터, 컨트롤 + X 로 저장 후 빠져나옵니다.
1systemctl restart vsftpd이제 파일질라로 가서 똑같이 접속합니다.
그러면 위와 같이 letsencrypt 인증서 내용이 나오는데 확인을 누르면 접속됩니다.
이제 안전하게 파일을 전송할 수 있습니다.
다만 전송속도가 10~20% 정도 내려가는 것 같습니다.
암호화없이 전송시 11.2MB/s까지 나왔는데 TLS로 전송하니 9~9.5MB/s로 내려가네요.
그래도 암호화되게 전송하니 안심이 되네요 ^^
혹시나 암호화 안해도 되니 빠른 속도를 원하시면 기존 설정으로 돌리면 됩니다.
1sudo mv /etc/vsftpd.conf /etc/vsftpd.conf_tls234sudo mv /etc/vsftpd.conf_plain /etc/vsftpd.conf위 두 명령어를 내리면 tls용 설정파일을 _tls를 붙여주고, 기존에 plain 설정파일을 적용하는 것입니다.
1systemctl restart vsftpd그리고 위 명령어로 재시작해주면 됩니다.
How to setup FTP server on Ubuntu 20.04 Focal Fossa Linux - LinuxConfig.org
https://linuxconfig.org/how-to-setup-ftp-server-on-ubuntu-20-04-focal-fossa-linux[GCP] Google cloud FTP 포트 추가
https://blog.crois.net/2018/11/23/cloud-google-cloud-ftp-%ED%8F%AC%ED%8A%B8-%EC%B6%94%EA%B0%80How To Install an FTP server (vsftpd) on Ubuntu 20.04 | DevAnswers.co
https://devanswers.co/install-ftp-server-vsftpd-ubuntu-20-04/#7-secure-ftp-with-tls-recommended우분투에서 vsFTPd 기본 업로드 파일 권한이 작동하지 않습니다
https://qastack.kr/server/571289/vsftpd-default-uploaded-file-permissions-on-ubuntu-not-working리눅스 사용자 관리 명령어 (추가 useradd, adduser, 삭제 userdel, 변경 usermod)
https://withcoding.com/101리눅스 사용자 추가/수정/삭제/againg - useradd
https://webdir.tistory.com/128