FTPD(8)

명칭
ftpd - 인터넷 파일 전송 프로토콜 서버

서식
ftpd [-46AdDEmMoOrRSUvW] [-l [-l]] [-a address] [-p file] [-t timeout] [-T maxtimeout] [-u umask]

해설
ftpd 유틸리티는, 인터넷 파일 전송 프로토콜 서버 프로세스입니다. 이 서버는 TCP 프로토콜을 이용해, “ftp” 서비스에 할당할 수 있었던 포트를 listen() 합니다. “ftp” 서비스에 대해서는, services(5) (을)를 참조해 주세요.

이용 가능한 옵션은 이하와 같습니다:

-4  -D 하지만 지정되어 있는 경우, IPv4 접속을 받아들입니다. -6 도 또한 지정되어 있는 경우, IPv4 접속을 AF_INET6 소켓 경유로 받아들입니다. -6 하지만 지정되어 있지 않은 경우, IPv4 접속을 AF_INET 소켓 경유로 받아들입니다.

-6  -D 하지만 지정되어 있는 경우, AF_INET6 소켓 경유의 접속을 받아들입니다.

-a  -D 옵션이 지정되어 있는 경우, address 그리고 지정된 주소에 대한 접속만을 허가합니다.

-A  익명 ftp 액세스만 허가합니다.

-d  syslog 의 LOG_FTP 의 퍼실리티 (facility)를 이용해 디버그 정보를 출력합니다.

-D  이 옵션이 세트 되면(자), ftpd (은)는 제어 단말을 떼어내 demon가 되어, FTP 포트에의 접속 요구를 기다려, child process를 생성해 접속 요구에 대응합니다. 이 방식은 ftpd (을)를 inetd(8) (으)로부터 기동하는 것보다 오버헤드가 적기 때문에, 처리량이 많은 서버로 부하를 저감 하는데 도움이 됩니다.

-E  EPSV 명령을 무효화합니다. 낡은 파이어 월(fire wall)의 뒤로 서버가 있는 경우에 유용합니다.

-l  ftp(1) 세션 각각의 결과를, 성공도 실패도 다 같이 syslog 의 LOG_FTP 의 퍼실리티를 이용해 로그에 남깁니다. 이 옵션이 2 회 지정되면(자), retrieve (get), store (put), append, delete, make directory, remove directory, rename 의 각 조작 및 그러한 인수로 지정되었다 파일명도 기록됩니다. 주의: LOG_FTP 메세지는 디폴트에서는 syslogd(8) 에 의해 표시되지 않습니다. 경우에 따라서는 syslogd(8) 의 설정 파일로 그것을 유효하게 하지 않으면 안됩니다.

-m  파일 시스템의 퍼미션이 허락하는 한에 두어, 익명 유저에 의한 기존의 파일의 덧쓰기나 수정을 허락합니다. 디폴트에서는, 익명 유저는 기존의 파일을 수정하지 못하고, 특히, 업 로드되는 파일은 일의인 이름으로 작성됩니다.

-M  익명 유저에 의한 디렉토리 작성을 금지합니다.

-o  서버를 기입해 전용 모드로 합니다. RETR 가 무효화되어 다운로드를 금지합니다.

-O  익명 유저에만 대해, 서버를 기입해 전용 모드로 합니다. 익명 유저에 대해서는, RETR 가 무효화되어 익명 다운로드를 금지합니다. 본옵션은, -o 도 설정되어 있는 경우에는, 효과가 없습니다.

-p  -D 옵션이 지정되어 있는 경우, demon의 프로세스 ID 를 file 에 써냅니다.

-r  서버를, 독해 전용 모드로 합니다. 로컬 파일을 수정 할 수 있는 전명령은, 무효화됩니다.

-R  이 옵션이 세트 되면(자), ftpd (은)는, 유저 조작의 보안 체크나 PORT 요구의 제한에 관해서 옛것이 좋은 시대의 행동하러 돌아옵니다. 현재는, ftpd (은)는 리모트 유저의 호스트의 비특권 포트로 향해진 PORT 명령 만을 이용합니다 (이것은 FTP 프로토콜의 사양에 위반하고 있습니다만, 몇개의 보안 홀을 닫을 수가 있습니다).

-S  이 옵션이 세트 되면(자), ftpd (은)는 익명 (anonymous)에 의한 파일 다운로드의 모두에 대한 로그를, 파일 /var/log/ftpd 하지만 존재하는 경우에 한정해, 이 파일에 남깁니다.

-t  아무것도 조작하지 않고 방치했을 경우의 타임 아웃 시간을 timeout 초로 설정합니다 (디폴트는 15 분 ).

-T  클라이언트는 다른 타임 아웃초수를 요구할 수도 있습니다. -T 옵션에 의해, 타임 아웃 까지의 최대 대기 시간을 설정할 수 있습니다. 디폴트는 2 시간입니다.

