달력

32024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

****************
 proftp 설치하기
 작성자 : 유희성
****************


http://www.proftpd.org 에서 최신 버젼을 다운로드 받는다(좌측 상단에 tar.gz형식)
기존의 wu-ftp나 proftp 중에 rpm으로 설치된것은 삭제한다.

rpm -qa | grep proftp  라고 해서 뭐가 나오면 지운다. (이거 그냥 써도 된다)
rpm -qa | grep wu-ftp  라고 해서 뭐가 나오면 지운다.

rpm -e --nodeps 나온패키지     <=== 삭제

항상 최신 버젼을 유지합시다.

다운받은 소스를 압축을 풉니다.

tar xvzf proftpd-xxx.tar.gz   
cd proftpd-xxx
./configure --prefix=/usr/local/proftp --enable-auto-shadow

여기서 prefix 부분은 설치될 경로이고 --enable-auto-shadow 는 리눅스에서 지원하는
쉐도우 패스워드를 자동으로 인식하게끔 해주는것이다. 보안상 반드시 넣어준다.
에러가 없다면
make; make install     해준다.

cd /usr/local/proftp  로 들어간다.
ls -R 이라고 친다. 그럼 각 디렉토리 별로 잘 보일꺼다.

bin 이라는 디렉토리는  ftpwho 라는 넘과 ftpcount 가 있다.
ftpwho 는 어느넘이 현재 접속해서 사용하는지 그 정보를 보여주고
ftpcount 는 몇놈이 접속되어있는지 카운트를 세어준다.

./ftpwho 라고 쳐본다.. 맨첨에는 암것도 없다.

sbin 이라는 곳에는 proftp 의 실행파일이 들어있다.
etc 에는 ftp 설정파일이 들어있다.
man 디렉토리는 아무래도 manual page 가 있는거 같다.. 이거 사용해도 되지만
그냥 man proftpd 라고 하면 매뉴얼 페이지가 뜰것이다... 와우리눅스는 proftp 기본탑재...

var 디렉토리에는 Log file 이 쌓이게 된다.... 몇번 사용해보고 이곳에 들어가면 로그파일이 자동 생성되어진걸 볼수있다.

이제 proftp의 설정파일을 고쳐주자...

cd /usr/local/proftp/etc 로 들어가서 vi proftpd.conf 로 설정을 바꾸자.

# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName   "ProFTPD Default Installation"
ServerType   standalone
DefaultServer   on

# Port 21 is the standard FTP port.
Port    21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask    022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances   30
# Set the user and group that the server normally runs at.
User    nobody
Group    nobody

