본문 바로가기

Tip&Tech/Server

[팁] MissFlash의 리눅스 유용 단축키, 명령어 모음(15) - FTP 서버 운영

* 본 게시물은 MissFlash가 "CentOS 리눅스 구축관리실무"를 참고로 유용한 단축키 및 명령어를 정리한 것입니다.
* 게시물이 지속적으로 업데이트 될 예정이니, 퍼가기 보다는 링크나 트랙백을 이용해 주세요 :)

* MissFlash의 리눅스 유용 명령어 목록
  • proftpd 서버 설치 순서
    1. 디렉토리 생성 : mkdir /usr/local/src/ftpd
    2. 디렉토리 이동 : cd /usr/local/src/ftpd
    3. 배포파일 다운로드 : lftpget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.0a.tar.gz (최신버전 확인은 http://www.proftpd.org 에서 가능)
    4. 다운로드한 파일의 압축 해제 : tar -xvzf [proftpd소스파일명.tar.gz]
    5. proftpd를 설치할 디렉토리 생성 : mkdir /usr/local/server/proftpd
    6. 소스파일 압축 해제 : tar -xzf proftpd-1.3.0a.tar.gz
    7. 디렉토리 이동 : cd proftpd-1.3.0a
    8. 환경설정 체크 스크립트 실행 : ./configure --prefix=/usr/local/server/proftpd --enable-autoshadow -enable-shadow
    9. 실행파일 생성 : make
    10. 실행파일 및 라이브러리 인스톨 : make install
    11. 환경설정 파일 수정 : /usr/local/server/proftpd/etc/proftpd.conf
    12. 데몬 시작 : /usr/local/server/proftpd/sbin/proftpd &[각주:1] [각주:2]
    13. 클라이언트 접속 : FileZilla 등의 클라이언트 프로그램 이용
    14. (접속 불가능시) iptables 방화벽 설정 파일에서 21번 포트를 오픈 (포트 오픈 여부 확인 : iptables -L)

  • 패키지 설치 명령
    • yum install [패키지명] : CentOS 배포사이트의 원격 업데이트 서버에서 패키지명을 찾은 후 설치
    • yum update [패키지명] : CentOS 배포사이트의 원격 업데이트 서버에서 패키지명을 찾은 후 업데이트
    • yum remove [패키지명] : 리눅스 서버에 설치된 패키지명 삭제

  • proftpd 폴더 구조
    • bin : 일반 실행 파일
    • etc : 환경설정 파일
    • libexec : 라이브러리 파일
    • man : 메뉴얼 파일
    • sbin : root(수퍼유저)가 실행할 수 있는 파일
    • var : 로그 파일, 프로세스 ID를 저장하는 파일

  • FTP 접속 오류 발생시 확인사항
    • 아이디와 비밀번호
    • 포트 번호 : 기본포트는 21입니다.
    • Passive 모드 : 위 정보가 맞는데도 접속할 수 없을때는 클라이언트 프로그램의 환경설정(혹은 접속시 입력하는 정보)에서 Passive 모드(수동적인 모드)에 체크를 해제해보시기 바랍니다.
    • 캐릭터셋 : 한글로 된 폴더나 파일명을 정상 출력하기 위해서는 UTF-8 모드로 체크해야 합니다.[각주:3]

  • proftpd 서버 시작스크립트 생성
    1. 원본 소스파일로 이동 : cd /usr/local/src/ftpd/proftpd-1.3.0a
    2. 디렉토리 이동 : cd contrib/dist/rpm/
      • proftpd.init.d : standalone 서비스, 독립서비스를 위한 부팅시 실행파일
      • xinetd : xinetd 수퍼데몬 서비스를 위한 부팅시 실행파일
      • ftp.pamd : pam 인증 사용시 필요한 파일
      • proftpd.logrotate : 로그를 일정기간 단위로 잘라서 보관하는 작업을 위해 필요한 파일
    3. proftpd.init.d 파일 수정 : PATH="$PATH:/실행파일경로" 로 수정
    4. proftpd로 이름을 변경한 후, /etc/rc.d/init.d/ 디렉토리로 복사 : cp proftpd.init.d /etc/rc.d/init.d/proftpd
    5. 755로 퍼미션 변경 : chmod 755 /etc/rc.d/init.d/proftpd
    6. 런레벨 5에 활성화 후, 부팅시 실행하도록 설정[각주:4] : chkconfig --add proftpd (chkconfig --level 35[각주:5] proftpd on)
    7. 활성화 여부 확인 : chkconfig --list | grep proftpd

  • proftpd.conf 파일 설정
    • ServerName : FTP 서버 이름 및 텍스트 메시지
    • ServerType : 실행방식 설정(inetd / xinetd[각주:6] / standalone[각주:7]로 설정)
    • DefaultServer : Primary IP 또는 가상 FTP 서비스로부터의 연결 요청이 있을 때, 기본으로 응답할 서버
    • Port : FTP 서비스의 포트
    • Umask : 클라이언트 사용자가 생성하거나 업로드하는 디렉토리 혹은 파일의 퍼미션(디렉토리 퍼미션=777-Umask값, 파일 퍼미션=666-Umask값)
    • MaxInstances : standalone 서비스 중 하나로 proftpd 데몬을 실행할 때, 최대 자식 프로세서 생성 개수 지정
    • User, Group : 권한을 가지는 사용자와 그룹
    • DefaultRoot : 계정 사용자별 루트 디렉토리 설정(~ 설정시 루트 디렉토리 상위로 접속 불가, !wheel 설정시 wheel그룹은 예외[각주:8])
    • AllowOverwrite : 업로드한 파일에 덮어쓰기를 허용할 것인지 설정(on / off로 설정)
    • <Limit SITE_CHMOD>DenyAll</Limit> : 업로드한 파일에 대한 퍼미션 조정 가능여부 설정(DenyAll / AllowAll로 설정)

  • 익명 FTP 서비스를 위한 설정
    • <Anonymous ~anonyuser[각주:9]></Anonymous> : 시작, 종료 지시자
    • User, Group : 익명 FTP 서비스를 할 때 할당받는 사용자와 그룹명
    • UserAlias [접속자들의 사용자명] [매핑시킬 사용자 계정명] : UserAlias anonymous anonyuser
    • MaxClients : 최대 동시접속 클라이언트 수
    • DisplayLogin : 접속자에게 전달할 메시지 파일명(예 : welcome.msg)
    • DisplayFirstChdir : .message라고 입력시 /var/anonyuser 하위의 디렉토리마다 .message파일을 만들고 사용자가 디렉토리 접속시 해당 메시지를 출력
      • %T : 현재시간
      • %F : 사용가능한 디스크 용량
      • %C : 현재 디렉토리
      • %R : 원격 호스트네임
      • %L : 로컬 호스트네임
      • %u : ident 프로토콜에 의해 작성된 사용자명
      • %U : 로그인 사용자명
      • %M : 최대 접속자수
      • %N : 현재 접속자수
      • %E : 서버 관리자 이메일
      • %i : 현재 세션에서 업로드된 파일 수
      • %o : 현재 세션에서 다운로드된 파일 수
      • %t : 현재 세션에서 업로드, 다운로드된 파일 수
      • %x : 사용자 클래스명
      • %y : 사용자 클래스로부터 최대 접속자 수
      • %z : 사용자 클래스로부터 최대 사용자 수
    • <Limit WRITE>DenyALL</Limit> : 익명 접속자들의 쓰기 권한 설정(DenyAll / AllowAll로 설정)
    • MaxClientsPerHost [최대 접속자 수] "[메시지]" : 호스트당 최대 허용 가능한 접속자 수 초과시 해당 메시지 출력
    • MaxClientsPerUser [최대 접속자 수] "[메시지]" : 사용자당 최대 허용 가능한 접속자 수 초과시 해당 메시지 출력
    • TimeoutIdle : idle 상태로 접속을 유지할 수 있는 시간
    • TimeoutNoTransfer : 파일 전송이 없는 상태로 접속을 유지할 수 있는 시간
    • TimeoutLogin : 로그인 인증을 유지할 수 있는 시간
    • UpTime 10 service : proftpd 서비스 시작 시간, 오전 10시부터 시작한다는 옵션
    • DownTime 23 service : proftpd 서비스 종료 시간, 오후 11시에 종료한다는 옵션
    • ShowSymlinks : 심볼릭 링크 파일을 보여줄 것인지 설정(on / off로 설정[각주:10])
    • PassivePorts [MinPort] [MaxPort] : 패시브모드 포트 설정
    • <Limit [명령어|명령어그룹]...> : 여러 명령어를 이용해 명령어 사용권한 제어
      • CWD : 디렉토리 변경
      • DELE : 파일 삭제
      • MKD : 디렉토리 생성
      • RNFR : 디렉토리 이름 변경
      • RMD : 디렉토리 삭제
      • RETR : 서버에서 클라이언트로 파일 전송
      • STOR : 클라이언트에서 서버로 파일 전송
      • ALL : 모든 FTP 명령에 대한 제한 적용
      • DIRS : 디렉토리 목록과 관련된 FTP 명령 포함
      • READ : 파일 읽기와 관련된 FTP 명령 포함, 디렉토리 목록은 포함 안됨
      • WRITE : 디렉토리, 파일 쓰기, 생성, 삭제와 관련된 FTP 명령 포함
      • LOGIN : 로그인 초기화 허용 또는 제한에 사용
    • AnonRequirePassword : 익명 접속시 사용자 접속을 매칭시키는 FTP 계정[각주:11]의 패스워드가 필요(on / off로 설정)
    • RootLogin : root 계정으로 FTP 접속을 하지 못하도록 설정[각주:12](on / off로 설정)
    • AuthPAM : FTP 접속자를 제한하는 인증 방법으로 PAM 모듈 사용여부 설정[각주:13](on / off로 설정)
    • AuthPAMConfig proftpd : PAM 인증시 /etc/pam.d 디렉토리 아래에 저장할 파일 이름 지정[각주:14], /etc/ftpusers 파일에 접속을 제한할 사용자 아이디 입력
    • MaxStoreFileSize 3 Mb user missflash : missflash 사용자에 한해 파일 하나당 업로드 최대 용량을 3MB로 제한
    • MaxRetrieveFileSize 3 Mb user missflash : missflash 사용자에 한해 파일 하나당 다운로드 최대 용량을 3MB로 제한
    • TransferRate RETR,STOR 1024000 : 업로드 및 다운로드 전송률(byte/sec) 설정[각주:15]
    • ServerAdmin : 서버 관리자의 이메일 주소 입력
    • DeferWelcome : 접속을 정상적으로 마친 후 서버이름 및 IP주소를 보여주도록 설정(on / off로 설정)
    • UseReverseDNS : 접속자의 IP주소를 이용해 DNS Lookup을 실행할 것인지 설정(on / off로 설정)[각주:16]
    • IdentLookups : ident 프로토콜을 이용해 접속자를 확인(on / off로 설정)[각주:17]
    • HideUser, HideGroup : 특정 사용자와 그룹 소유의 파일들이 보이지 않도록 설정
    • 제한 지시자 사용예

  • 패스워드와 그룹 파일 편집 : vipw
    • 출력 예 : anonyuser:x:510:510:FTP User:/var/anonyuser:/sbin/nologin[각주:22]
  • proftpd 로그파일 관리 : cp proftpd.logrotate /etc/logrotate.d/proftpd[각주:23]
        <Anonymous /var/vftp>
            <Directory incoming>
                <Limit WRITE>
                AllowAll
                </Limit>
            </Directory>
        </Anonymous>
    </VirtualHost>



FTP 서버 서비스는 윈도우에서도 많이 사용해 온 것이라 그리 낯설지는 않은데요... 설정이나 명령을 일일이 입력해줘야 하기 때문에 확실히 세심한 주의가 필요한 것 같습니다. 덕분에 비교적 장문의 글이 되어 버렸네요... :)