-u  디폴트의 파일 생성 마스크를 umask (으)로 합니다. 이 수치는 8 진수치인 것을 기대됩니다. 자세한 것은 umask(2) (을)를 참조해 주세요.

-U  이전의 버젼의 ftpd 그럼, 패시브 모드의 클라이언트가 서버에 데이터 접속을 요구하면(자), 서버는 1024 ~ 4999 의 범위의 데이터포트를 사용하고 있었습니다. 현재의 버젼에서는, 서버는 디폴트에서는 49152 ~ 65535 의 범위의 데이터포트를 사용합니다만, 이 옵션을 지정하는 것으로써, 이전의 행동하러 돌아옵니다.

-v  -d (와)과 같은 의미입니다.

-W  FTP 세션을 /var/log/wtmp 에 기록하지 않습니다.

파일 /var/run/nologin (은)는, ftp 액세스를 거부하는데 사용할 수가 있습니다. 이 파일이 존재하는 경우, ftpd (은)는 그 파일의 내용을 표시해 종료합니다. /etc/ftpwelcome 파일이 존재하는 경우, ftpd 하 “ready” 메세지를 표시하기 전에 그 내용을 표시합니다. 만약 /etc/ftpmotd 파일이 존재하는 경우, 로그인 성공 후에 ftpd (은)는 그 내용을 출력합니다. 사용되는 motd 파일은 로그인 환경에 대해서 상대인 것에 주의해 주세요. 즉, 익명 유저의 경우에는, ~ftp/etc 에 존재하는 것을 의미.

이 ftp 서버는, 현재, 이하의 ftp 리퀘스트를 서포트하고 있습니다. 리퀘스트의 캐릭터의 대문자 소문자의 구별은 무시됩니다. 표 [RW] 가 붙어 있는 리퀘스트는, -r 하지만 지정되면(자) 무효화됩니다.
리퀘스트 | 설명
ABOR | abort previous command
ACCT | specify account (ignored)
ALLO | allocate storage (vacuously)
APPE | append to a file [RW]
CDUP | change to parent of current working directory
CWD | change working directory
DELE | delete a file [RW]
EPRT | specify data connection port, multiprotocol
EPSV | prepare for server-to-server transfer, multiprotocol
HELP | give help information
LIST | give list files in a directory (“ls -lgA”)
LPRT | specify data connection port, multiprotocol
LPSV | prepare for server-to-server transfer, multiprotocol
MDTM | show last modification time of file
MKD | make a directory
MODE | specify data transfer mode
NLST | give name list of files in directory
NOOP | do nothing
PASS | specify password
PASV | prepare for server-to-server transfer
PORT | specify data connection port
PWD | print the current working directory
QUIT | terminate session
REST | restart incomplete transfer
RETR | retrieve a file
RMD | remove a directory [RW]
RNFR | specify rename-from file name [RW]
RNTO | specify rename-to file name [RW]
SITE | non-standard commands (see next section)
SIZE | return size of file
STAT | return status of server
STOR | store a file [RW]
STOU | store a file with a unique name [RW]
STRU | specify data transfer structure
SYST | show operating system type of server system
TYPE | specify data transfer type
USER | specify user name
XCUP | change to parent of current working directory (deprecated)
XCWD | change working directory (deprecated)
XMKD | make a directory (deprecated) [RW]
XPWD | print the current working directory (deprecated)
XRMD | remove a directory (deprecated) [RW]

이하에 나타낸 비표준 명령 혹은 UNIX 에 특유의 명령이, SITE 리퀘스트로 서포트되고 있습니다.

리퀘스트 | 설명
UMASK | change umask, e.g. ``SITE UMASK 002''
IDLE | set idle-timer, e.g. ``SITE IDLE 60''
CHMOD | change mode of a file [RW], e.g.  ``SITE CHMOD 755 filename''
MD5 | report the files MD5 checksum, e.g.  ``SITE MD5 filename''
HELP | give help information.

주: 익명 로그인의 경우, SITE 리퀘스트는 무효화되고 있습니다.

Internet RFC 959 로 규정되고 있는 ftp 리퀘스트 중 , 이외의 것은 해석은 됩니다만 인플리맨트 되고 있지 않습니다. MDTM 및 SIZE 는 RFC 959 에서는 규정되고 있지 않습니다만, 다음에 개정된다 FTP RFC 에는 등장하겠지요. 서비스 거부 공격의 가능성을 제거하기 위해서, 현재의 전송 타입이 ASCII 의 경우에는, 10240 바이트보다 큰 파일에 대한 SIZE 리퀘스트는 거부됩니다.

