예전에 링크해 놓은 글은 날아갔고… 3년이나 지난 시점이지만, 최근에 다시 리눅스에 FTP 서버를 구축할 일이 생겨서 몇 마디 적어 놓는다. 최근에 라즈베리 파이를 샀기 때문이다.

일단 라즈비안(데비안 기반 라즈베리 파이 전용 OS)이니 vsftpd를 아래 명령어로 가볍게 설치했다.

sudo apt-get install vsftpd

이놈이 ftp 서버들 중에 보안이 좋다고 한다. 이놈으로 구축을 해 보니 실제로 졸라 성가시다.

데비안의 경우 설정파일 위치는 /etc/vsfptd.conf다.

익명 사용자 접속

난 대용량 파일을 친구한테 전달할 때 FTP를 쓰곤 한다. 그래서 익명 접속을 허용해야 한다. 익명 접속 허용은 이 글을 참고했다 : Set up an anonymous FTP server with vsftpd in less than a minute

사실 익명 접속 허용은 따로 설정할 것도 없이 그냥 된다. 그런데 이놈이 어떤 폴더를 가리키는지 알 수가 없다.

기본적으로 익명 접속을 하면 vsftpd는 /var/ftp 폴더를 가리킨다. anon_root를 이용하면 익명 사용자가 접속하게 되는 폴더를 변경할 수 있다고 씌어 있는 글들이 있는데 그냥 저것만 해준다고 되는 게 아니다. chroot 설정을 해 줘야 한다고 나오는데, 거기까진 귀찮아서 안 했다.

익명 사용자의 폴더는 그럼 어떻게 사용하는 게 편할까? 폴더를 연결해 버리자. mount--bind 옵션을 주면 폴더를 마운트해 버릴 수 있나 보다.

sudo mount --bind /my/data/folder /var/ftp/public

이렇게 데이터 폴더를 /var/ftp/public에 연결해 버리면 간단하다. ln -s는 소용 없다. 심볼릭 링크를 FTP가 따라가지 않고 그냥 파일 하나로 취급한다.

주의점! 마운트할 때 /var/ftp에 바로 마운트해 버리면 안 된다! 그러면 또 chroot 설정을 요구한다. 반드시 하위 폴더로 마운트한다.

쓰기 가능한 로그인 사용자 접속

앞서 소개한 글에서는 local_enable=NO로 설정하라고 했다. 그런데 저걸 YES로 설정하는 게 편하더라. 그럼 로컬 유저로 ftp 로그인을 할 수 있게 된다.

물론 root와, 슈퍼 유저 권한을 획득하는 명령인 sudo 명령을 사용할 수 있는 계정은 ftp 로그인을 막는 게 좋겠다. ftp 전용 사용자를 생성해서 사용하려고 한다. 그래서 우선 사용자를 추가하자.

sudo adduser ftpuser

위 명령을 내린 다음 질문에 잘 답하면 된다. room number 혹은 방번호도 물어 보는데, 70-80년대 유닉스는 대형 컴퓨터에 여러 사람이 사용하던 컴퓨터라는 사실을 떠올려 보면 왜 저런 걸 물어 보는 지 알 수 있을 거다. 오늘날 사이트 회원가입할 때 주소 물어보는 거랑 비슷한 거다. 역시 필수사항이 아니면 주소도 가라로 적거나 비워 두는 것처럼 adduser가 하는 질문에도 비밀번호를 제외하고는 답할 의무가 없다. 그냥 엔터 막 치면 된다.

다음으로는 write_enable=YES로 만들자. 이거 예쓰로 만든다고 익명 사용자가 쓰기 가능해지는 거 아니니 안심하라.

여기까지 하면 컴퓨터 사용자 계정으로 FTP에 막 로그인할 수 있게 된다.

블랙리스트 만들기

자, 설정에 아래 줄을 추가해 주자.

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.user_list

userlist_enable=YES는 사용자 목록 기능을 사용하겠다는 거다.

userlist_deny=YES는 사용자 목록 기능을 사용하는데, 블랙리스트 기능으로 사용하겠다는 거다. 이걸 NO로 하면 화이트리스트가 된다.

userlist_file=/etc/vsftpd.user_list는 사용자 목록 파일 위치를 알려 주는 거다. 알려 줬으니 파일을 만들자.

자기가 좋아하는 에디터로 위 파일을 편집하자.

sudo nano /etc/vsftpd.user_list

그리고 한 줄에 아이디 하나씩 적으면 된다. 지금 우리는 블랙리스트로 사용하기로 했으니 두 개를 적어 준다.

root
pi

이렇게 슈퍼유저 권한이 있는 사용자 둘을 적어 주고, 나간다. (pi는 라즈베리 파이의 기본 사용자 계정이다.) sudo 명령을 사용할 수 있는 사용자는 역시 슈퍼 유저 권한이 있는 것으로 이해해야 한다. 방금 만든 ftpusersudo를 사용할 수 없다.

여튼간에, 이렇게 설정하고 vsftpd를 재시작하자.

sudo /etc/init.d/vsftpd restart

그리고 접속하면 된다.

기타 신경쓸 것

방화벽 혹시 켜져 있을 지도 모른다. 방화벽 설정을 해야 할 지도.

공유기 쓴다면 포트포워드나 DMZ를 사용하라. DMZ는 모든 포트를 개방하게 되니 좀 무섭다. 귀찮아도 포트포워드를 사용하자.

나머지 추천 글

이 글도 괜찮은 것 같다 : [KLDP] vsFTPd 설정