vsFTP에서 최초 설치시 모든 계정의 FTP 루트 디렉토리가 실제 시스템의 루트 디렉토리와 같도록 설정되어 있습니다. 즉, FTP상에서 보이는 최상위 디렉토리가 시스템의 루트 디렉토리와 같습니다.
이렇게 사용하면, 한 개 혹은 소수의 계정을 가지고 서버를 혼자 사용하는 경우는 크게 문제가 되지 않겠지만, 여러 사람이 서버를 함께 사용하는 경우 보안상의 문제가 발생할 수 있습니다.
꼭 다중 사용자가 아니더라도, 사용할 기능별로 계정을 달리 설정하는 것이 유지관리나 미관상(?)으로도 좋을 것입니다.
리눅스에서는 계정별로 쉘에 표시되는 홈 디렉토리를 서로 다르게 보이도록 하는 명령어인 chroot를 제공하고 있습니다. 이와 비슷한 기능을 vsFTP에서도 제공합니다.
이 글에서는 각 계정의 FTP 루트 디렉토리를 각 계정의 홈 디렉토리로 한정하는 방법을 다루도록 하겠습니다.
FTP에 Chroot 적용하기
vsftpd.conf의 다음 부분을 찾아서 주석을 제거하고 저장합니다.
chroot_local_user=YES
FTP 데몬을 재시작해준다.
sudo service vsftpd restart
다음과 같이 FTP 접속시 표시 가능한 최상위 디렉토리가 홈 디렉토리로 한정된 것을 확인할 수 있습니다.
'vsftpd: refusing to run with writable ...' 오류 해결
위와 같이 설정을 바꿨는데, 간혹 FTP 접속이 아예 이루어지지 않는 경우가 있습니다.
이는 홈 디렉토리에 쓰기 권한이 허용되어 있어서 발생하는 문제로, 홈 디렉토리의 쓰기 권한(w)를 모두 해제해주면 간단히 해결됩니다.
sudo chmod a-w /home/foo_user
무슨 이유인지는 잘 모르겠지만, vsFTP뿐만이 아니라 다른 FTP 데몬에서도 FTP 루트 디렉토리에 쓰기를 허용하지 않고 있습니다.
권한이 없어서가 아니라 있어서 문제가 발생한다니, 약간 이해가 가지 않는 대목이기도 하지만 무엇인가 이유가 있었을거라 생각해 봅니다.
루트 쓰기를 허용하기 위한 옵션으로 allow_writ(e)able_(ch)root=YES로 설정하면 된다는 말도 있지만, 직접 해 본 결과 환경설정 오류로 인해 아예 FTP 접속이 되지 않는 문제만 발생했습니다. 이 환경설정 옵션은 vsFTP 매뉴얼에서 나와 있지 않습니다.
FTP를 통해 홈디렉토리 루트에 직접 쓸 수 없으니, 필요한 디렉토리는 root계정을 이용해 직접 생성해 주어야 합니다.
규칙 예외 지정하기
root와 같은 일부 계정에는 홈디렉토리가 아닌 실제 루트 디렉토리를 FTP의 루트 디렉토리로 표시해 줄 필요가 있습니다.
vsFTP에서는 이를 위해 예외 리스트를 만들고 적용하는 방법을 제공하며, 역시 vsftpd.conf에서 지정할 수 있습니다.
vsftpd.conf에서 다음 두 줄의 주석을 삭제하고, /etc/vsftpd.chroot_list 파일을 다음과 같이 작성합니다.
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
root (그 외 설정을 적용할 ID를 나열한다.)
이렇게 하면 root 계정에 한해서 FTP에 접속할 때 실제 루트 디렉토리를 보여주게 됩니다.
단, chroot_local_user=YES를 지정하지 않은 경우, chroot_list_file에 있는 계정에 한해서 루트 디렉토리로 홈 디렉토리를 보여주게 됩니다. 즉, chroot_local_user의 설정값에 따라서 chroot_list_file의 동작 방식이 반대로 바뀌는 것입니다.
- [vsFTP] 설치 및 설정하기 (12677)