ftp 서버가 액티브한 파일 전송을 중단하는 것은, ABOR 명령의 전에, Telnet "Interrupt Process" (IP) 시그널과 Telnet "Synch" 시그널이 Telnet 스트림내에 있는 경우만입니다. 이것은 Internet RFC 959 에 기술되고 있습니다. 만약, 데이터의 전송중에 STAT 명령을 받아, 그 전에 Telnet IP 와 Synch (이)가 있었을 경우, 전송 스테이터스가 돌려주어집니다.

ftpd 유틸리티는, csh(1) 그리고 사용되고 있는 파일명 전개를 해석합니다. 이것에 의해, 유저는 메타캐라크타 “*? []{}~” (을)를 이용할 수 있습니다.

ftpd 유틸리티는, 6 살의 룰에 따라 유저의 인증을 실시합니다.

1.  로그인명은 패스워드 데이타베이스 에 없으면 안되어, 하늘의 패스워드여서는 안됩니다. 이 경우, 모든 파일의 조작에 앞서, 클라이언트측으로부터 패스워드가 제공되어 있지 않으면 안됩니다. 유저가 S/Key 의 키를 가지고 있는 경우는, USER 명령이 성공했을 때의 응답에는 S/Key 챌린지를 포함해 보내집니다. 클라이언트는, 그에 대한 PASS 명령을 사용해 응답할 때에, 통상의 패스워드나 S/Key 의 원 타임 패스워드의 어느 쪽을 붙여 응답 하는지를 선택할 수 있습니다. 서버는 어느 쪽의 패스워드를 받아들였는지를 자동적으로 판정해, 거기에 응해 인증을 시도합니다. S/Key 의 인증에 관한 자세한 것은 key(1) (을)를 참조해 주세요. S/Key 는 Bellcore 사의 상표입니다.

2.  로그인명은 파일 /etc/ftpusers 에 실려 있어서는 안됩니다.

3.  로그인명은 파일 /etc/ftpusers 그리고 지정되어 있는 그룹의 멤버여서는 안됩니다. 이 파일로 그룹명으로서 해석되는 엔트리의 선두에는 @ 부호 ‘@’ 하지만 붙습니다.

4.  유저는 getusershell(3) 하지만 돌려주는 표준의 쉘을 가지고 있지 않으면 안됩니다.

5.  유저명이 파일 /etc/ftpchroot 에 실려 있는지, 그 파일에 있는 그룹 엔트리 (즉 ‘@’ 그리고 시작되는 엔트리)의 멤버인 경우, 어카운트 “anonymous” (이)나 “ftp” (와)과 같이, chroot(2) 에 의해, 그 세션의 루트 디렉토리가 유저의 로그인 디렉토리 로 변합니다 (다음의 항목을 참조해 주세요). 이 기능은, login.conf(5) 그리고 불형 플래그 "ftp-chroot" 를 온으로 해도 유효하게 됩니다. 그러나, 유저는 여전히, 패스워드를 줄 필요가 있습니다. 이 특징은, 완전하게 익명 (anonymous)인 어카운트와 완전한 특권이 있는 어카운트의 사이에서의 타협적인 이용을 위한 물건입니다. 이 어카운트는 익명 어카운트로 설정하는 것과 같게 설정되어 있지 않으면 되지 않습니다.

6.  만약 유저명이 “anonymous” 또는 “ftp” 의 경우는, 익명의 ftp 어카운트가 패스워드 파일 (유저 “ftp” )(으)로 제공되어 있지 않으면 안됩니다. 이 경우, 유저는 어떠한 패스워드에서도 로그인이 허가됩니다 (관습으로서는 유저의 email 주소를 패스워드로서 이용하게 되어 있습니다). -S 옵션이 세트 되고 있으면(자), 모든 전송 조작도 기록됩니다.

마지막 케이스의 경우, ftpd (은)는 특별한 수단으로 클라이언트의 액세스권을 제한합니다. 서버는 “ftp” 유저의 홈 디렉토리에 chroot(2) 합니다. 시스템의 보안가 침해되지 않기 위해(때문에), “ftp” 서브 트리는, 이하의 규칙에 따라 신중하게 구축하는 것을 추천 합니다.

~ftp
    홈 디렉토리는 “root” 의 소유로 해, 아무도 기입할 수 없게 합니다.

~ftp/etc
    이 디렉토리는 “root” 의 소유로 해, 아무도 기입할 수 없게 합니다 (모드 555). ls(1) 하지만 소유자를 숫자가 아니고 이름으로 표시할 수 있도록(듯이) 하기 위해서, 파일 pwd.db ( passwd(5) 참조) 및 group(5) 하지만 필요합니다. 파일 passwd 안의 패스워드는 사용되지 않으므로, 진짜 패스워드를 넣어서는 안됩니다. 파일 ftpmotd 하지만 존재하면(자), 로그인 성공 후, 그 내용이 표시됩니다. 이 파일의 모드는 444 로 해야 합니다.