# Normally, we want files to be overwriteable.
<Directory /*>
  AllowOverwrite  on
</Directory>

# A basic anonymous configuration, no upload directories.
<Anonymous ~ftp>
  User    ftp
  Group    ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias   anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients   10

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin   welcome.msg
  DisplayFirstChdir  .message


  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    DenyAll
  </Limit>

</Anonymous>


약간 틀리겠지만 위 형식대로 입력이 되어있을것이다.

ServerName  "어쩌구... "   <=== 호스트 이름을 지정해준다. 바꾸고 싶으면 바꾼다.
ServerType  standalone    <=== 슈퍼데몬 환경에서 돌아갈지... 아니면 단독데몬으로 돌아갈지 결정한다.
        우리는 그냥 단독데몬으로 돌린다.
        xinetd 환경에서 돌리면 접속시 약간의 딜레이가 생길수도 있다.
        왜? 사용자가 요청을 하면 xinetd 를 통과해서 다시 proftp 로
        접속을 해주니까...
DefaultServer  on  <=== 이 부분은 걍 내둔다..
Port   21  <=== ftp 포트를 지정한다. 디폴트 값을 사용한다. 이부분을 바꿔주고 싶으면
     /etc/services 파일도 수정해 줘야 한다. 이 파일을 한번 열어본다.
     각 포트번호와 서비스들이 보일것이다.
Umast   022  <=== 기본 퍼미션을 지정한다. 777 에서 적혀 있는 값을 빼준것이 기본 퍼미션이다.
      755-022=755   기본 퍼미션이 755라는얘기다...
MaxInstance  30   <=== DoS(Deny of Service) 의 공격에 보호하기 위해서 proftp가
      Standalone 모드로 동작할때 생성되는 최대 자식 프로세스의 수를 지정.
      기본값으로 둔다.(보안상...)
User   nobody
Group   nobody  <=== 요기 두 부분은 ftp 에 접속한상태에서의 소유권을 지정해 준다.
          root 권한으로 proftpd 데몬을 띠우고 여기에 지정된 사용자, 그룹으로
          권한을 넘긴다.
          nogroup 로 되어있으면 nobody 로 고친다.
<Directory /*>
  AllowOverwrite  on <=== 이 부분은 새로 생성될 파일로 덮어씌우기를 결정해준다.
</Directory>     on 이면 덮어쓰기, off 이면 안되지..

<Anonymous ~ftp>

좌르르르륵
</Anonymous>   <=== 요기는 계정이 없는 사용자. 즉 익명사용자를 위한 공간을 할당해 주는 부분이다.

요기까지 고쳤으면 설정 끝이다.

그럼 proftpd 데몬을 띠운다.
아까 proftp 실행파일은 sbin 안에 있다고 하였다.
그럼 sbin 으로 이동한다.
cd /usr/local/proftpd/sbin  
./proftpd start   라고 했을 때 아무런 메세지가 없어야 한다.
에러 발생했으면 메세지 잘 보고 고친다.. 안되면 손가락 짤러..

ftp에 접속이 되는지 접속을 해보자.

ftp localhost  라고 한다.    ftp 211.108.242.host 라고 해줘도 똑같다.
그럼 유져와 패스워드를 입력하라고 한다.. 입력한다.. root 사용자는 보안상 못들어 가니까 접속하기 전에 계정을 하나 만들어주자.

login faild 만 안뜨면 된다.
이때 접속되는 디렉토리는 /home/ 디렉토리에 있는 각자의 계정에 접속이 되게 된다.


*************
  ftp 사용법
*************

사용법 : ftp <hostname | ip address>
ex >  ftp 211.108.242.69
 name : 자기 아이디 (계정이 없으면 anonymous) 
 password : 자기 패스워드(없으면 e-mail 주소 또는 @ )
      ftp>    <=== 일케 뜨면 된거다.

      help 또는 ? 를 입력한다.(도움말 출력)
     
      dir
      ls        디렉토리 리스트를 보여준다.
      size 파일의 크기를 출력
      mkdir (dir) 새로운 디렉토리 만들기
      rmdir 디렉토리 삭제
      delete <file> 파일삭제
      mdelete file1 file2....... 여러파일 삭제
      pwd 현재 경로 출력
      status 현재 상태 출력
      exit
      quit 종료
      get (file) ftp의 파일을 자신의 디렉토리로 가져온다.
      put (file) 자신의 파일을 원격 ftp로 전송
      mget (file1, file2, ........)  여러 파일 동시에 가져오기
      mpug (file1, file2, ........)  여러 파일 동시에 받기
      cd (dir) 디렉토리 이동
      nlist (dir) 원격  ftp의 dir 서브디렉토리 리스트 출력
      rename <name1  name2> ftp 상의 파일이름 바꾸기
      chmod 퍼미션 조정
      open 원격 ftp host 로 접속하기

      기타등등....... man으로 알아보세요..


이제 명령어도 보았으니 한번 테스트 해보자. 파일을 한개 올린다.

put 파일네임   <=== 이라고 치면 전송 상태가 text로 출력된다. 다 올라갔으면 ls 나 dir 로 업로드가 잘 되었는지 살펴보자.

그럼 자신의 directory 에 있는 파일(업로드한 파일)을 삭제하고 ftp에서 전송하자.
get 파일네임   <=== 파일이 잘 전송이 되었나??? 자신의 디렉토리에서 확인해 본다.

여기서 잠깐!!!!

지금 현재 상태에서 cd .. 을 계속 쳐본다.... 아마 자신이 접속한 곳 보다 상위 디렉토리로 이동을 하게 되는것을 봤을것이다.
이렇게 되면 당근 안된다. 모르는 사람이 내 디렉토리를 보게 되는것은 좀 기분이 나쁘다.
이런 현상을 막으려면 proftpd.conf 파일에 다음을 입력해준다.
DefaultRoot ~  라고 입력해 준다.  ~ 는 자신의 홈디렉토리가 된다.

이렇게 했는데도 같은 현상이면 DefaultRoot 부분을 <Global> 태그로 감싸준다.
<Global>
  DefaultRoot  ~
</Global>
이렇게 적어준다. Global 태그는 ftp 전체에 영향을 주는 전역을 선언하는 태그라고 되어있당.

DefaultRoot ~ aaa 라고 해주면 aaa 사용자 빼고 다른 넘들은 상위 디렉토리로 이동가능
DefaultRoot ~ !aaa 라고 해주면  aaa 사용자 빼고 다른사람들은 상위디렉토리로 이동 불가능.

이렇게 해서 계정 사용자들은 ftp를 이용하게 설정이 다 되었다. 하지만 계정이 없는 사용자.
익명사용자에 대해서도 ftp 를 사용할수 있게 해주어야 한다.
<Anonymous 경로>    <=== 이 부분이 익명사용자 설정이라고 위에 적어놨다.

이곳에 설정을 해 주면 된다.
일단 익명 사용자들은 거의 대부분 다운로드만 받게 설정을 해주어야 한다. 물론 읽기전용으로 해야쥐..

그럼 설정을 하자.
<Anonymous /home/ftp> 라고 경로를 고쳐준다. 그리고 ftp 라는 유저도 등록해 주자.. 그래야 알아먹지..


<Anonymous ~ftp>   <=== 요기처럼 ~ 로 줘도 된다.
  User    ftp <=== ftp 유져와 그룹을 지정한다.
  Group    ftp
  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias   anonymous ftp <=== anonymous 로 들어온 사용자를 ftp 라는 별칭을 부여해준다.

  # Limit the maximum number of anonymous logins
  MaxClients   10 <=== 익명사용자의 최대 접속수를 지정해주는 부분이다.

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin   welcome.msg <=== 익명 사용자의 환영 메세지이다.
  DisplayFirstChdir  .message


  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>  <=== 이 부분은 익명 사용자의 write 권한을 박탈한다.
    DenyAll  <=== 요기가 AllowAll 이라고 되어있으면 어케 될까?? 파일이 올라가게 된다.
  </Limit>
</Anonymous>

이제 대충 설정이 끝났다. 그리고 만약 익명사용자가 접근이 안된다면
<Anonymous > 태그 안에 아래처럼 적어준다.
RequireValidShell off

이 부분이 off 로 되어있어야 접속이 가능하게 된다. 이부분이 없어도 접속은 되지만
만약 익명 계정 접속이 안된다면 이부분부터 추가시켜준다.

그리고 만약 익명 사용자가 10명이 넘었을때 메세지를 보내야 하는데 아래와 같이 설정한다.

MaxClients  10 "미안허다. 10명밖에 못들어와.... 조금만 지둘려 ㅡ,.ㅡ"

이렇게 하면 10명이 넘은 사용자들에게는 따옴표 안의 문자가 출력될것이다.
그리고 성질급한 넘들은 브라우저 10개 띠워놓고 10개를 한 ftp 서버에 접속한 후에
파일다운로드를 시도하려 할수도 있다.
이때 이것을 막아주려면
MaxClientsPerHost 2 "이눔아.!! 좀 지둘려...."

이렇게 써주면 된다.

이제 환영메세지를 만들어보자.

아래의 내용을 /home/ftp/ 밑에 welcome.msg 에 입력한다.

vi welcome.msg
*****************************************************
어서오시게... 많이 가져가게나...
*****************************************************
proftp 1.2 %V
ftp://%L/

남은 용량 : %F
현재 사용자 수 : %N/%M (한 호스트당 1회 접속만 허용)
%R에서 %U님이 접속했습니다.
%T년에 접속.

불편한점은 메일로 보내주세요.
E-mailto:%E

*****************************************************

위의 내용중에 % 가 붙은 넘들은 아래와 같다.

%V 버젼 표시
%L 호스트 주소표시
%F 남은 용량
%N 현재 접속자수
%M 최대 접속자수
%R 접속한 호스트 주소
%U 유져이름 (anonymous 가 나오겠지???)
%T 접속한 날짜
%E 관리자 이메일주소(네임서버에 지정된 메일)

머 대충 이정도가 있다.. 더 알고 싶으면 proftpd.org 가보면 많다.


현재 계정사용자는 업로드/다운로드가 다 가능하지만 익명사용자는 다운로드만 가능하다.
만약 업로드까지 가능하게 해주려면 <Anonymous> 태그 안쪽에 아래와 같이 설정한다.

# 익명 사용자 업로드 디렉토리
<Directory incoming/*>    <=== /home/ftp/ 디렉토리 안에 incoming 라는 디렉토리를 만들어줘야한다. 퍼미션도 755로 변경해준다.
  AllowOverWrite on <=== on으로 해줘야 업로드가 가능하다.
  AllowRetriveRestart on <=== 요기랑 아래줄은 아마 이어올리기가 가능한 옵션일것이다. 생각 안나네.. ㅡ,.ㅡ;
  AllowStoreRstart on
  <Limit DELE RMD>   <=== 요기는 업로드 한 파일을 마음대로 지울수 없게 하기 위해서 지우는 속성을 박탈한 부분이다.
    DenyAll
  </Limit>
</Directory>

이렇게 해주면 익명계정의 사용자도 업로드가 가능하게 된다.

오늘은 여기까지... ^^



 

Posted by tornado
|