사용자 도구


FTP

파일 전송을 위한 프로토콜

설치

$ sudo apt-get install vsftpd
$ sudo vim /etc/vsftpd.conf

아래 세군데 주석해제 후 아래와 같이 수정

anonymous_enable = NO
local_enable = YES
write_enable = YES

그 뒤 vsftpd 재시작

$ sudo /etc/init.d/vsftpd restart

설정

FTP 접속 시 폴더 변경

/etc/vsftpd.conf 에서 다음 부분 수정

local_root=/home/

설정 예

다음 글에 대한 해법이다.1)

http://kldp.org/node/134760

설정 목표 : 두개의 계정을 만들어서, 하나는 읽기 전용, 다른 하나는 관리자용으로 설정한다.

  • FTP서버 및 버전: vsFTPd 2.3.5
  • 안내: Ubuntu 12.04 LTS 서버 버전 기준.
  • 안내: 명령어 앞의 #는 shell의 프롬프트를 의미.
  • 안내: 명령어 뒤의 & 이후는 주석을 의미한다. 따라서 &를 포함한 &이후는 입력하지 않는다.
  • 안내: 이 문서에 나온 모든 명령어는 대/소문자를 구분한다.
  • 안내: 모든 명령어는 특별히 언급하지 않는 한 root 권한으로 실행한다.

1. 계정 생성

A. seminar 계정 생성

계정을 만든 후 계정의 비밀번호를 바꾼다.

$ adduser seminar
$ passwd seminar
B. seminaradmin 계정 생성

마찬가지

$ adduser seminaradmin
$ passwd seminaradmin
C. seminaruser 그룹 생성
$ addgroup seminaruser
$ gpasswd seminaruser
$ gpasswd -a seminar seminaruser // seminaruser 그룹에 seminar를 추가한다. 
$ gpasswd -a seminaradmin seminaruser // seminaruser 그룹에 seminaradmin을 추가한다. 
$ gpasswd –A seminaradmin seminaruser // seminaruser 그룹의 관리자를 seminaradmin으로 지정한다. 

2. 디렉토리 설정

A. group 파일에서 그룹 인덱스 확인
$ vi /etc/group

가장 마지막 부분의 다음 내용 확인

seminaruser:x:1005:seminar,seminaradmin

여기서 1005라는 숫자를 확인해둔다. 이 수치는 바뀔 수 있다. 내용을 확인한 후 vi편집기를 종료한다.

B. passwd 파일 내용 수정
$ vi /etc/passwd

seminar가 있는 행과 seminaradmin이 있는 다음의 두 행을 찾는다.

seminar:x:1003:1003:,,,:/home/seminar/:/bin/bash
seminaradmin:x:1004:1004:,,,:/home/seminaradmin/:/bin/bash

그 후 아래와 같이 수정한다.

  • seminar 행에 있는 1003:1003을 1003:1005로 수정한다. 1003, 1005등의 수치는 바뀔 수 있다.
  • seminaradmin 행에 있는 1004:1004를 1004:1005로 수정한다. 1004, 1005등의 수치는 바뀔 수 있다.
  • seminar 행에 있는 /home/seminar/ 를 /home/./seminar/ 로 수정한다. 이 과정은 seminar 계정의 접속후 root디렉토리가 /home/seminar가 되도록 하기 위하여 필요하다.
  • seminaradmin 행에 있는 /home/seminaradmin/ 를 /home/./seminar/ 로 수정한다. 이 과정은 seminaradmin 계정의 접속후 root디렉토리가 /home/seminar가 되도록 하기 위하여 필요하다.

참고사항 : 수정이 끝나면 seminar 행과 seminaradmin 행은 다음과 같을 것이다.

seminar:x:1003:1005:,,,:/home/./seminar/:/bin/false
seminaradmin:x:1004:1005:,,,:/home/./seminaradmin/:/bin/false

파일을 저장 하고 vi 편집기를 종료한다.

C. seminar 디렉토리의 소유, 권한 수정

seminar 디렉토리를 seminaradmin의 소유로 바꾸고, seminaruser 그룹의 소유로 귀속시킨다.

$ chown seminaradmin:seminaruser /home/seminar

그 후 seminaradmin 계정에게는 seminar 디렉토리의 읽기, 쓰기, 실행 권한을 주고 그 외에는 읽기, 실행 권한만을 준다. 디렉토리에 접근하기 위해서는 실행 권한이 필요하다.

$ chmod 755 /home/seminar

3. vsFTPd 데몬 설치

$ apt-get install vsftpd

4. vsFTPd 데몬 설정

A. vsftpd.conf 파일 수정
$ vi /etc/vsftpd.conf

그 후 다음의 옵션을 모두 활성화 시킨다.

listen=YES // 서버가 외부 접속에 응답하기 위하여 필요하다.
anonymous_enable=NO // 익명 로그인을 거부하기 위하여 필요하다.
local_enable=YES // 로컬에서 접속하기 위하여 필요하다.
write_enable=YES // 쓰기가 가능해야 하므로 필요하다.
local_umask=022 // 업로드 후 권한을 자동설정하기 위하여 필요하다. 777-umask=자동설정된 권한이다.
chroot_list_enable=YES // chroot_list 파일에 등록된 사용자는 passwd파일에서 지정된 디렉토리보다 상위로 올라갈 수 없다.
chroot_list_file=/etc/vsftpd.chroot_list // chroot_list 파일의 경로를 지정한다.
passwd_chroot_enable=YES & passwd 파일에 등록된 대로 chroot를 실행할지 결정한다.
local_root=/home/ // chroot를 위해 로컬 root디렉토리를 설정하는 부분이다.

참고사항 : vsFTPd에서는 기본적으로 chroot된 이후의 루트 디렉토리에 쓰기를 금지하고 있다. 따라서, local_root는 vsFTPd에서 실행된 chroot이고, 이때의 루트는 /home/ 으로 설정한다. passwd 파일에서는 /./ 이후에 지정된 디렉토리가 접속후 chroot의 root로 지정되고, 따라서 /home/./seminar/ 로 설정한다. 나머지 옵션은 그대로 두어도 무방하다.

편집을 마친 후 파일을 저장하고 vi 편집기를 종료한다.

B. vsftpd.chroot_list 파일 수정

chroot를 해줄 계정을 설정하기 위한 편집.

$ vi /etc/vsftpd.chroot_list

다음 내용을 가장 위에 입력 후 저장한다.

seminar
seminaradmin

이 파일에 등록되지 않은 계정은 FTP접속이 차단된다.

5. vsFTPd 재시작

$ service vsftpd restart

접속이 잘 되는지 테스트 한다.

6. 추가 설정

  • ssh 접속을 차단하고 싶은 경우 passwd 파일을 수정한다.
  • passwd 파일에서, ssh 접속을 차단하고 싶은 계정이 있는 행에서, /bin/bash 부분을 /bin/false 로 수정한다.
  • 특정 FTP 클라이언트의 경우 ssh 접속이 차단되면 아예 접속할 수 없는 경우도 있으므로 유의한다.

문제 해결

21번 포트로 접속이 안되는 경우

방화벽 문제일수도 있으나 처음 우분투 서버 설치 후 vsftpd를 설치한 경우라면 그럴리 없다. apt-get –purge remove로 vsftpd 지우고 다시 설치했더니 되더라. 처음엔 왜 접속이 안됐던거지?