더북(TheBook)

누구나 사용할 수 있는 FTP 서버 운영하기

누구나 사용 가능한 FTP 서버를 운영해봅시다. vsftpd 설정 파일을 vi로 엽니다.

administrator@server01:~$ sudo vi /etc/vsftpd.conf

익명 사용자 접근을 허용하기 위해 anonymous_enable 항목을 활성화시킵니다.

anonymous_enable=YES

변경된 설정 내용을 반영하기 위해 vsftpd를 재시작합니다.

administrator@server01:~$ sudo service vsftpd restart

클라이언트로 FTP 서버에 접속해봅시다. FTP 클라이언트인 ftp는 우분투에 기본으로 설치되어 있습니다. ftp [접속할 FTP 서버 주소] 형식으로 입력합니다. IP 주소 또는 호스트 이름을 사용할 수 있습니다. 익명 사용자로 접속하기 위해 사용자 이은 anonymous로 입력하고 패스워드는 빈칸으로 놔두고 Enter를 누릅니다. 접속에 성공했다는 메시지를 확인할 수 있습니다.

administrator@server02:~$ ftp 192.168.122.201
Connected to server01.
220 (vsFTPd 3.0.2)
Name (192.168.122.201:administrator): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

ls 명령으로 접속한 FTP 서버의 디렉터리를 조회할 수 있습니다. 앞서 복사해둔 ‘test_ftp_down’ 파일을 확인할 수 있습니다.

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r--   1  0        0              13 Apr 07 23:16 test_ftp_down
226 Directory send OK.

get으로 파일을 다운로드합니다. get [다운로드할 파일] 형식으로 입력합니다.

ftp> get test_ftp_down
local: test_ftp_down remote: test_ftp_down
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test_ftp_down (13 bytes).
226 Transfer complete.
13 bytes received in 0.00 secs (92.7 kB/s)

ftp를 종료하려면 exit 명령을 사용합니다. 다시 명령 프롬프트로 나가게 됩니다. FTP 서버에서 다운로드한 ‘test_ftp_down’ 파일을 확인할 수 있습니다.

ftp> exit
221 Goodbye.
administrator@server02:~$ ls
test_ftp_down

다시 클라이언트에서 ftp를 실행해서 FTP 서버에 익명( anonymous)으로 접속한 다음 put으로 FTP 서버에 파일을 업로드해봅니다. put [업로드할 파일] 형식으로 입력합니다. 권한이 없어서 파일을 업로드할 수 없다는 오류 메시지( 550 Permission denied)를 확인할 수 있습니다.

administrator@server02:~$ touch test_ftp_up
administrator@server02:~$ ftp 192.168.122.201
ftp> put test_ftp_up
local: test_ftp_up remote: test_ftp_up
200 PORT command successful. Consider using PASV.
550 Permission denied.

FTP 서버인 server01로 돌아와 vsftp 설정 파일인 /etc/vsftpd.conf를 vi로 엽니다. 쓰기 권한을 부여하기 위해 write_enable을 활성화합니다.

write_enable=YES

익명 사용자의 업로드가 가능하도록 anon_upload_enable을 활성화하고 바로 아래에 anon_root를 추가하여 익명 FTP 서버의 루트 디렉터리가 /srv/ftp임을 지정합니다.

anon_upload_enable=YES
anon_root=/srv/ftp

vsftpd를 재시작합니다.

administrator@server01:~$ sudo service vsftpd restart

익명 FTP 서버의 루트 디렉터리인 /srv/ftp는 그대로 두고 /srv/ftp에 하위 디렉터리를 생성해서 쓰기 권한을 허용하는 편이 안전합니다. 익명 사용자의 쓰기 전용 디렉터리 upload를 생성해서 접근 권한 777을 할당했습니다.

administrator@server01:~$ sudo mkdir /srv/ftp/upload
administrator@server01:~$ sudo chmod 777 /srv/ftp/upload/
Tip

누구든 파일을 쓸 수 있도록 익명 FTP 서버의 루트 디렉터리인 /srv/ftp의 접근 권한을 777로 설정하면 클라이언트에서 접속하려고 할 때 문제가 발생합니다. 이것은 FTP 서버를 보호하기 위해 새로 추가된 기능입니다.

다시 클라이언트에서 익명(anonymous)으로 FTP 서버에 접속합니다. 앞에서 생성한 upload 디렉터리를 확인할 수 있습니다.

administrator@server02:~$ ftp 192.168.122.201
ftp> ls
...
drwxrwxrwx  2 0      0        4096 Nov 01 00:22 upload

upload 디렉터리로 이동해서 ‘test_ftp_up’ 파일을 업로드합니다. 이번에는 성공할 것입니다.

ftp> cd upload
250 Directory successfully changed.
ftp> put test_ftp_up
local: test_ftp_up remote: test_ftp_up
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.