~ftp/pub
    본디렉토리 및 그것 이하의 서브 디렉토리는, 여기에 파일을 두는 것에 대해 책임이 있는 유저 및 그룹에 의해 소유 되는 것이 당연해, 그들에 의해서만 기입해 가능해야 합니다 (모드 755 또는 775). “ftp” 또는 그 그룹이 소유하거나 기입해 가능해야 하지는 않습니다. 그처럼 해 버리면(자), 게스트 유저가, 바라지 않는 파일로 디스크를 가득하게 가능하게 됩니다.

시스템에 복수의 IP 주소가 있는 경우, ftpd (은)는 가상 호스트의 개념을 서포트합니다. 가상 호스트는, 복수의 익명 ftp area 각각을 다른 인터넷 주소 에 할당하는 기능을 제공합니다. 파일 /etc/ftphosts (은)는 각 가상 호스트에 관련한 정보를 보관 유지합니다. 각 호스트는 각각의 행으로 정의되어 각 행은 공백에서 단락지은 몇개의 필드로부터 됩니다:

hostname
    가상 호스트의 호스트명 혹은 IP 주소.

user
    시스템의 패스워드 파일중의 유저 레코드를 포함합니다. 보통 익명 ftp 와 같게, 이 유저의 액세스 UID, GID 및 그룹에 의해 익명 ftp area의 파일 액세스권이 정해집니다. 익명 ftp area (로그인시에 유저가 chroot 하는 디렉토리)는, 그 어카운트에 대한 홈 디렉토리로서 결정됩니다. 다른 ftp 어카운트의 유저 ID 및 그룹도, 표준 ftp 유저와 같아 상관하지 않습니다.

statfile
    모든 파일 전송의 로그가 기록되는 파일. 디폴트에서는 /var/log/ftpd 입니다.

welcome
    서버가 prompt를 내기 전에 표시되는 welcome 메세지. 디폴트에서는 /etc/ftpwelcome 입니다.

motd
    이 파일 내용은 유저가 로그인한 후에 표시됩니다. 디폴트에서는 /etc/ftpmotd 입니다.

캐릭터 '#'로 개시하는 행은 무시되기 때문에, 코멘트를 포함하는 것이 가능합니다.

프라이머리 IP 주소 혹은 호스트명에 대한 가상 호스트를 정의하면(자), 그 주소에의 ftp 로그인의 기본값이 변경됩니다. 'user', 'statfile', 'welcome', 'motd'의 각 필드는 기본값을 이용하는 경우, 공백인 채 혹은 하이픈 하나 '-'와 해도 상관하지 않습니다.

어떠한 익명 로그인의 설정에 대해서도 말할 수 있는 것입니다만, 설정과 메인트넌스에는 충분히 주위를 기울여, 보안상의 문제를 오고 싶음 않게 방어하지 않으면 안됩니다.

ftpd 유틸리티는, 리모트로부터의 파일 일람표시요구에 대응하기 위한 내부 서포트를 가져, chroot 된 환경에서도 그 이외에서도 /bin/ls (을)를 실행하지 않게 됩니다. ~/bin/ls 의 실행 형식 파일은 chroot 된 디렉토리에 없어 자주(잘), ~/bin 디렉토리도 존재할 필요는 없습니다.

관련 파일
/etc/ftpusers
    환영되지 않는/제한을 받는 유저의 리스트.
/etc/ftpchroot
    chroot 되는 일반 유저의 리스트.
/etc/ftphosts
    가상 호스트를 위한 설정 파일
/etc/ftpwelcome
    welcome 메세지.
/etc/ftpmotd
    login 후의 welcome 메세지.
/var/run/nologin
    내용을 표시해, 액세스를 거부합니다.
/var/log/ftpd
    익명에 의한 전송의 로그 파일.

관련 항목
ftp(1), key(1), umask(2), getusershell(3), login.conf(5), inetd(8), syslogd(8)

버그
특권 포트 번호를 이용해 소켓을 작성하기 위해서, ftpd 는 슈퍼 유저의 권한으로 실행시켜 주세요. 서버는 로그인 유저의 실효 유저 ID 를 보관 유지해 두어, 주소를 소켓에 바인드 하는 경우에게만 슈퍼 유저의 권한을 사용합니다. 생각되는 보안 홀에 대해서는 꽤 상세하게 건너 조사 포함을 행했습니다만, 그런데도 불완전할지도 모릅니다.

역사
ftpd 유틸리티는 4.2BSD (으)로부터 등장했습니다. IPv6 서포트는 WIDE Hydrangea IPv6 스택 킷으로 추가되었습니다.