먼저 ftp를 사용할 유저를 생성합니다. 기본적으로 리눅스 상의 모든 유저는 ftp를 사용할 수 있습니다. 일반유저 한명만 추가하면됩니다.
$ sudo adduser newuser
저는 worker라는 유저를 추가하였습니다.
$ sudo adduser worker
설치
설치하는 방법은 매우 간단합니다. 아래 한줄을 입력하면됩니다.
$ sudo apt-get install vsftpd
접속을 위한 계정 IP 확인
호스팅이나 클라우드 서버를 사용하는 경우, 서비스 신청과 동시에 ip를 확인할 수 있지만, 저처럼 가상 pc에 사용하시는 분들은 해당 서버에 접속을 위해 ip를 확인할 필요가 있습니다.
$ sudo ifconfig
이렇게 입력하면 ip가 표시되지만, net-tools가 설치되어 있지 않은 경우, 해당 명령어를 사용할 수 없습니다. 그럴경우 net-tool을 아래와 같이 설치해 주세요.
$ sudo apt-get install net-tools
제 아이피는 아래와 같이 확인이 되었습니다.
ftp 접속해 보기
이제 ftp 접속을 해 접속이 가능한지 확인을 해봅시다. 저는 파일질라를 이용해 접속을 했습니다.
연결을 해 보면 바로 접속이 됩니다. 아무런 설정을 하지 않았는데도요.
하지만 파일을 업로드 하려면 파일이 업로드 되지 않을 것 입니다.
FTP 자체의 쓰기 권한을 주지 않아서 입니다. /etc/vsftpd.conf 파일을 열어 쓰기 권한을 허용해 주면됩니다.
먼저 콘피그 파일 복제.
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old
파일 열기.
$ sudo vi /etc/vsftpd.conf
write_enable=YES 문자열을 찾아 앞의 #을 제거하고, :wq(저장후 종료)를 눌러 종료합니다.
ftp를 재 시작합니다.
$ sudo service vsftpd restart
저는 파일이 잘 올라 갑니다.
업로드 파일 권한설정
파일을 업로드 해보면, 권한이 rw------ 로 잡혀 있을 것 입니다. 이것은 파일 업로드/다운로드에서는 문제가 되지 않지만, 웹서버등을 운영하려고 하면, php 파일등이 실행되지 않거나 웹문서를 표시하지 못할 것 입니다. 콘피그 파일을 열어 local_umask=022 항목의 주석을 제거하면됩니다.
참고로, 마스크 이므로, 파일 업로드시 777 - 022 = 755 로 파일 권한이 설정됩니다.
$ sudo vi /etc/vsftpd.conf
local_umask=022 문자열을 찾아 앞의 #을 제거하고, :wq(저장후 종료)를 눌러 종료합니다.
ubuntu에서 메일을 주고 받으려면, sendmail 이나 postfix를 설치하면 됩니다. 요즘 postfix를 사용하는 곳이 많은 것 같지만 저와는 상성이 별로 좋지 못하더군요. 저는 쉽게 설치되고, 잘 동작하는 sendmail을 써 보도록 하겠습니다. sendmail을 설치하고, 이 곳 저 곳으로 메일을 보내어 보면, 많은 곳에서 (특히 Gmail) 스팸 처리가 됩니다. 다음 문서에서 스팸 처리를 피하는 것에대해서 다뤄 보려고 합니다. (저도 아직 해 보지 않아 스팸 처리를 피할 수 있는지 확신은 없습니다.)
1. sendmail SMTP Server 설치.
설치는 매우 쉽습니다.
apt-get install sendmail
2. /etc/mail/sendmail.mc 파일 변경.
/etc/mail/sendmail.mc 파일을 열어 아래 2줄을 지웁니다. (왜 지우는지는 아직 모르겠음->안지워도 잘 갔던 느낌이).
- 먼저 우분투에 접속하기 위해 ssh를 켭니다. 그리고, 키 페어를 이용해 로그인합니다. (키페어 관련은 따로 다루지 않습니다.).
$ ssh <키페어파일 위치> <EC2 서버 주소>
- apt를 이용해 설치하기전 apt를 업데이트해 주는 것이 좋습니다.
sudo apt update
- 간단히 apt를 이용해 vsftp를 설치하겠습니다. 아래와 같이 명령을 통해, apt를 설치해 주도록 합니다.
$ sudo apt install vsftpd
- 그럼 약 10초 정도면 설치가 끝이 납니다. 그리고, vsftpd를 이용해 ftp 상태를 확인합니다.
$ sudo systemctl status vsftpd
명령을 치면 아래와 같이 설치된 위치와 현재 상태등을 확인할 수 있습니다.
- 부팅시 자동으로 시작되게 하려면, 아래와 같이 명령합니다.
$ sudo systemctl enable vsftpd
그리고 방화벽을 확인해 FTP 트래픽이 허용되어 있는지 확인합니다.
$ sudo ufw status
저는 UFW를 따로 설치하지 않아 다음과 같이 표시되었습니다.
2. AWS 보안 그룹 업데이트.
단독으로 리눅스를 쓰게 되면, UFW를 이용해, 방화벽을 설치해 사용하면 되고, 저처럼 아마존이나, AZURE를 사용하게 되면, 보안 그룹을 업데이트해야 합니다. (기본적으로 모든 포트가 막혀 있습니다.).
저는 AWS를 사용해 업데이트를 하겠습니다. 제 경험상 애저또한 설정이 크게 다르지 않습니다.
- 콘솔에 접속 후 EC2 서비스를 눌러 줍니다.
- 리소스화면이 나타나면, 보안그룹을 선택해 줍니다.
- FTP를 설치한 인스턴스의 보안 그룹을 선택하고, 작업 버튼을 눌러 인바운드 규칙 탭을 누르고, 편집 버튼을 눌러 줍니다.
- 인바운드 규칙 창이 나타나면, 규칙 추가 버튼을 눌러 줍니다.
- 새로운 규칙입력 필드가 추가되면, 유형은 [사용자 지정 TCP], 포트범위는 [20-21], 소스는 어디서나 접속이 가능하도록 [0.0.0.0/0], 설명은 [FTP]를 입력하고 저장버튼을 눌러 줍니다.
- 그럼 아래와 같이 인바운드 규칙이 추가되었습니다.
- 그리고 나서 파일 질라를 통해 접속해 보면 접속이 매우 잘 됨을 확인할 수 있습니다.
3. 전통적인 id-password 방식 로그인을 위한 계정 추가 및 설정.
위와 같이 키-페어 방식을 사용해 접속을 하면 여러모로 편리하지만, ftp를 지원하는 많은 프로그램 툴들( ATOM VS-CODE 등 )은 위와 같은 방식으로 접속할 수 없거나, 접속되어도 제약이 발생할 수 있습니다. 그래서, 전통적인 id-pass 방식을 통한 접속도 가능하도록 설정해 둘 필요가 있습니다.
- 파일을 주고 받을 때 사용할 포트 열기.
id-password 방식은 데이터를 주고 받을 포트를 따로 열어야할 필요가 있습니다. 앞서 열어둔 22번 포트는 로그인등 명령을 주고 받을 때만 사용합니다. 저는 AWS 사용해 이것으로 설명을 하지만, 여러분들은 상황에 맞게 방화벽등의 포트를 열어 두시면되겠습니다.
다시 보안 그룹으로 돌아와 포트를 열어 둡니다.
- 유저 추가.
아래와 같이 명령어를 입력하면, 유저가 추가되고, /home 폴더 아래 해당 유저를 위한 폴더가 추가됩니다.
$ sudo adduser ftpuser
- ftp 폴더 생성.
상위 폴더에서도 사용이 가능하지만, 아마존에서는 ftp를 위한 폴더를 생성하고 그곳에 사용하도록 권하고 있었습니다. 먼저 ftp만 사용할 폴더를 생성합니다.
$ sudo mkdir /home/ftpuser/ftp
그리고, 해당 폴더는 누구나 접근 가능하도록 (아마 아파치 웹과 같이 사용할 경우가 많으므로, 아마존에서는 이렇게 셋팅하도록 하는 것 같습니다.) 소유자를 바꿔줍니다.