기본 콘텐츠로 건너뛰기

VSFTP 설정

우분투 설치

$ sudo apt-get install vsftpd

# 설정 파일 열기

$ sudo vi /etc/vsftpd.conf

# anonymous 유저 사용 불가
anonymous_enable=NO

# 계정사용자 접속 가능
local_enable=YES

# 업로드 가능
write_enable=YES

# 디렉토리나 파일 생성시 umask 값
local_umask=022

# 접속시 메세지
ftpd_banner=Welcome to uzuro FTP service

# 접속시 출력 메세지 설정 ( shell등을 이용해 접속시 )
# 사용자 홈디렉토리에 .message 파일에 작성
dirmessage_enable=YES

# chroot 적용
# 아래와 같은 설정을 할 경우 사용자들은 자신의 계정에서 상위 디렉토리로 이동할수 없게된다.
chroot_local_user=YES

# 특정 사용자만을 Jail 설정할 경우
# chroot_list에 등록되어있는 계정에만 chroot가 적용
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

# 특정 사용자를 제외한 나머지 사용자만을 Jail 설정할 경우
# chroot_list에 등록된 계정을 제외한 나머지가 자신의 계정에 chroot가 걸림
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

# 계정마다 동적으로 설정할 경우
# 아래와 같이 설정을 하게 되면 /etc/passwd 파일을 참고하여 jail 설정을 할 수 있게 됨
# /etc/passwd 파일을 수정하여 경로에 .을 찍게 되면 그 지점이 chroot지점이 됨
# theeye:x:600:100::/home/./theeye:/bin/bash
chroot_local_user=YES
passwd_chroot_enable=YES

재시작

#restart vsftpd

클라이언트


클라이언트 자신에 대한 명령어는 !pwd 느낌표를 붙이면된다.

ftp [주소/도메인]
ls
get [파일명] : 해당 파일을 다운로드한다.
mget : 현재 폴더 내의 디렉토리를 제외한 모든 파일을 다운로드한다.
put [파일명] : 해당 파일을 업로드한다.
mput : 현재 폴더 내의 디렉토리를 제외한 모든 파일을 업로드한다.

pwd  : 서버의 현재 경로를 확인할 수 있다.
!pwd : 클라이언트의 현재 경로를 확인할 수 있다.

? : 명령어 목록을 확인할 수 있다.
? [명령어] : 해당 명령어의 기능을 확인할 수 있다.

553 Could not create file.
ftp 업로드 할때 발견한 에러이다.
업로드 하려는 해당 디렉토리의 소유권과 관련된에러인데  ftp 클라이언트 측에서 접속한 ID 와
접속한 디렉토리의 소유자및 소유그룹이 다를경우 발생한다.
chown 명령을 통해 동일하게 변경하면 해결.
selinux 관련해서도 발생할수있다고하는데 selinux 는 넘 어렵다 ;;
보통 disable 해서 쓰니 패스 ㅋ
위경우에도 해결안될시
553 Could not create file.

# setsebool  -P ftpd_disable_trans 1

댓글

이 블로그의 인기 게시물

[Java] Http File Download 이어받기

Http 서버로부터 다운로드 받는 파일을 이어받기 위해서는 Http Header에 아래 두가지 정보를 추가해 주면 된다. URLConnection conn = url.openConnection(); conn.setRequestProperty("Accept-Ranges", "bytes"); conn.setRequestProperty("Range", "bytes=" + mOffset + "-"); 그러면 서버에서는 해당 Offset으로부터 File을 다운로드 시켜준다. 클라이언트가 요청헤더에 Range 필드를 포함 시켜서 보내면, 서버는 그 정보를 가지고 어디서 부터 파일을 보낼지 판단을 합니다. 하지만 클라이언트가(브라우저) Range 필드를 포함 시켜야 할지를 판단하는 기준은 최초 다운로드 요청시 서버의 응답헤더에 따라 다음 요청헤더에 Range 헤더를 생성할지 않할지 판단하게 됩니다. 그걸 당락짓는 응답 헤더 필드는 다음과 같습니다. Accept-Ranges , ETag, Last-Modified 반드시 위 필드를 응답 헤더에 같이 보내줘야 클라이언트는 다음 요청시 Range헤더를 포함시켜 보내게 됩니다. 참고로 말씀 드리면 위 필드를 포함 시켜서 보내더라도 value는 반드시 " " 로 묶어서 보내야 합니다. 안그러면 브라우저는 죽어도 Range 필드를 생성시키지 않습니다. HTTP 1.1 스펙은 따옴표를 강제적으로 해줘라 이런 내용 없습니다. 자바기준 40byte의 파일이라치면 클리이언트 요청을 두번으로 나누었다치면 이케 connection.setRequestProperty("Range", "bytes=0-20"); connection.setRequestProperty("Range", "bytes=20-40"); 단 co...

java 특정 디렉토리에 있는 파일 목록을 읽어내기, 정렬해서 가져오기

폴더 리스트 가져오기 String path="C:\"; File dirFile=new File(path); File []fileList=dirFile.listFiles(); for(File tempFile : fileList) {   if(tempFile.isFile()) {     String tempPath=tempFile.getParent();     String tempFileName=tempFile.getName();     System.out.println("Path="+tempPath);     System.out.println("FileName="+tempFileName);     /*** Do something withd tempPath and temp FileName ^^; ***/   } } 정렬해서 가져오기 import java.io.FileFilter; import java.io.IOException; import java.util.Arrays; import java.util.Date; import org.apache.commons.io.comparator.LastModifiedFileComparator; import org.apache.commons.io.filefilter.FileFileFilter; public class LastModifiedFileComparatorTest { public static void main(String[] args) throws IOException { File directory = new File("."); // get just files, not directories File[] files = directory.listFiles((FileFilter) FileFileFilter.FILE); System.out.println("Defaul...