Ubuntu Server 12.04, 64bit 버전을 기준으로 작업한 내용입니다.
vsftpd는 2.3.5-1ubuntu2 라고 나오네요
하고자 하는 작업은 단순합니다.
user1이라는 사용자를 추가했을 때 그 사용자가 FTP 접속을 한 경우 /home/user1 이 FTP 접속 창의 루트가 되도록 설정하는 것입니다.
전 이게 아주 당연하다고 생각하고 작업을 했는데... 아니더군요!
vsftpd를 설치하고, 기본적인 설정을 갖춘 후 접속을 하면, 모든 디렉토리를 자유롭게 돌아다닐 수 있는 상태가 됩니다. 물론 권한이 없는 파일을 만질 순 없지만, 볼 수는 있는 상태가 되는 것이죠.
이럼 안되는거 맞죠?
그래서 인터넷에 여러 방법을 찾아 찾아 다니다가 여러 방법을 조합해 본 결과 가장 깔끔한 방법이라고 생각되는 것을 적어보겠습니다.
vsftpd를 설치하는건 다른 곳에서도 쉽게 찾을 수 있기 때문에 여기서는 패스!
준비 1. 설정 파일은 /etc/vsftpd.conf 입니다. (다른 경우가 있을 수 있습니다.)
준비 2. vsftpd를 재시작 하는 명령어는 sudo /etc/init.d/vsftpd restart 입니다.
1. chroot_local_user=YES 의 주석을 해제해 줍니다. 없는 경우 작성해 줍니다.
사용자 디렉토리를 루트로 변경시키라는 속성 값 입니다. 사실 이것만 해주면 될 줄 알았는데 아닙니다.
2. vsftpd의 루트가 되는 디렉토리는 쓰기 권한이 있으면 안됩니다. /home/user1 의 권한 설정에서 쓰기권한을 제거합니다.
sudo chmod a-w /home/user1
3. 그리고 그 안에 디렉토리를 하나 만들어 줍니다. 쓰기 권한이 없기 때문에 관리자가 만들어 주고 권한 설정도 해 줍니다.
sudo mkdir /home/user1/public_html
sudo chmod 777 /home/user1/public_html
이 방법의 문제는 저 public_html 디렉토리를 지우거나 변경할 때 관리자 권한이 필요하다는 것입니다. 그런데 생각해보면 거의 대부분의 웹 호스팅이 이런 구조로 되어 있는 것 같군요. 사용하는데는 큰 지장이 없어 보입니다.