리눅스 관련 글을 마칠 때면, 항상 "복잡한 퍼즐"을 푼 것 같은 생각이 많이 드네요...
  1. 그룹관련 설정 에러가 발생하면 proftpd 설정 파일의 27번째 줄의 그룹설정을 nobody로 변경합니다. [본문으로]
  2. 명령어 뒤의 &표시는 해당 데몬서비스를 백그라운드로 실행한다는 의미입니다. [본문으로]
  3. 서버 캐릭터셋 설정에 따라 euc-kr이나 UHC 등의 캐릭터셋이 필요할 수도 있습니다. [본문으로]
  4. setup > System services명령으로도 동일한 설정을 할 수 있습니다. [본문으로]
  5. 런레벨 3과 5에서 설정하는 명령입니다. [본문으로]
  6. httpd, proftpd, pop3d 등과 같은 여러 데몬을 일괄적으로 관리하는 툴입니다. [본문으로]
  7. 단독으로 프로세스를 생성, 메모리에 상주하여 클라이언트의 접속을 기다리는 방식입니다. [본문으로]
  8. 따라서, wheel그룹은 루트 디렉토리보다 상위로도 접속할 수 있습니다. [본문으로]
  9. 홈디렉토리로 사용할 계정명으로 "/var/anonyuser"이라는 디렉토리가 필요하며, 해당 디렉토리의 소유자와 그룹은 계정명과 동일해야 합니다. [본문으로]
  10. 보안상 Off로 설정할 것을 권장합니다. [본문으로]
  11. 이 경우, anonyuser계정의 패스워드가 필요합니다. [본문으로]
  12. 보안상 반드시 설정하는 것이 좋습니다. [본문으로]
  13. 보안상 반드시 설정하는 것이 좋습니다. [본문으로]
  14. "contrib/dist/rpm/ftp.pamd" 파일을 /etc/pam.d" 디렉토리 아래에 proftpd로 복사합니다. [본문으로]
  15. 여기에서는 초당 1Mb로 전송률을 제한합니다. [본문으로]
  16. 접속속도가 느려질 수 있으므로 off로 설정합니다. [본문으로]
  17. 굳이 필요하지 않으므로 off로 설정합니다. [본문으로]
  18. 로그인 접속 제한을 위한 설정입니다. [본문으로]
  19. deny를 먼저 수행한 후, allow를 수행한다는 의미입니다. [본문으로]
  20. 접근을 제한하고 싶은 IP와 도메인을 입력합니다. [본문으로]
  21. 그 외의 사용자는 접속을 허용합니다. [본문으로]
  22. "/sbin/nologin"은 해당 계정의 쉘접속을 허용하지 않는다는 의미입니다. [본문으로]
  23. [/footnote]

    • 가상 FTP 서버 운영
      1. mkdir /var/vftp/incoming  : 가상 디렉토리 생성
      2. chown anonyuser.anonyuser -R /var/vftp/ : 소유자, 소유그룹 변경
      3. -A RH-Firewall-1-1INPUT -m state --state NEW -m tcp -p tcp --dport 2121 -J ACCEPT : 2121포트 추가(/etc/sysconfig/iptables 파일 수정)
      4. 설정 예
        • <VirtualHost 192.168.1.100>
              ... 기본 설정 ...[footnote]"proftpd.conf 파일 설정"에서 언급한 기본 설정 부분을 넣습니다. [본문으로]