Server Admin

본문 바로가기
사이트 내 전체검색


RedHat Linux >> Server Administration for Redhat Linux
[목차]
제6장 FTP 서버

    4. proftpd.conf 설정


ProFTPd는 매우 많은 기능을 제공하고 있다. 특히, 이런 기능 들을 proftpd.conf에 여러 지시자를 이용하여 설정하는데, 기본으로 proftpd을 설치하면, proftpd.conf엔 몇 가지 지시자가 포함되어 있으며, 이들에 대한 주석들이 있다. 특히, ftp.oops.org에 있는 패키지들은 한글로 번역되어 있어 이해하기가 더욱 쉽다. 여기에 없는 지시자들은 다음의 proftpd 홈페이지의 레퍼런스를 보면, 설명과 사용법이 나와 있다.

위의 싸이트를 참조하여 설정 파일의 지시자를 정리해 보았다.

1. <anonymous>

문법 : <Anonymous root-directory>

기본설정 : 기본 지원 안됨

사용범위 : server config,<VirtualHost>

사용가능 버젼 : 0.99.0 이후 버젼

anonymous 설정 block은 anonymous FTP login을 생성하기 위해 사용되어 지며, </anonymous> 지시자에 의해서 block이 끝난다. root-directory 인자는 login 직후 daemon이 가장 먼저 chdir을 하고 chroot를 정할 directory를 지정한다. chroot가 성공적으로 수행이 되면, child daemon을 통해서는 상위 directory로 접근을 할수가 없다. 기본적으로, 현재 동작중이 user로서 원격 client가 login을 시도한다면, proftpd는 anonymous login을 나타낸다; 만약 현재 user가 root라면, 어떠한 경우에라도 anonymoous login은 <Anonymous> block의 존재와는 무관하게 허가되지 않는다. 현재 user가 아닌 다른 user들을 anonymous login으로 향하게 하기 위해서는, User와 Group 지시자를 사용한다. 게다가, User 또는 Group 지시자가 <Anonymous> block 에 존재하면, daemon은 chroot()를 하기 이전에 지정된 uid/gid로 영구적으로 전환을 시켜 버린다.

일반적으로 anonymous login들은 password 인증이 필요하지 않지만, 유효한 e-mail password를 패스워드 대신 요구한다. 이런 인증 방식을 원하지 않는다면, <Anonymous> 설정 블럭안에서 AnonRequirePasswrd 지시자를 이용하여 특정 password를 지정할수가 있다.

주의: Chroot() anonymous directory들은 Wu-ftpd처럼 anonymous root에 특정종류의 디렉토리 구조를 가질 필요가 없으며, 또한 별도로 필요한 system file들을 가질 필요도 없다. 이것은 proftpd가 chroot 하기 전에 가능한 system 정도들을 얻어서, 일반적인 동작에 필요한 file들을 open시켜 놓으며, 새로운 root directory 외부에 나두도록 설계가 되어 있기 때문이다.

전형적인 anonymous FTP 설정의 예:

<Anonymous /home/ftp>

# anonymous login 후에 daemon이 ftp user의 권한으로 작동

User ftp

# anonymous login 후에 daemon이 ftp group의 권한으로 작동

Group ftp

# Client가 anonymous 대신 ftp로 login 가능하게 함.

UserAlias anonymous ftp

# root-dir 하위의 모든 디렉토리에서 쓰기를 거절함

# 읽기는 기본으로 허락되어 있기 때문에 <Limit>에서 설정을 안해도 됨

<Directory *>

<Limit WRITE>

DenyAll

</Limit>

</Directory>

<Directory incoming>

<Limit READ WRITE>

DenyAll

</Limit>

<Limit STOR>

AllowAll

</Limit>

</Directory>

</Anonymous>

2. <Directory>

문법 : <Directory pathname>

기본설정 : None

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

이 지시자는 오직 지정된 directory와 하위 directory들에만 특정 지시자들을 적용시기키 위하여 블럭을 이용하여 사용을 한다. 블럭은 </Directory>로 끝이 난다. 각 directory 설정은 "closet"과 매치가 되는 알고리즘으로서 실행이 되는 동안 가능하며 file 또는 directory의 실제 경로 이름을 closeset과 매칭 되는 경로로 하여 <Directory> 지시자를 사용하는 것을 의미한다. 각 directory설정은 </Directory>가 나오는 곳 까지의 모든 설정이 하위 directory에 상속이 되며, 전체적인 설정은 <Directory> 블럭안의 설정으로 대체가 된다. 단 <Directory> 블럭안에서 사용되는 <Limit>의 경우에는 해당하지 않는다.

Example:

<Directory /users/robroy/private>

HideNoAccess

</Directory>

pathname에 wildcard(*)를 사용할수 있으며 이것은 그 존재하는 그 디렉토리 자신만을 적용하는 것이 아니라 해당 레벨의 모든 디렉토리와 그 하위 디렉토리에 적용을 하게 되는 것을 의미한다. 이러한 wildcard에 대응되는 것들은 wildcard를 사용하지 않은 <Directory> 설정 블록들 보다 우선권을 가지게 된다.

<Directory> block들은 상대경로를 사용할수가 없다. (proftpd daemon은 <Directory> 지시자의 pathname을 기반으로 알아서 상대적으로 작동을 한다.) pathname은 <Anonymous> 블럭 안에서 사용하는 경우를 제외하고는 항상 절대 경로이어야 하며, symbolic link를 사용할수가 없다. <Anonymous> 블럭안의 pathname은 상대경로를 사용할 수가 있으며, 그 기준은 anonymous root directory를 기준으로 지정이 된다.

[ProFTPD 1.1.3 이후 버젼에서의 주의사항]

tilde(~) character로 시작하거나 "~"뒤에 바로 username이 지정되지 않은 pathname들은 특정한 일시적인 mode가 주어진다. 언급된 mode에서 directory context는 부팅시에 configuration tree를 헝클어 놓거나 정렬 하지는 않지만, 이러한 hashing은 user가 인증을 완료하기 전까지 user의 home directory로 대체되지 않게 해야 한다. 이것은 모든 user들의 home directory 또는 그 하위 directory에 대해서 모든 <Directory> 블럭을 사용가능하게 한다.

Example:

<Directory ~/anon-ftp>

<Limit WRITE>

DenyAll

</Limit READ>

</Directory>

3. <Global>

문법 : <Global>

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 1.1.6 이후 버젼

Global 설정 블록은 main server 설정과 모든 virtualhost 설정 모두 광범위하게 적용시킬 설정 지시자를 설정할때 사용되어 진다. 하지만 모든 지시자들이 Global 블럭에서 사용되어 질수 있는것은 아니다. 게다가 중복된 <Global> 블럭들이 생성될수도 있다.

실행시에 모든 Global 블럭들은 각 서버의 설정에서 함께 그리고 마지막에는 합쳐지게 된다. Global 블럭들은 </Global> 지시자를 만나는 곳에서 설정이 끝나게 된다.

4. <Limit>

문법 : <Limit command|command-group [command2 ..]>

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Directory>, <Anonymous>, <Global>, .ftpaccess

사용가능 버젼 : 0.99.0 이후 버젼

Limit 설정 블럭은 주어진 문맥속에서 하나 또는 그 이상의 FTP 명령어들을 사용하는데 제한을 가하기 위하여 사용된다. Limit는 이후 설정에 계속 영향을 주기 때문에 하단에 설정한 <Limit> 블럭을 만날때 까지 모든 <Directory>와 <Anonymous> 블럭에 적용된 설정들을 제한한다. <Limit> 블럭에서 적용되어질 내용에 대해서, 설정할 명령어의 숫자는 제한이 없다. 명령은 어떤 유효한 FTP 명령이어도 되지만, 보통 다음 중 하나를 사용한다:

. CWD (Change Work Directory) -- 디렉토리를 변경할 때 클라이언트에서 전송된다. 이 명령에 limits를 적용하면 CDUP 명령(Change Directory UP)에도 적용됨.

. MKD (MaKe Directory) -- 새 디렉토리를 만들 때 클라이언트에서 전송됨.

. RNFR (ReName FRom), RNTO (ReName TO) -- 디렉토리 항목의 이름을 변경할 경우에 클라이언트에서 한쌍으로 전송됨.

. DELE (DELEte) -- 파일을 삭제할 경우에 클라이언트에서 전송됨.

. RMD (ReMove Directory) -- 디렉토리를 삭제할 경우에 클라이언트에서 전송됨.

. RETR (RETRieve) -- 서버에서 클라이언트로 파일을 전송.

. STOR (STORe) -- 클라이언트에서 서버로 파일을 전송.

추가로 다음과 같은 명령어 그룹을 사용할 수 있다. 이것들은 실제 명령 보다 낮은 우선순위를 갖지만, 실제 명령은 항상 명령어 그룹 대신 실제 명령 제한으로 적용되어야 한다.

. READ -- 파일 읽기와 관련된 모든 FTP 명령(디렉토리 목록은 포함 안됨). 예를 들어 RETR, STAT, 등.

. WRITE -- 파일 또는 디렉토리 쓰기/만들기/삭제와 관련된 FTP 명령(MKD와 RMD 포함)

. DIRS -- 디렉토리 목록과 관련된 모든 명령. 예를 들어 LIST와 NLST.

. ALL -- 모든 FTP 명령 (READ WRITE DIRS와 같은).

끝으로 로긴 접근 제어에 다음과 같은 특수 명령을 사용할 수 있다.

. LOGIN -- 서버에 연결 또는 로그인. 이 의사명령(pseudo-command)에 <Limit>를 적용해서 컨텍스트에 접속 또는 로긴 초기화의 허용 또는 제한에 사용할 수 있다. 이것은 <VirtualHost> 또는 <Anonymous> 서버 설정과는 다른 문맥에서 사용할때에는 아무런 영향을 미치지 않으며, 또한 무시되어 진다. (예를 들어 <Directoyr> 문맥에서 사용되어 지는 경우를 의미한다.)

<Limit> 명령어 제한이 file/directory 접근 권한 자체를 변경시키는 것은 아니다.. limits가 어떤 directory에서 명령어를 제한하도록 사용되어 지고 있는 동안, 기본 operating/file system에 상속되는 file의 권한은 아무런 변화가 없다.

참조 : IgnoreHidden

5. <VirtualHost>

문법 : <VirtualHost address>

기본설정 : 기본 적용 안됨

사용범위 : server config

사용가능 버젼 : 0.99.0 이후 버젼

VirtualHost 설정블럭은 특정한 호스트이름이나 IP주소에 대한 설정 지시자들의 독립적인 집합을 만들기 위해 사용된다. 이것은 시스템 수준의 IP aliasing이나 dummy 네트웍 인터페이스와 결합해서 하나 또는 그 이상의 "가상"의 서버들을 기계 한대에서 운영하기 위한 목적으로 자주 사용되곤 한다. 블럭은 </VirtualHost> 라는 지시자로 끝을 맺는다. VirtualHost 블럭 내에서 Port 지시자를 사용한다면 같은 주소에서 주 서버처럼 운영되는 가상 서버를 만드는 것이 가능하다.

profptd가 시작될 때, 가상 호스트 연결들은 ServerType 설정에 따라 다음 두 가지 중의 한 방법으로 처리된다 :

6. * inetd

데몬은 inetd가 건네준 목적지 주소와 포트를 검토한다. 설정된 가상 호스트들중의 하나와 부합된다면 적합한 설정에 기초해서 서비스 된다. 부합되는 가상호스트가 없고 메인 서버와도 부합이 안된다면 요청한 서버가 서비스 불가능이라는 것이 접속자에게 알려지고 연결이 끊어진다.

7. * standalone

설정화일을 분석한 후, 설정된 모든 포트에 귀를 기울이기 시작하고, 메인서버 혹은 가상서버들에 대한 연결을 다룰 필요가 있을 경우 새끼를 친다.

데몬이 standalone 모드일 때 귀기울이기를 사용하기 때문에 무지하게 많은 가상서버들을 지원하는 것이 가능하고, 어쩌면 프로세스당 화일기술자의 숫자를 초과할지도 모른다. 각각 하나의 화일기술자가 하나의 설정된 포트에 귀기울이기 위해 사용되기 때문이며 주소의 숫자와는 관계가 없다. 커널이 접속자 연결을 거절하는 것을 방지하기 위해 심하게 로드된 서버들에 대한 tcpBackLog 값을 증가시켜줄 필요가 있다는 것에 주의해라.

8. AccessGrantMsg

문법 : AccessGrantMsg message

기본설정 : login 형태의 의해 결정

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0pl5 이후 버젼

일반적으로, 230 response message는 user가 login 했는지 혹은 anonymous access가 승인되어왔는지를 나타내는 tandard message와 함께 인증후 즉시 FTP client에게 보내진다. 이 메시지는 AccessGrantMsg 지시자로 생성이 된다. message 의 인자들중 magic cookie %u는 client가 login하고 있는 동안에는 login한 username으로 대체가 된다. 예:

AccessGrantMsg "Guest access granted for %u."

9. Allow

문법 : Allow ["from"] "all"|"none"|host|network[,host|network[,...]]

기본설정 : 모든곳으로 부터 허락

사용범위 : <Limit>

사용가능 버젼 : 0.99.0pl6 이후 버젼

Allow 지시자는 <Limit> 문맥 내부에서 어떤 host들 과/또는 network에 명령이 제대로 접근을 했는지 혹은 작동들이 제한되었는지를 명확하게 나태내개 위해 사용된다. Allow는 고급스러운(또는 상당히 어설픈) 접근조절규약(access control rules)을 생성하기 위하여, 일반적으로 Order 와 Deny를 함께 결부 하여 사용되어 진다. Allow는 부가적인 첫번째 인자에 의해 작동한다; keyword는 from이며 from 은 순수하게 Allow를 해줄 것들에 대한 연결적인 의미를 가진다. from 뒤의 인자들은 접근을 명백하게 승인할 host들과 network들의 list들이 오게 된다. magic keyword all은 모든 host들의 접근을 승인 하는 것을 나타낼때 사용을 한다. (이는 lower priority를 제외한 AllowAll 지시자와 유사하다) 게다가, magic keyword none은 from이 절대적으로 접근 승인을 막지 않는 것을 나타낸다고 하지만 어떤 host들이나 network들이 접근 하는 것을 거부하는데 사용이 된다. all 이나 none이 사용되어 지면, 다른 host들이나 network들은 지정을 해도 의미가 없게 된다.

host와 network 주소는 이름이나 숫자로된 주소로 지정이 된다. 보안상의 이유로 모든 주소의 정보는 숫자로 적용하는 것이 추천되어 진다. name address로만 의존하는 것은 named attack이나 spoofing에 약한 DNS server에 많은 보안 문제를 야기 한다. 전체 network를 지정하는 숫자로 된 주소들은 마지막에 구둣점 .을 넣어 줘야 한다. ( 예를 들어 10.0.0 subnet 전체를 나타내기 위해서는 10.0.0. 으로 표기한다.) 전체 network를 나타내는 name 주소는 해당 domain의 제일 앞에 구둣점 "."으로 시작을 한다. (예를 들어 proftpd.org domain의 sub domain들을 나타낼 때는 .proftpd.org 로 표기를 한다.)

Example:

<Limit LOGIN>

Order Allow,Deny

Allow from 128.44.26.,128.44.26.,www.leelab.co.kr,.leelab.co.kr

Deny from all

</Limit>

10. AllowAll

문법 : AllowAll

기본설정 : 기본값으로는 절대적으로 모든곳을 허락하지만, 명확하지는 않다.

사용범위 : <Directory>, <Anonymous>, <Limit>, .ftpaccess

사용가능 버젼 : 0.99.0 이후 버젼

AllowAll 지시자는 <Directory>, <Anonymous> 또는 Limit> 블럭으로의 접근을 허락한다. 비록 proftpd의 기본 방침이 특정 object에 허락하는 것이라고 해도, default는 절대적으로 허락을 한다. AllowAll은 어떤 높은 수준의 거부 지시자들을 무시하고 절대적으로 허락을 한다.

11. AllowChmod

문법 : AllowChmod bool

기본설정 : 가능

사용범위 : server config, <Global>, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

AllowChmod는 client들이 SITE CHMOD 명령을 사용하는 것을 허락할지 여부를 조정한다. AllowChmod 지시자는 mod_site 모듈에 의해 지원이 된다.

예:

AllowChmod false

12. AllowFilter

문법 : AllowFilter regular-표현

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0pre7 이후 버젼

AllowFilter는 ProFTPD로 보내는 모든 명령들을 위해 반드시 매치가 되어져야 하는 정규표현식의 설정을 할수 있다. 이것은 ProFTPD로 보내지는 명령어 문자열을 조절하는데 아주 유용하게 사용되어 지며, ProFTPD에 대한 가능성이 있는 형태의 공격을 막을수가 있다. 정규 표현식은 client에 의해 보내지는 모든 명령들에 대해 적용이 된다. 알맞은 정규 표현식(regex)를 생성할때는 상당한 주의를 요한다. ProFTPD는 정규 표현식과 매치에 실패한 명령들에 대하여 client들에게 "Forbidden command" error message를 돌려 보낸다.

만약 정규 표현식 인자에 공백문자열이 들어간다면, 반드시 따옴표(")로 양쪽을 막아 줘야 한다.

Example:

# 오직 알파벳 문자와 공백문자만 포함한 명령어만 허락한다.

AllowFilter ".*/[a-zA-Z0-9 ]+$"

참조 : DenyFilter

13. AllowGroup

문법 : AllowGroup group-표현

기본설정 : 기본 지원 안함

사용범위 : <Limit>

사용가능 버젼 : 1.1.1 and later

AllowGroup은 AllowGroup이 적용되어질 <Limit> block의 문법 내에서 한정적으로 access가 용인 되어지는 group-expression을 지정한다. group-expression은 DefaultRoot에서 사용하는 것과 같은 형식을 가지며, block으로의 접근을 허락할 group들 이나 또는 허용하지 않을 group(이는 group name앞에 !문자를 붙인다)의 list를 comma로 구분하여 지정을 한다. expression은 "and" 로서 boolean 연산을 하여 list들이 분석이 되어지며, 명확한 allow를 적용하기 위해서는 expression 중 "ALL" 인자는 논리적 true 값을 가지게 되는 것을 의미한다.

참조 : DenyGroup, DenyUser, AllowUser

14. AllowOverwrite

문법 : AllowOverwrite on|off

기본설정 : AllowOverwrite off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Global>, .ftpaccess

사용가능 버젼 : 0.99.0 이후 버젼

AllowOverwrite 지시자는 새로 전송되어진 file들이 기존에 있는 file들을 덮어 씌우는 것을 허용한다. 기본적으로 ftp client들은 기존의 file들을 덮어 씌울수가 없다.

15. AllowRetrieveRestart

문법 : AllowRetrieveRestart on|off

기본설정 : AllowRetrieveRestart on

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Global>, .ftpaccess

사용가능 버젼 : 0.99.0 이후 버젼

AllowRetrieveRestart 지시자는 FTP REST 명령을 통하여 file을 재전송 하는 것을 허락하거나 거부할수 있다. default는 재전송을 가능하게 되어 있으며, clients들은 이전에 모아둔 data를 손실 없이 후에 중단된 file을 다시 재전송 할수 있다.

16. AllowStoreRestart

문법 : AllowStoreRestart on|off

기본설정 : AllowStoreRestart off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Global>, .ftpaccess

사용가능 버젼 : 0.99.0 이후 버젼

AllowStoreRestart 지시자는 client로 부터 server로 보내지는 store file 전송을 client가 "restarting" 하는 것을 허락하거나 거부 한다. 기본적으로 server로 file을 보낼때 REST

명령을 통한 restarting은 허용되지 않는다. ftp "incoming" 전송에서 restart하는 것을 허락하는 것은 조심해야 한다. 이것이 client에게 허락되어 있으면 비록 자신의 file이 아닐지라도 이전의 저장된 file의 size를 늘리거나 손상 시킬 수가 있기 때문이다.

17. AllowUser

문법 : AllowUser user-표현식

기본설정 : 기본 적용 안됨

사용범위 : <Limit>

사용가능 버젼 : 1.1.7 이후 버젼

AllowUser은 AllowUser가 적용되어질 <Limit> block의 문법 내에서 한정적으로 접근이 용인 되어지는 user-expression을 지정한다. user-expression은 AllowGroup에서 사용하는 문법과 유사하며, block으로의 접근을 허락할 user들 이나 또는 허용하지 않을 user들(이는 user name앞에 !문자를 붙인다)의 list를 comma로 구분하여 지정을 한다. expression은 "and" 로서 boolean 연산을 하여 list들이 분석이 되어지며, 명확한 allow를 적용하기 위해서는 expression 중 "ALL" 인자는 논리적 true 값을 가지게 되는 것을 의미한다.

참조 : DenyGroup, DenyUser, AllowGroup

18. AnonRequirePassword

문법 : AnonRequirePassword on|off

기본설정 : AnonRequirePassword off

사용범위 : <Anonymous>

사용가능 버젼 : 0.99.0 이후 버젼

일반적으로 anonymous FTP login은 system에 존재하는 user들의 password와 비교할 text password를 전송하는 방법과 같은 인증을 요구하지 않는다. 대신에. anonymous login은 password를 위한 prompt에 client들의 e-mail address를 넣을것을 요구한다. AnonRequirePassword 지시자를 on으로 하면, anonymous login시에 User 지시자에 지정을 해준 user의 인가된 password를 통하여 login을 하여야 한다. 이것은 "guest" 계정을 생성 하기위해 사용되어지며, 기능은 normal anonymous login들과 같지만 (그리고 client에게 chroot()를 적용한다.), server의 host system상에서 valid password를 요구한다.

"guest" 계정 설정의 예 :

<Anonymous ~roger>

User roger

Group other

UserAlias proftpd roger

AnonRequirePassword on

# root-dir 하위의 모든 디렉토리에 쓰기를 거부한다

# read는 기본값으로 allow이므로 <Limit>가 필요하지 않다.

<Directory *>

<Limit WRITE>

DenyAll

</Limit>

</Directory>

# incoming에서의 모든 읽기/쓰기 를 거절한다. command-group limit가 있기

# 때문에 우리의 group limit를 넘어 선행되는 어떤 동작들을 허락할수 있다.

<Directory incoming>

<Limit READ WRITE>

DenyAll

</Limit>

# incoming에 STOR(client에서 server로의 전송) 명령만 허락한다.

<Limit STOR>

AllowAll

</Limit>

</Directory>

</Anonymous>

19. AnonymousGroup

문법 : AnonymousGroup group표현식

기본설정 : 기본적용 안됨

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : Compatibility: 1.1.3 이후 버젼

AnonymousGroup 지시자는 모든 매치가 가능한 user들이 anonymous login으로 간주가 되도록 하나의 group-expression을 지정한다. group-expression 인자들은 user가 member로 있는 (또는 group 이름앞에 ! 문자를 사용할때는 멤버가 아니어야 한다) group들의 list를 AND 연산으로 간주한다. group-expression에 대한 더 많은 정보를 얻기 위해서는 DefaultRoot 지시자를 참조하라.

인증될 user가 AnonymousGroup에 의해 매치가 되면, password를 요구하지 않으며, user의 home directory를 기본 root directory로 하는 특정한 동적 anonymous 설정을 생성한다. 만약 DefaultRoot 지시자에 이 user가 적용이 되어 있다면, user의 home directory 대신에 DefaultRoot에 지정된 directory를 사용을 한다.

AnonymousGroup을 사용할때는 부적절한 설정을 하게 된다면, user home directory 하위에 있는 모든 directory 들이 읽기/쓰기 권한이 모두 주어지게 되므로 각별히 주의해서 사용을 해야 한다는 것을 명심해야 한다.

20. AuthAliasOnly

문법 : AuthAliasOnly on|off

기본설정 : AuthAliasOnly off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.1.3 이후 버젼

AuthAliasOnly는 UserAlias 지시자에 의해 real userid에 연결된 가장의 id를 clinet에게 제공하였을때 이 가상의 username으로만 login이 가능하게끔 한다. 전체 상황을 위한 특정 설정안에 AuthAliasOnly를 on으로 하는 것은 proftpd가 모든 non-aliased login 들을 완벽하게 무시하기 때문일 것이다. AuthAliasOnly를 on으로 하지 않고 alias user login을 시도 한다면 proftpd는 clinet를 거절할 것이며, syslog에 적절한 message를 보낸다.

21. AuthGroupFile

문법 : AuthGroupFile 경로

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.0.3/1.1.1 이후 버젼

AuthGroupFile은 /etc/group과 같은 형식을 가지는 대체 groups file을 지정하며, 이 대체 file은 인증을 하는 동안 사용이 되어지며, directory/access 동작 조절을 위해 group들을 이 file에서 비교를 하여 일치하지 여부를 조사한다. path 인자는 지정할 file의 절대 경로를 사용해야 한다. AuthGroupFile은 VirtualHost 마다 각각 설정을 할수가 있으며, virtual FTP server들은 각각 그들 자신의 인증 database 를 가질수가 있게 된다. ( AuthUserFile과 함께 연결하여 자주 사용을 한다.)

이 file은 Anonymous 또는 DefalutRoot login들을 위한 chroot() directory 구조 안에 존재할 필요가 없다는 것을 주의하라.

22. AuthPAM

문법 : AuthPAM on|off

기본설정 : on

사용범위 : server config,<VirtualHost>, <Global>

사용가능 버젼 : 1.2.0rc1 이후 버젼

이 지시자는 ProFTPD의 인증방법으로 PAM을 사용할건지 여부를 결정한다. ProFTPD는 가장 최초의 인증방식으로 PAM을 사용하는 정책을 기본으로 고안하고 있다.

23. AuthPAMAuthoritative

문법 : AuthPAMAuthoritative on|off

기본설정 : off

사용범위 : server config,<VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre3 이후 버젼

이 지시자는 PAM이 인증에 있어서 최종단계의 권한을 가지게 하던지 가지지 못하게 하는 것을 조정한다. 이 지시자를 on으로 설정하는 것은 PAM 인증이 실패할 시에 인증을 실패하게 만든다. 다른 module들, AuthUserFile과 같은 지시자를 허락하는 기본값 off는 PAM 인증을 하지 않게 한다.

PAM을 사용하거나 AuthUserFile과 같은 지시자를 사용하는데 문제가 있으면 이 지시자를 off로 설정을 하라.

24. AuthPAMConfig

문법 : AuthPAMConfig service

기본설정 : ftp

사용범위 : server config,<VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼

이 지시자는 인증을 할때 PAM service 이름을 지정할수 있다. PAM은 인증을 할때 service name을 사용하도록 지정을 한다. 이것은 virtual hosts별로 PAM service 이름을 다르게 사용하도록 할수 있다.

이 지시자는 1.2.0 pre10 이후부터 PAMConfig가 AuthPAMConfig 로 바뀐것이다.

예:

# Virtual host foobar는 다른 user들과는 다르게 인증을 한다.

PAMConfig foobar

이것은 /etc/pam.conf file이나 /etc/pam.d directory에 PAM service name인 foobar를 가지고 있다는 가정하에 한다.

이 지시자는 mod_pam 모듈에 의해서 지원이 되어진다.

기타 한글 문서 페이지의 README.PAM 문서를 참조하라.

참조 : PAMConfig

25. AuthUserFile

문법 : AuthUserFile 경로

기본설정 : 기본 적용 안됨

사용범위 : server config,<VirtualHost>, <Global>

사용가능 버젼 : 1.0.3/1.1.1 이후 버젼

AuthUserFile specifies an alternate passwd file, having the same format as the system /etcuthGroupFile은 /etc/group과 같은 형식을 가지는 대체 groups file을 지정하며, 이 대체 file은 인증을 하는 동안 사용이 되어지며, directory/access 동작 조절을 위해 group들을 이 file에서 비교를 하여 일치하지 여부를 조사한다. path 인자는 지정할 file의 절대 경로를 사용해야 한다. AuthGroupFile은 VirtualHost 마다 각각 설정을 할수가 있으며, virtual FTP server들은 각각 그들 자신의 인증 database 를 가질수가 있게 된다. ( AuthUserFile과 함께 연결하여 자주 사용을 한다. )

이 file은 Anonymous 또는 DefalutRoot login들을 위한 chroot() directory 구조 안에 존재할 필요가 없다는 것을 주의하라.

26. AuthUsingAlias

문법 : AuthUsingAlias on|off

기본설정 : AuthUsingAlias off

사용범위 : <Anonymous>

사용가능 버젼 : 1.2.0pre9 이후 버젼

일반적으로 AnonRequirePassword 지시자가 사용될때, 인증은 daemon process의 password 리스트를 사용하여 행하여 진다. 그러나 어떤 환경아래서는 username과 password를 사용하는 login 대신에 사용되어질 인증이 필요할 수도 있다.

AuthUsingAlias를 사용하는 익명사용자 설정의 예이다.

# 기본적인 읽기 전용 익명사용자 설정

<Anonymous /home/ftp>

UserAlias anonymous nobody

UserAlias ftp nobody

AuthAliasOnly on

<Limit WRITE>

DenyAll

</Limit>

</Anonymous>

# 어떠한 user들에게도 읽기 쓰기가 가능한 익명 접속을 허락하는 설정

<Anonymous /home/ftp>

AnonRequirePassword on

AuthAliasOnly on

AuthUsingAlias on

# 허가된 user들의 List.

# user들을 위하여 user/pass lookup은 서버 uid의

# 패스워드 엔트리가 아니다. (예: nobody)

UserAlias fred nobody

UserAlias joe nobody

<Limit ALL>

AllowAll

</Limit>

</Anonymous>

27. Bandwidth

문법 : Bandwidth <speed in Kbps, between 1 and 2048>

기본설정 : 적용안됨

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 1.2.0pre5~pre7 까지. pre8부터는 RateXXXX로 변경

Bandwidth 지시자는 서버에 주어진 최대 처리량 값을 조절한다. limits가 한대의 서버를 기반으로 셋팅을 하는 것과는 달리 이 지시자는 main server 또는 virtual server들마다 적용이 가능하다.

Example usage:

<VirtualHost xx.xx.xx.xx>

Port xxxx

ServerName "My Virtual Server"

# 256 Kbps 로 bandwidth를 제한

Bandwidth 256

DefaultRoot /home/ftp/something

etc...

28. Bind

문법 : Bind address

기본설정 : 적용안됨

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 1.1.6 이후 버젼

Bind 지시자는 주 설정 또는 VirtualHost 설정에 추가 IP address를 묶는 것을 허락한다. 여러개의 Bind 지시자들은 여러개의 주소를 묶어서 사용할 수 있다. address 인자는 완전한 검증을 거친 domain name 또는 dot(마침표)로 구분된 숫자로 된 IP address를 지정한다. Incoming 접속은 문맥속에 포함된 지시자에 의해 service되어 지는 Bind에 의하여 추가된 additional address로 향하게 된다. 부가적으로, SocketBindTight가 on 으로 셋팅이 되어 있으면, 특정 listen connection은 각 추가 주소를 통해 생성이 된다.

29. CDPath

문법 : CDPath directory

기본설정 : 기본 적용 안됨

사용범위 : server 설정, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0pre2 이후 버젼

directory들을 변경할때 사용되어지는 search 경로를 entry에 추가한다. 예를 들어 :

CDPath /home/public

CDPath /var/devel

이것은 /home/public 나 /var/devel 하위의 어떤 directory로 직접 이동하는 것을 허락한다. 만약 /home/public/proftpd가 존재한다면, cd proftpd를 하면 user는 현재에 있는 directory tree와는 상관없이 /home/public/proftpd 로 이동을 하게 되는 것이다.

30. Class

문법 : Class "이름" limit|regex|ip

기본설정 : 적용안됨

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 1.2.0pre9 이후 버젼

class 단위로 접속을 하는 것을 조정할수 있다. class 단위 접속은 그룹별로 불니되어 있는 class에 각 접속 ip address 별로 분류를 하여 허락을 한다. class는 각각 최대 접속수를 가질수 있다. limit는 class 이름에 대해서 최대 접속수를 제한을 하게 된다. regex는 class에 포함시키기 위한 hostname을 정규표현식(POSIX)로 설정할수 있으며 ip는 IP/netmask 를 기반으로 설정을 한다. 기본 class는 default로 사용한다. 예:

Classes on

Class local limit 100

Class default limit 10

Class local regex *.foo.com

Class local ip 172.16.1.0/24

위의 설정은 local과 default 2개의 class를 설정했다. local은 *.foo.com의 도메인을 가진 호스트에서 접근을 할수있으며 172.16.1.0의 network에서 역시 접근이 가능하다.

31. Classes

문법 : Classes on|off

기본설정 : Off

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 1.2.0pre9 이후 버젼

class에 기반한 접속을 조정한다. on으로 설정을 하면 class를 설정하여 접속하는 것을 조절할수 있다.

참조 : Class

32. CommandBufferSize

문법 : CommandBufferSize size

기본설정 : 기본 적용 안됨

사용범위 : server 설정, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre7 이후 버젼

CommandBufferSize 지시자는 server로 보내지는 최대 명령 길이 조절한다. 이것은 server가 받아 들이는 가장 긴 명령을 효과적으로 조절을 할수 있게 하며, Denial of Service(DoS)와 resource-consumption 공격으로 부터 서버를 보호할수 있다.

33. DefaultChdir

문법 : DefaultChdir directory [group-표현식]

기본설정 : ~

사용범위 : 서버설정, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0pre2 이후 버젼

login 후에 user가 위치할 directory를 결정한다. 기본값으로, user는 그들의 홈디렉토리로 들어가게 된다. 지정된 directory는 user의 홈디렉토리와 별도로 운영이 되어진다.

주의: 지정된 directory가 사용가능하지 않다면, user는 login을 하지 못한다.

34. DefaultQuota

문법 : DefaultQuota x

기본설정 : 적용안됨

사용범위 : server cofnig, <VirtualHost>, <Anonymous>

사용가능 버젼 : mod_quota module이 포함되어 있어야 함

/.quota file이 존재하지 않을 경우에 적용될 기본 quota byte를 지정한다. 이 지시자를 사용하려면 먼저 Quotas 지시자를 설정해야 한다.

참조 : Quotas

35. DefaultRoot

문법 : DefaultRoot directory [group-표현]

기본설정 : DefaultRoot /

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 0.99.0pl7 이후 버젼

DefaultRoot 지시자는 login한 user들에게 지정된 default root directory를 조절한다. DefaultRoot가 "/"가 아닌 directory에 지정이 되어 있으면, chroot는 client의 인증후 즉시 수행이 된다. 이것은 system file공간의 한 부분으로 부터 client들을 효과적으로 분리를 하는데 사용이 되어진다. 지정된 root directory는 "/" 또는 magic character "~"로 시작이 되어지며, 이것은 client가 그들의 home directory안에 가두어진것을 의미한다. 만약 DefaultRoot 지시자가 login user들의 home directory로 접근을 허락하지 않는 directory를 지정한다면, login 후의 user들의 현재 directory가 그들의 일반적인 home directory 대신에 DefaultRoot로 지정이 된다. <Anonymous> 지시자가 Anonymous login인을 위해 사용을 하는 root dirctory를 포함하고 있으므로, <Anonymous> 설정 블록에서는 DefaulRoot를 사용하지 않는다.

special character ~ 는 login후 바로 인증된 user의 home directory들로 대체된다. default root는 "~/anon-ftp" 와 같이 home directory의 subdirectory가 된다는 것을 주의하라.

부가적인 group-expression 인자는 DefaultRoot를 unix group, group들 또는 부분적인 group들로 제한 할때에 사용되어 진다. 이 expression은 [!]group-name1[,[!]group-name2[,...]] 의 형식을 취한다. expression들은 AND 연산으로 분석이 되어지며, expression의 각 member들은 DefaultRoot 지시자에 적용하기 위하여 논리적인 TRUE로 값이 구해져야 한다. special character !는 group membership을 무효화 하기위해 사용된다.

DefaultRoot 사용할 때는 주의해야한다. Chroot "감옥"은 user가 감옥을 "도망 "할 수 있는 있는 잠재적인 방법들이 있는 것 처럼 일반적인 system security 수단의 방법으로써 사용되서는 안된다.

DefaultRoot 설정의 예:

ServerName "A test ProFTPD Server"

ServerType inetd

User ftp

Group ftp

#

# 이것은 proftpd가 login후 즉시 인증된 user들의 directory를

# chroot로 수행하는 것을 설정한다.

# 이것이 실행이 되면, user "users"는 group-expression에

# 포함되어져있기 &#46468;문에 상위 directory들을 볼수가 없게 된다.

# 오직 group users의 멤버이고 staff의 멤버가 아닌 user들만 ~로

# 지정된 default root directory를 가진다.

DefaultRoot ~ users,!staff

...

36. DefaultServer

문법 : DefaultServer on|off

기본설정 : DefaultServer off

사용범위 : server config,<VirtualHost>

사용가능 버젼 : 0.99.0pl6 이후 버젼

DefaultServer 지시자는 host의 주 IP address 또는 <VirtualHost> 설정 블록에서 지정되어진 address 중의 하나가 아닌 IP address로 들어오는 connection이 있을때 기본으로 사용되어질 서버 설정을 조절한다. 일반적으로 그와같은 "unknown" connection들은 "no server available to service your request"라는 message가 나오며 연결이 끊어진다. 각 primary server 설정 또는 virtual server들에 대한 DefaultServer가 on으로 설정되어 있으면 모든 목적지를 알수 없는 접속들은 default server에 의해 서비스가 되어 진다. 오직 하나의 server 설정만이 기본으로 설정 되어 질수 있다.

37. DefaultTransferMode

문법 : DefaultTransferMode ascii|binary

기본설정 : DefaultTransferMode ascii

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre9 이후 버젼

DefaultTransferMode는 서버의 기본 전송 mode를 지정한다. 기본적으로 carriage-return/ linefeed translation은 ASCII mode를 지원한다.

38. DeferWelcome

문법 : DeferWelcome on|off

기본설정 : DeferWelcome off

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

DeferWelcome 지시자는 client가 인증에 성공할때 까지 master server 또는 virtual server에 새로운 접속에 대한 ServerName과 address를 전송하는 것을 지연시키는 것을 설정한다. on으로 설정을 한다면, 초기의 welcome message는 아주 일반적일 것이며, daemon이 활발하게 작동 중인 host에 대한 어떤 종류의 정보도 주지 않는다. 이것은 믿을수 없는 network들이나 host들로 부터 서버염탐의 가능성을 제한하기 위하여 보안의식이 있는 관리자들이 주료 사용을 한다.

39. DeleteAbortedStores

문법 : DeleteAbortedStores on|off

기본설정 : off

사용범위 : server, <VirtualHost>, <Directory>, <Anonymous>, <Global>, .ftpaccess

사용가능 버젼 : 1.2.0rc2 이후 버젼과 mod_core 모듈이 필요

DeleteAbortedStores 지시자는 접속이 끊어진 것이 아니라 ABOR 신호를 통해 전송이 중지되었을 경우 완료되지 못한 upload file의 일부분을 ProFTPD가 삭제를 시킬 것인지 아닌지를 결정한다.

40. Deny

문법 : Syntax: Deny ["from"] "all"|"none"|host|network[,host|network[,...]]

기본설정 : 기본 적용 안됨

사용범위 : <Limit>

사용가능 버젼 : 0.99.0pl6 이후 버젼

Deny 지시자는 <Limit> 문맥 블럭에 접근을 거부하게할 host들 또는 network들의 list를 만드는데 사용이 되어진다. magic keyword "all"과 "none"은 모든 host들을 거부하거나 어떤 host도 거부하지 않게 하는데 사용이 되어진다. Deny의 문법과 사용법에 대한 더 많은 정보를 보려면 Allow 와 Order을 참조하라

41. DenyAll

문법 : DenyAll

기본설정 : 기본 적용 안됨

사용범위 : <Directory>, <Anonymous>, <Limit>, .ftpaccess

사용가능 버젼 : 0.99.0 이후 버젼

DenyALl 지시자는 "order deny,allow <cr> deny from all"의 조합과 비슷하다. 이것은 directory, 익명 ftp 또는 limit 블럭에 아주 쉽게 완벽한 접근 거부를 설정한다. Order/Deny 지시자 보다 우선하기 때문에 Order/Deny 지시자보다 혼용하여 사용하면 안된다. DenyAll 지시자는 AllowAll을 사용함으로써 lower level directory에서 override될 수 있다. DenyAll 과 AllowAll은 상호 배타적이다.

42. DenyFilter

문법 : DenyFilter regular-표현

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0pre7 이후 버젼

AllowFilter와 유사하며, DenyFilter는 어떤 명령과도 매치가 되지 않는 정규 표현식을 지정한다. 정규 표현식과 매치가 되면, client에게 "Forbidden command" error message를 client에게 돌려 보낸다. 이것은 FroFTPD로 오는 어떤 명령어 조합을 막는데 아주 유용하게 사용을 할수가 있다.

Example:

# server로 보내지는 %로 시작하는 어떤 명령어도 허락하지 않는다.

DenyFilter "%"

참조 : AllowFilter

43. DenyGroup

문법 : DenyGroup group-표현

기본설정 : 기본 적용 안됨

사용범위 : <Limit>

사용가능 버젼 : 1.1.1 이후 버젼

DenyGroup은 <Limit> 블럭 안에서 명확하게 거절을 할 group-expression을 지정한다. group-expression은 DefaultRoot에서 사용되는 것과 같은 형식으로 표현을 하며, 쉼표를 구분자로 하여 group들 또는 해당되지 않는 그룹들(이&#46468;는 group name앞에 !를 붙인다)을 접근 거부를 할 <Limit> 블럭 안에 지정을 한다. 이 표현은 list들을 "and" 연산으로 분석이 되어 지며, 표현중 "ALL"은 명확한 거부를 적용하기 위해 논리적인 참으로서 값이 구해져야 한다는 것을 의미한다.

참조 : AllowGroup, AllowUser, DenyUser

44. DenyUser

문법 : DenyUser user-표현

기본설정 : 기본 적용 안됨

사용범위 : <Limit>

사용가능 버젼 : 1.1.7 이후 버젼

DenyUser는 <Limit> 블럭 안에서 명확하게 거절을 할 user-expression을 지정한다. user-expression은 DefaultRoot에서 사용되는 것과 같은 형식으로 표현을 하며, 쉼표를 구분자로 하여 group들 또는 해당되지 않는 그룹들(이&#46468;는 group name앞에 !를 붙인다)을 접근 거부를 할 <Limit> 블럭 안에 지정을 한다. 이 표현은 list들을 "and" 연산으로 분석이 되어 지며, 표현중 "ALL"은 명확한 거부를 적용하기 위해 논리적인 참으로서 값이 구해져야 한다는 것을 의미한다.

참조 : AllowGroup, AllowUser, DenyGroup

45. DirFakeGroup

문법 : DirFakeGroup On|Off [groupname]

기본설정 : DirFakeGroup Off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.1.5

DirFakeGroup과, 동반하는 지시자 DireFakeUser는 directory list 출력시에 file의 실제 group, user 소유권을 숨기는데 사용을 한다. 간단하게 on으로 설정을 하면, DirFakeGroup은 모든 file들을 ftp group이 소유권을 가진 것으로 출력을 할 것이다.

부가적으로, groupname 인자는 ftp보다 명확한 group을 지정하는데 사용이 된다. DirFakeGroup 와 DirFakeUser 둘 다 완전히 표면적일 뿐이다. groupname과 username을 지정하는 것은 system상에 존재할 필요가 없으며, 어떤 방법으로든 지시자는 허가권과 실제 소유권 또는 접근 조정에 영향을 미치지 않는다.

46. DirFakeMode

문법 : DirFakeMode octal-mode

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.1.6

DirFakeMode 지시자는 directory list에 출력되어질 모든 file들과 directory들의 mode(또는 권한)을 설정한다. 권한(user,group,other)들의 각 부분들을 보면, 만약 "읽기" 권한이 이 지시자에 의해 지정되어졌다면 directory에 대한 "실행" 권한은 listing에 자동으로 포함이 된다. 예를 들어:

DirFakeMode 0640

결과는 다음과 같다:

-rw-r----- ... arbitrary.file

drwxr-x--- ... arbitrary.directory

DirFakeUser 와 DirFakeGroup에서 처럼, directory listing에서의 "가장된" 권한들은 오직 표면적으로 보여지는것 뿐이며, 어쨌든 실제 접속 또는 실제의 권한들에는 별 영향을 미치지 못한다.

47. DirFakeUser

문법 : DirFakeUser On|Off [username]

기본설정 : DirFakeUser Off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.1.5

DirFakeGroup를 참조하라

참조 : DirFakeGroup

48. DisplayConnect

문법 : DisplayConnect filename

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre2 이후 버젼

DisplayConnect는 login전에 user에게 출력될 ASCII text 파일이름을 설정한다. filename은 상대 경로나 절대경로를 상관없이 지정을 할수있다. 상대경로로 지정할 경우 file은 server의 user home directory를 기준으로 찾게 된다. 혼란이 있을수도 있으므로, 절대 경로를 사용하는 것이 좋다. file이 없거나 접근 권한이 없어도, error는 발생하지 않으며 user에게 아무것도 보여주지 않을 뿐이다.

DisplayConnect는 DisplayLogin과 DisplayFirstChdir과 같이 %T, %F, %R, %L, %u 와 같은 "magic cookie"를 사용하여 표현할수도 있다. 자세한 것은 DisplayFirstChdir을 참조하라.

49. DisplayFirstChdir

문법 : DisplayFirstChdir filename

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼, magic cookie는 0.99.0pl10 이후

DisplayFirstChdir 지시자는 각 session에서 CWD를 통해 처음으로 접근한 directory로 접근을 할때 user에게 출력할 ASCII text 파일을 지정한다. file은 접근을 한 directory가 이전에 접근을 했을때와 변경이 있다면, 마지막 변경 시간을 proftpd가 알아서 출력을 해 줄수도 있다. filename이 상대 경로로 지정을 했다면, user가 들어 가는 새로운 direcory를 찾아 보게 된다. anonymous ftp login을 위해서는, file은 file system의 chroot() 안에 위치해야만 한다는 것을 주의해야 한다. file을 찾을수가 없거나 접근을 할수 없어도, 에러는 발생하지 않으며, 단지 client에게 출력을 하지 않을 뿐이다.

DisplayFirstChdir, DisplayConnect, DisplayLogin, DisplayQuit 지시자들은 아래의 magic cookie를 지원하며 (0.99.0pl10 이후 버젼), magic cookie들은 각각의 문자열에 대한 부분을 대신하여 출력을 해 준다.

%T - 현재 시간

%F - 사용 가능한 hdd 공간 (byte 단위)

%C - 현재 작업 directory

%R - Remote host 이름

%L - Local host 이름

%u - ident protocol에 의하여 분석된 Username

%U - login시에 사용한 Username

%M - 접속이 가능한 최대 유저수

%N - 현재 접속해 있는 유저수

%E - 서버 관리자의 E-mail 주소

적수님의 humanreadable patch를 적용시켰을 경우;

%P - MaxClientPerHost에서 지정한 접속 가능수를 출력

%f - 파일이 존재하는 파티션의 남은 hdd 공간(자동단위)

최선곤님의 time-limit patch를 적용시켰을 경우;

%B - 서비스 시작 시간

%b - 서비스 마치는 시간

주의: 모든 것이 합리적인 값을 가지고 있는것은 아니다. 단지 user들이 사용을 하는 문맥상에 의존할 뿐이다. (예를 들어, ident lookup이 off일때의 %u) 또한, 적수님의 humanreadable patch와 최선곤님의 time-limit patch에 대한 문서는 기타 한글 page를 참조하도록 한다.

50. DisplayGoAway

문법 : DisplayGoAway filename

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0pre8 이후 버젼

DisplayGoAway 지시자는 너무 많은 user들이 login해 있는 class의 member들과 login요청이 거절되는 class일때 user에게 보여줄 ASCII text 파일이름을 지정한다.

DisplayGoAway는 DisplayFirstChdir 과 같은 "magic cookie"를 지원한다.

참조 : DisplayFirstChdir

51. DisplayLogin

문법 : DisplayLogin filename

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

DisplayLogin 지시자는 user가 login을 한 즉시 보여줄 내용이 들어 있는 ASCII text file을 지정한다. filename은 상대 경로나 절대 경로로 설정을 할수가 있다. 상대 경로로 지정할 경우, file은 제일 처음 login을 한 directory를 기준으로 하여 찾게 된다. (UNIX user의 login경우는 user homedirectory가 기준이 되며, 익명 login의 경우에는 anonymous-root directory가 기준이 된다.) 익명 login의 경우 file은 반드시 chroot() file system 공간안에 위치해야 한다. file을 발견하지 못하거나 접근 권한이 없어도, error는 발생하지 않으며, 단지 client에게 아무것도 출력을 하지 않을 뿐이다.

DisplayLogin은 DisplayFirstChdir과 동일한 "magic cookie"들을 지원한다.

52. DisplayQuit

문법 : DisplayQuit filename

기본설정 : 기본 지원 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0pre8 이후 버젼

DisplayQuit 지시자는 user들이 logout을 할때 출력을 할 내용을 담은 ASCII file을 지정한다. filename은 상대경로든 절대경로든 모두 지정할수 있다. 상대경로로 지정을 할 경우, file은 user들이 logout을 하는 CWD(현재 작업 디렉토리)를 기준으로 찾게 되며, 이러한 이유로 경대 경로를 사용하기를 권장을 하는 바이다.

주의: 익명 login에서, file은 반드시 chroot() file system 공간에 위치해야 한다. 만약 file을 발견하지 못하거나 접근 권한이 없더라도, error는 발생하지 않으며 단지 user들에게 아무것도 출력을 하지 않을 뿐이다.

DisplayQuit은 DisplayFirstChdir과 동일한 "magic cookie"들을 지원한다.

53. DisplayReadme

문법 : DisplayReadme filename

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0pre8 이후 버젼

이것은 mod_redme module을 포함시켰을때 사용이 가능하다.

DisplayReadme 지시자는 지정된 file의 마지막 변경된 날짜를 user에게 공지한다. 각 설정범위에서 오직 하나의 DisplayReadme 지시자만 사용할수 있다.

DisplayReadme README

결과는:

Please read the file README it was last modified on Sun Oct 17 10:36:14 1999 - 0 days ago

cwd상에서 user에게 출력이 된다.

54. DownTime

문법 : DownTime 서비스마칠시간 "메세지"

기본설정 : DownTime -1

사용범위 : <VirtualHost>, <Anonysmous>, <Global>

사용가능 버젼 : 1.2.0pre9 이후버젼중 time-limit patch가 적용되어 있어야 함

DownTime 지시자는 서버가 서비스를 종료 할 시각을 24시간 단위로 설정한다. 이 지시자로 서비스 종료시각이 지정되면 그 시각 이후에는 해당(가상호스트,아무개,계정) 접속자는 서비스를 이용할 수 없다. 로긴메세지 화일에서 %b라 써주면 설정한 종료 시각이 표시된다. DownTime을 지정하지 않으면, DownTime은 24시로 인식이 되어 진다.

"메세지"는 DownTime 이후에 접속을 했을 경우, 출력을 할 경고문을 적는다.

자세한 내용은 http://proftpd.cbgate.com/ 을 참조하라.

참조 : UpTime

55. ExtendedLog

문법 : filename [[command-classes] format-nickname]

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous> <Global>

사용가능 버젼 : 1.1.6pl1 이후 버젼

ExtendedLog 지시자는 전체적인 서버의 log나 각 VirtualHost의 log들이 기록되는 logfile을 자신에게 알맞게 설정할수 있다. filename 인자는 proftpd가 시작될때 log를 작성할 logfile의 절대 경로를 포함하고 있어야 한다. 명령어 종류와 형식별로 다중 logflie을 만들수도 있다.

추가적으로, command-classes 인자는 명령어의 종류에 따라 log되는 것을 조정하는데 사용할수 있다. command-classes가 지정되지 않으면, proftpd는 기본적으로 모든 명령을 log한다. (password는 숨겨진다.) command-classes는 log를 할 명령어들의 리스트를 콤마(,)로 구분을 짓는다.(빈 문자열은 구분자로 인식하지 못한다.) 아래는 유효한 class들이다:

NONE - 해당 명령어 없음.

AUTH - 인증 명령어 (USER, PASS)

INFO - 정보 명령어 (PWD, SYST, etc)

DIRS - Directory commands (LIST, CWD, MKD, etc)

READ - File 읽기 (RETR)

WRITE - File/directory 쓰기 또는 생성

MISC - 기타 명령어 (SITE, etc)

ALL - 모든 명령어 (기본값)

format-nickname 인자가 지원이 되면, ExtendedLog는 LogFormat에 의해 생성된 미리 지정한 log형식을 사용하게 될것이다. 반면에, 기본 형식은 "%h %l %u %t \"%r\" %s %b"가 사용되어 진다.

예를 들어 기본 포맷을 사용하여 /var/log/ftp.log에 읽기와 쓰기에 대한 모든 log를 남기려면 아래와 같이 한다:

ExtendedLog /var/log/ftp.log read,write

참조 : LogFormat, TransferLog

56. FooBarDirective

문법 :

기본설정 :

사용범위 :

사용가능 버젼 :

FooBarDirective 지시자는 오직 예저를 위해 사용하는 멍텅구리 지시자 이다. 이 지시자는 mod_sample 모듈에 의해 사용이 가능하다.

57. Group

문법 : Group groupid

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

Group 지시자에서 지정한 group의 권한으로 server daemon이 작동을 하게 된다. 더 자세한 것은 User를 참조하라

58. GroupOwner

문법 : GroupOwner groupid

기본설정 : 기본 적용 안됨

사용범위 : <Anonymous>, <Directory>, .ftpaccess

사용가능 버젼 : 0.99.0 이후 버젼

GroupOwner 지시자는, GroupOwner 에 지시된 사용자들이 소유할수 있는 새로운 디렉토리나 화일을 만들수 있도록 한다. 주의할것은, GroupOwner 는 호스트의 OS/file 구조나 user/group 구조를 무시하고 사용할수 없다는 것이다. 즉, 만일 현재 사용자가 특정 그룹에 속하지 않는데, 새로운 파일과 디렉토리를 만들면, GroupOwner 그룹으로 소유자를 변경할수 없다. 만일, STOR(send file from client to server) 과 MKD(mkdir) 이 작동되었다고 하다라도, 새로운 디렉토리의 내용은 현재 사용자의 디폴트 그룹(이때 경고 메시지가 기록된다) 으로 소유될 것이다.

59. GroupPassword

문법 : GroupPassword groupid hashed-password

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0pl5 이후 버젼

GroupPassword 지시자는 하나의 password를 공유하여 인증을 시킬 그룹이 사용할 특별한 password를 만든다. group/password는 오직 GroupPassword가 적용될 context 내에서만 효과적으로 사용이 가능하다. hashed-password 인자는 기본 평문 password이며, 이것은 기본 유닉스 암호화 라이브러리 함수를 통해 인증이 되어진다. group membership이 주의깊게 조절되지 않으면 심각한 보안문제가 발생할 수 있으므로, GroupPassword을 사용할 때 주의해야한다.

참조 : UserPassword

60. HiddenStor

문법 : HiddenStor on|off

기본설정 : HiddenStor off

사용범위 : <Directory>, <Anonymous>, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre5 이후 버젼

HiddenStor 지시자는 두단계의 화일 업로드를 가능하게 해준다. 일단, ".in.filename" 으로 업로드 후, 업로드가 완료되면, 화일이름을 바꾼다. 이것은 원자성을 제공하며, 불완전한 업로드와 업로드 중인 화일이 사용되어 지는 것을 막는데 도움을 준다. 주의: 만약 화일 이름이 이미 사용중이면, (즉, 서버가 업로드중 다운되었을 경우), 파일이 업로드 되지 못하게 할 것이다.

61. HideGroup

문법 : HideGroup groupid

기본설정 : 기본 적용 안됨

사용범위 : <Directory>, <Anonymous>

사용가능 버젼 : 0.99.0 이후 버젼

HideGroup 지시자는 HideGroup에서 설정한 group의 권한으로 login을 하거나 또는 그 group의 권한을 갖기 전에는 <Directory> 또는 <Anonymous> 블럭안의 지정된 group의 권한으로 소유하고 있는 모든 directory 리스트들을 안보이게 하도록 설정을 한다. 일반적으로 숨겨진 directory들과 file들은 LIST와 NLST명령을 통하여는 볼수 없다. 하지만 다른 FTP 명령들 (CWD, DELE, RETR 등)을 통하여 작동을 할수는 있다. 이 행위는 IgnoreHidden 지시자를 통해 수정 되어질수 있다.

참조 : HideUser, HideNoAccess, IgnoreHidden

62. HideNoAccess

문법 : HideNoAccess

기본설정 : 기본 적용 안됨

사용범위 : <Directory>,<Anonymous>

사용가능 버젼 : 0.99.0 이후 버젼

HideNoAccess 지시자는 <Directory> 또는 <Anonymous> 로 지정되어 있는 블락을 현재 로그온은 했지만, 접근 권한이 없는 사용자는 디렉토리 리스팅 ( LIST 또는 NLST FTP 명령에 의한 ) 에서 숨기도록 할수 있도록 한다. 일반적인 Unix 스타일의 권한이 적용될 경우, 사용자는 HideNoAccess 가 적용된 디렉토리, 즉 접근 할경우 일반적으로 "Permission denied" 의 에러 메시지를 받는 디렉토리에 대해서는 디렉토리 항목 리스트에서 볼수 없도록 한다. 디렉토리와 화일은 IgnoreHidden 과 HIdeNoAccess 를 함께 적용시키면, FTP 명령으로 완전히 보이지 않토록 만들수 있다.

참조 : HideUser, HideGroup, IgnoreHidden

63. HideUser

문법 : HideUser userid

기본설정 : 기본 적용 안됨

사용범위 : <Directory>, <Anonymous>

사용가능 버젼 : 0.99.0 이후 버젼

HideUser 지시자는 HideUser에서 설정한 user가 login을 하거나 또는 그 user의 권한을 갖기 전에는 <Directory> 또는 <Anonymous> 블럭안의 지정된 user가 소유하고 있는 모든 directory 리스트들을 안보이게 하도록 설정을 한다. 일반적으로 숨겨진 directory들과 file들은 LIST와 NLST명령을 통하여는 볼수 없다. 하지만 다른 FTP 명령들 (CWD, DELE, RETR 등)을 통하여 작동을 할수는 있다. 이 행위는 IgnoreHidden 지시자를 통해 수정 되어질수 있다.

참조 : HideGroup, HideNoAccess, IgnoreHidden

64. HostsAllowSyslogLevel

문법 : HostsAllowSyslogLevel facility-level

기본설정 : 기본 적용 안됨

사용범위 : server, <Anonymous>, <VirtualHost>

사용가능 버젼 : 1.2.0 이후 버젼과 mod_wrap module 요구됨

Proftpd는 Unix syslog 매커니즘으로 UserHostsAllowFile으로 지정되어 있는 파일의 규칙의 결과에 따라 접속이 허락될때 로그를 남길수 있다. 기능적 단계에서의 논의들은 SyslogFacility 지시자에서 살펴보기 바란다.

참조 : HostsDenySyslogLevel

65. HostsDenySyslogLevel

문법 : HostsDenySyslogLevel facility-level

기본설정 : 기본적용 안됨

사용범위 : server, <Anonymous>, <VirtualHost>

사용가능 버젼 : 1.2.0 이후 버젼과 mod_wrap 모듈이 요구됨

Proftpd는 Unix syslog 매커니즘에 의거하여 UseHostsAllowFile 지시자에 지정되어진 file의 rule에 의해 거절당한 접속에 대해 로그를 남길수 있다. 이용 레벨에 대해서는 SyslogFacility 지시자를 참고하라.

참조 : HostsDenySyslogLevel

66. IdentLookups

문법 : IdentLookups on|off

기본설정 : IdentLookups on

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.1.5 이후 버젼

일반적으로, 클라이언트가 proftpd로 연결했을 때, ident protocol (RFC1413)은 remote username의 확인을 시도되기 위해 사용된다. 이것은 IdentLookups 지시자를 통해 조절된다.

67. IgnoreHidden

문법 : IgnoreHidden on|off

기본설정 : IgnoreHidden off

사용범위 : <Limit>

사용가능 버젼 : 0.99.0 이후 버젼

일반적으로 HideNoAccess, HideUser 또는 HideGroup을 통해 숨겨진 file들은 비록 directory 리스트에는 보이지 않더라도 모든 FTP 명령들에 의해서 작동이 될수 있다. (Unix file 권한이 있으면 당연한 결과이다.) 게다가 비록 실행을 시키거나 볼수는 없지만, 요청한 object가 있다는 것을 알려주는 "Permission denied" 라는 메세지를 client에게 보내게 된다. IgnoreHidden 설정은 제한된 FTP 명령을 설정하기 위해 어떤 숨겨진 directory나 file을을 완벽하게 무시시키기 위해 <Limit> 블럭을 설정을 한다. 이것은 client가 제한된 명령으로 숨겨진 directory나 file을 사용하려는 시도를 하면 "No such file or directory"와 같은 error message를 client에게 반환을 한다.

68. Include

문법 : Include file

기본설정 : 적용안됨

사용범위 : ?

사용가능 버젼 : 1.2.0 이후 버젼

Include 지시자는 설정 파일안에 다른 설정파일을 포함할수 있도록 한다.

69. LDAPAuthBinds

문법 : LDAPAuthBinds on|off

기본설정 : LDAPAuthBinds off

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10/mod_ldap v2.5 이후 버젼

LDAPAuthBinds 설정자는 인증된 바인딩(binding)의 사용여부를 설정할때 사용된다. 보통, 권한있는 LDAP DN는 사용자 정보(userPassword(사용자암호) 정보를 포함)를 얻어내기 위해 LDAP 서버에 바인딩을 할때 사용된다. LDAPAuthBinds가 활성화(on) 상태로 설정되어 있을때, LDAPDNInfo 설정자가 설정한 DN이 userPassword 정보를 제외한 사용자의 모든 정보를 추출하는데 사용된다. 다음에, FTP를 통해 암호까지 입력하여 로그인을 시도하는 사용자가 있을때, mod_ldap가 LDAP 서버에 바인딩을 수행하게 된다. 이 바인딩이 성공하게 되면, 사용자는 인증이 된 상태로 간주되어 로그인을 할 수 있게 된다. 이런 방식의 LDAP 인증은 LDAP 서버에서 지원하는 어떤 형태의 암호 변환(encryption) 방식이라도 지원이 가능하게 되는 추가 이점을 얻는다.

70. LDAPDefaultAuthScheme

문법 : LDAPDefaultAuthScheme crypt|clear

기본설정 : LDAPDefaultAuthScheme "crypt"

사용범위 : Server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼과 mod_ldap 2.0 이상

LDAP database에서 {prefix} 없이 password를 사용하기 위한 인증 계획을 지정한다. 예를 들어 내 password가 누군가의 LDAP database에 있으며, userPassword와 같은 무언가를 사용하려 한다면LDAPDefaultAuthScheme를 초기화를 해야 한다.

71. LDAPDefaultGID

문법 : LDAPDefaultGID default-gid

기본설정 : 기본 적용 없음

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼과 mod_ldap 2.0 이상

이 지시자는 대규모의 ISP들이나 hosting 조직들의 일반적인 다중 유저 환경에서 주로 사용이 된다. user가 LDAP gid Number 속성을 가지고 있지 않을때 LDAPDefaultGID가 사용이 되어 진다. 이것은 gid Number 속성이 없이 LDAP database에서 하나의 LDAP gid에 많은 수의 user들을 가질수 있게 할수있다; 이 지시자를 설정하는 것은 자동으로 user들에게 하나의 GID를 지정을 하게 할수 있다.

72. LDAPDefaultUID

문법 : LDAPDefaultUID default-uid

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼

이 지시자는 대규모의 ISP들이나 hosting 조직들의 일반적인 다중 유저 환경에서 주로 사용이 된다. user가 LDAP uid Number 속성을 가지고 있지 않을때 LDAPDefaultUID가 사용이 되어 진다. 이것은 uid Number 속성이 없이 LDAP database에서 하나의 LDAP uid에 많은 수의 user들을 가질수 있게 할수있다; 이 지시자를 설정하는 것은 자동으로 user들에게 하나의 UID를 지정을 하게 할수 있다.

73. LDAPDN

문법 : LDAPDN "ldap-dn"

기본설정 : LDAPDN "" (anonymous bind)

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre9 이후 버젼

LDAPDN은 인증을 통한 LDAP server로 묶기 위한 뜨렷한 이름을 지정한다. 이것은 보통 "cn=the-dn, dc=domain, dc=com" or "o=Your Organization, c=US"과 같이 보여진다. 보통은 LDAPDN 지시자를 사용하지 않지만, 익명 bind를 위하여 사용을 한다

74. LDAPDNInfo

문법 : LDAPDNInfo "ldap-dn" "dn-password"

기본설정 : LDAPDNInfo "" "" (anonymous bind)

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼

이 지시자는 LDAP server로 binding을 할때 사용하기 위하여 LDAP DN과 password를 지정한다. 이 설정 지시자가 지정이 되어 있지 않으면, 익명 bind로 사용이 된다.

75. LDAPDNPass

문법 : LDAPDNPass "ldap-dn-password"

기본설정 : LDAPDNPass "" (no password)

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre9 이후 버젼

LDAPDNPass 는 인증을 위해서, LDAP 서버에 LDAPDN 으로 바인딩 될때 사용하는 패스워드를 정하도록 한다.

LDAPDNPass 환경설정 지시자가 설정되어 있지않으면, password 는 사용되어 지지 않는다.

76. LDAPDoAuth

문법 : LDAPDoAuth on|off "auth-base-prefix"

기본설정 : LDAPDoAuth off

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼

이 설정 지시자는 LDAP 인증을 행한다. 이 지시자의 두번째 인자는 인증을 위해 사용을 하는 LDAP prefix 이다.

77. LDAPDoGIDLookups

문법 : LDAPDoGIDLookups on|off "uid-base-prefix"

기본설정 : LDAPDoGIDLookups off

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼

이 설정 지시자는 directory list에서 LDAP GID를 name으로 찾아 주는 역할을 한다. 이 지시자의 두번째 인자는 GID를 name으로 찾기 위해 사용을 하는 LDAP prefix이다.

78. LDAPDoUIDLookups

문법 : LDAPDoUIDLookups on|off "uid-base-prefix"

기본설정 : LDAPDoUIDLookups off

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼

이 설정 지시자는 directory list에서 LDAP UID를 name으로 찾아 주는 역할을 한다. 이 지시자의 두번째 인자는 UID를 name으로 찾기 위해 사용을 하는 LDAP prefix이다.

79. LDAPHomedirOnDemand

문법 : LDAPHomedirOnDemand on|off

기본설정 : LDAPHomedirOnDemand off

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼

LDAPHomedirOnDemand 지시자는 "요구되는 홈 디렉토리만들기"를 활성화 시킨다. 만약 사용자가 로그인하고 아직 홈디렉토리를 가지지 않았다면 홈디렉토리가 자동으로 만들어진다. 디렉토리의 소유권은 ProFTPD를 돌리는 user,group으로 정해질 것이다 (User , Group 설정 지시자를 참고하라).

80. LDAPHomedirOnDemandSuffix

문법 : LDAPHomedirOnDemandSuffix "추가 directory"

기본설정 : LDAPHomedirOnDemandSuffix ""

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

LDAPHomedirOnDemandSuffix 설정자를 사용하면, 요청에 대해 사용자의 홈디렉토리가 생성될때, 이 안에 추가로 생생될 디렉토리를 설정할 수 있다. 예를 들어, 사용자의 홈디렉토리가 "/home/user" 라고 할때, 이 설정자를 "public_html" 이라는 설정값과 함께 사용하게 되면, 요청에 따라 홈 디렉토리가 생성될때 "/home/user/public_html" 디렉토리도 같이 생성되게 된다. 이 기능을 사용하게 위해서는 LDAPHomedirOnDemand 설정자를 설정파일 안에서 활성화시켜야 한다.

참조 : LDAPHomedirOnDemand

81. LDAPNegativeCache

문법 : LDAPNegativeCache on/off

기본설정 : LDAPNegativeCache off

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre9 이후 버젼

LDAPNegativeCache 는 LDAP 를 사용하는 인증시 LDAP 서버로 부터의 부정의 응답을 캐쉬 설정/해제를 지시한다. 이 옵션은 다른 인증 시스템을 사용하거나 전환할때 유용하다. LDAP 데이타 베이스에 있지 않은 예전의 인증시스템에 많은 사용자들이 있을 경우, LDAP 가 아닌 UID 를 사용하는 디렉토리 리스팅은 많은 시간이 걸린다. 이것은 디렉토리 리스팅내의 UID 대신에 사용자 이름이 있는가를 알아볼때 LDAP 데이타 베이스 내에서 각각 대해 살펴보기 때문이다. LDAPNegativeCache 가 설정되어 있으면, LDAP 서버로 부터의 negative("not found") 반응은 캐쉬된다. 그러므로, 속도가 향상될 것이다.

82. LDAPPrefix

문법 : LDAPPrefix "ldap-prefix"

기본설정 : LDAPPrefix ""

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre9 이후 버젼

LDAPPrefix 는 LDAP 인증 쿼리에 접두사를 정의할수 있도록 한다. 이것은 "dc=domain, dc=com" 또는 "o=Your Organization, c=US" 의 형식으로 사용된다. LDAPPrefix 환경설정 지시자가 없으면, 기본값으로 사용되어질 접두사는 없다.

83. LDAPQueryTimeout

문법 : LDAPQueryTimeout timeout-seconds

기본설정 : LDAPQueryTimeout default-api-timeout

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre10 이후 버젼

LDAP directory 질의들을 위해 timeout을 설정한다. 기본값은 LDAP API에 의해 사용되어 지는 기본 timeout 값을 사용한다.

84. LDAPSearchScope

문법 : LDAPSearchScope onelevel|subtree

기본설정 : LDAPSearchScope subtree

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

LDAPSearchScope 설정자는 LDAP의 검색 범위를 지정하는데 사용된다. 이 설정자 뒤에 onelevel 설정값을 사용하게 되면, LDAP 트리구조에서 현재 노드의 하위 한 단위의 레벨만을 검색하게 된다. 초기 설정값인 subtree를 사용하게 되면 현재 레벨의 노드에서 하위 레벨에 있는 모든 노드들을 검색하게 된다.

85. LDAPServer

문법 : LDAPServer "ldap-server-name"

기본설정 : LDAPServer "localhost"

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre9 이후 버젼

LDAPServer 는 LDAP 인증에 사용될 LDAP 서버의 호스트 이름을 설정하도록 한다. LDAPServer 환경설정 지시자가 없으면, local host 가 기본값으로 사용된다.

86. LeechRatioMsg

문법 : LeechRatioMsg foo1 foo2 foo3

기본설정 : 없음

사용범위 : <Directory>, <Anonymous>, <Limit>,.ftpaccess

사용가능 버젼 : 1.2.0 이상 버젼과 mod_ratio 모듈이 요구됨

LeechRatioMsg 지시자는 quota 제한을 넘어선 유저들에게 응답 메세지를 보낸다.

예 :

LeechRatioMsg "한계량에 도달했습니다."

87. LogFormat

문법 : LogFormat nickname "format-string"

기본설정 : LogFormat default "%h %l %u %t \"%r\" %s %b"

사용범위 : server config

사용가능 버젼 : 1.1.6pl1 이후 버젼

LogFormat 지시자는 ExtendedLog 지시자와 함께 사용할 일반적인 log 형식을 생성하는데 사용되어 진다. 일단 생성을 하면, 형식은 지정된 별칭에 의해 참조가 되어 진다.

format-string 인자는 문자, 숫자, 그리고 심볼 문자의 조합으로 이루어 진다. %는 meta-sequence를 시작하기 위해 사용되어 진다(아래를 참조하라). %를 meta-sequence를 시작하기 위한 문자가 아닌 일반적인 문자열로 인식을 시키기 위해서는 %%로 표현을 하면 된다. 아래의 meta-sequence들은 log를 할때 대신하여 사용을 할수 있다.

%b -- 요청에 의해 보내진 Byte 량

%f -- 저장되었거나 복구되어진 filename

%{FOOBAR}e -- 환경 변화가 가능한 FOORBAR의 항목

%h -- 원격 host name

%a -- 원격 IP address

%l -- 원격 username (ident로 부터)

%p -- Local server port number

%v -- Local server name

%P -- Local server process id (pid)

%r -- client로 부터 받는 모든 명령어

%t -- 현재 local time

%{format}t -- 현재 local time 형식 (strftime(3) format)

%T -- file 전송시에 걸리는 시간 (초단위)

%s -- Numeric FTP response code (status)

%u -- Local의 인증된 userid

참조 : ExtendedLog, TransferLog

88. LoginPasswordPrompt

문법 : LoginPasswordPrompt on|off

기본설정 : LoginPasswordPrompt on

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0pre1 이후 버젼

password에 상관없이 login을 거절하려고 하거나, <Limit LOGIN> 지시자로 접근을 금지 시키려 한다면 LoginPasswordPrompt를 off로 지정하면, ProFTPd는 password를 요구하지 않는다.

89. LsDefaultOptions

문법 : LsDefaultOptions "options string"

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.1.6 이후 버젼

일반적으로 NLST, LSIT, STAT와 같은 directory list를 포함하고 있는 FTP 명령들은 어떤 file들이 보여지고 그들이 출력되는 형태는 무엇인지를 결정하기 위하여 client에 의해 전달되는 옵션을 사용한다. LsDefaultOptions 지시자를 사용하는것은 이러한 listing의 기본 행위를 변경할수가 있다. 예를 들어 모든 directory listing에 ".dotfile"을 항상 출력을 하게 하려면 다음과 같이 한다:

LsDefaultOptions "-a"

90. MaxClients

문법 : MaxClients number|none message

기본설정 : MaxClients none

사용범위 : server config, <Anonymous>, <VirtualHost>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

MaxClients 지시자는 서버나 익명 계정으로 login을 할 client들의 최대수를 설정한다. 일단 최대 유저수에 도달을 하면, 추가 유저는 인증을 시도한 후에 접속이 끊어 지게 된다.

로그인을 할 user의 수를 제한하지 않으려면 "none"이라는 문구를 지정해 주면 된다. 게다가 부가적인 message 인자는 최대유저수에 도달했을때 인증을 시도하는 client들에게 출력할 내용을 적어 주며(해당 내용이 있는 file을 지정하는 것이 아니다.) 접속이 끊어진 직후에 바로 출력이 된다. message 인자를 사용할때, 최대 로그인 유저값을 "%m"으로 대체하여 사용할수 있다.

message를 설정하지 않으면, proftpd는 시스템이 기본으로 사용하는 메세지를 사용한다.

예:

MaxClients 5 "죄송합니다. 현재 접속을 허락하는 유저수는 %m명 입니다. 다음 기회를 이용해 주십시오."

결과:

530 죄송합니다. 현재 접속을 허락하는 유저수는 5명 입니다. 다음 기회를 이용해 주십시오.

message 인자는 위에서는 한글로 적어 줬지만 global site를 운영중이라면 될수 있으면 영어로 작성을 하는 것이 좋다.

91. MaxClientsPerHost

문법 : MaxClientsPerHost number|none message

기본설정 : MaxClientsPerHost none

사용범위 : server config, <Anonymous>, <VirtualHost>, <Global>

사용가능 버젼 : 1.1.7 이후 버젼

MaxClientsPerHost 지시자는 하나의 host에서 몇개의 연결을 허용할 것인지에 대한 것을 설정한다. 부가적으로 message를 넣을수 있으며, 이것은 최대값을 넘어선 접속을 하는 client에 해당 message를 출력을 하게 된다. message를 설정하지 않으면, 시스템에서 기본적으로 사용하는 message를 출력을 한다.

예:

MaxClientsPerHost 1 "호스트당 하나의 접속밖에 허락하지 않습니다."

결과:

530 호스트당 하나의 접속밖에 허락하지 않습니다.

message는 ftp의 특성상 외국 어느나라에서든지 접근을 할 경우가 많으므로 될수 있으면, 1byte문자권 즉 영어로 설정을 하는 것이 좋다.

92. MaxHostsPerUser

문법 : MaxHostsPerUser number|none [message]

기본설정 : 없음

사용범위 : server config, <Anonymous>, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0 이후버젼과 mod_core module 요구됨

MaxHostsPerUser 지시자는 로그인한 유저이름으로 몇개의 접속을 할수 있는지를 설정한다. 이는 하나의 유저로 다중접속을 하여 download session을 여러개를 열어 서버 부하를 유발시키는 것을 제한한다. 일단 제한된 수에 도달했을 경우 같은 유저이름으로 새로운 접속을 하면 바로 접속을 해지한다.

제한된 유저수에 다다랐을 경우 message 인자를 이용하여 접속을 해지한 즉시 메세지를 보여줄수 있다. message 인자는 magic cookie %m을 이용할수 있으며 %m은 이 지시자에 지정한 최대값을 의미한다. 메세지를 지정하지 않으면 시스템에서 적용된 기본 메세지가 출력된다.

예 :

MaxHostsPerUser 1 "너의 유저이름으로는 최대 %m 개의 접속만 허락한다"

결과 :

530 너의 유저이름으로는 최대 %m 개의 접속만 허락한다

[ 주의 ] **

메세지는 한글로 쓰지 마십시오. 한글을 소화할수 있는 경우는 아주 드뭅니다.

93. MaxInstances

문법 : MaxInstances number

기본설정 : MaxInstances none

사용범위 : server config

사용가능 버젼 : 1.1.6pl1

MaxInstance 지시자는 proftpd 가 standalone 모드일때 생성되는 child 프로세서의 최대 수를 설정하도록 한다. 이 지시자는 inetd 모드로 사용되어질때는 아무런 효과가 없다.

child proftpd 프로세서는 한개의 클라이언트 커넥션을 가지고 있으므로, 동시에 연결할수 있는 커넥션의 수를 조절할수도 있다. 초과할경우는 로그를 기록하고 연결을 끊어 버린다. MaxInstances 지시자는 바람직하지 못한 서비스의 공격을 막는데 사용될수 있다. (반복적으로 ftp 포트에 연결함으로서, proftpd 에게 fork-bomb 를 일으키게 한다). 동시에 수행되는 child 프로세서의 수의 디폴트는 제한없음.

94. MaxLoginAttempts

문법 : MaxLoginAttempts number

기본설정 : MaxLoginAttempts 3

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

MaxLoginAttempts 지시자는 클라이언트가 서버에 접속하는 동안 인증을 하기위해 시도할 수 있는 횟수의 최대수를 설정한다. 지정된 시도 횟수동안 login을 하지 못하면, 접속은 끊어 지며, syslog에 의해 적절한 message가 기록된다.

95. MySQL-Database-Setup

문법 : 지시자 없음

기본설정 : 없음

사용범위 : 없음

사용가능 버젼 : mysql module 추가시

여기 proftpd 리스트에 Olivier M 님의 수고해주신 데이타베이스 설정 예제가 있다.

mysql> show fields from proftp;

+----------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+-------+

| username | varchar(30) | YES | | NULL | |

| uid | int(11) | YES | | NULL | |

| gid | int(11) | YES | | NULL | |

| password | varchar(30) | YES | | NULL | |

| homedir | varchar(50) | YES | | NULL | |

| count | int(11) | YES | | NULL | |

+----------+-------------+------+-----+---------+-------+

그리고, 데이타베이스 내의 테이블 예:

mysql> select * from proftp;

+----------+------+------+----------+----------+-------+

| username | uid | gid | password | homedir | count |

+----------+------+------+----------+----------+-------+

| oli | 1000 | 1000 | test | /home/om | 2 |

| oli2 | 1000 | 1000 | test | / | 1 |

+----------+------+------+----------+----------+-------+

모듈은 uid 와 gid 가 시스템 사용자가 아닌 일반 사용자가 되도록 주의해야 한다.

이 설정과 함께 MySQL 데이타 베이스를 사용하고자 하면, proftpd.conf 에 다음과 같이 추가를 하고, proftpd 를 재시작 시켜준다.

MySQLInfo localhost test "" test

# HOST login password database

SQLUserTable proftp

SQLUsernameField username

SQLUidField uid

SQLGidField gid

SQLPasswordField password

SQLHomedirField homedir

SQLLoginCountField count

SQLAuthoritative on

SQLPlaintextPasswords on

96. MySQLInfo

문법 : MySQLInfo host user pass dbname

기본설정 : 기본 적용 안됨

사용범위 : server config

사용가능 버젼 : mysql module이 요구

MySQL 데이타 베이스 드라이버(데이타 베이스를 원격으로 사용할때) 의 설정 연결은 SQL 에 직접적인 요구가 있기 전까지 만들어 지지 않는다. 그리고 지시자에 의해서 설정된 FTP session 의 연결시간동안 유지된다. "" 는 null 패스워드를 정의할 때 사용한다.

97. MySQLRatios

문법 : MySQLRatios [on | frate-field fcred-field brate-field bcred-field]

기본설정 : field가 정의가 안되었을 경우 off

사용범위 : server config

사용가능 버젼 : Debian package에서만 사용 가능

데이타베이스에 사용자마다의 갱신을 지원하도록 한다.

이것을 사용하기 위해서는 SQLUserTable 과 Ratios 지시자가 필요하다.

이것을 사용하기 위해서는 컴파일시 -DMOD_MYSQL_RATIOS 와 mod_ratio 버젼 2.0 이후와 함께 컴파일 해야 한다. 최신버젼은 stock ProFTPD 에 포함되지 않고, Debian 패키지에 컴파일되어 있다.

98. Order

문법 : Order allow,deny|deny,allow

기본설정 : Order allow,deny

사용범위 : <Limit>

사용가능 버젼 : 0.99.0pl6 and later

Order 지시자는 <Limit> 블락내에 Allow 와 Deny 지시자의 체크되는 순서를 설정하도록 한다. 왜냐하면, Allow 는 허용되도록 하고, Deny 는 제한을 가하는데, 이것의 순서는 보안기능상으로 중유하기 때문이다.

디폴트 설정인 allow,deny 가 사용되면, "allowed" 접근 권한이 먼저 체크된다. <Limit> 블락내에 명시적으로 접근권한을 설정하면, 다른 deny 지시자는 체크되지 않는다. 접근을 명시적으로 허용하지 않으면, Deny 지시자는 체크 된다. 만약 Deny 지시자가 적용되면, 접근은 명시적으로 거부되며, 그렇치 않으면 접근이 된다.

deny, allow 가 함께 사용되면, "deny" 가 먼저 체크된다. 다른 제한이 적용되면, 접근은 즉시 거부된다. deny 가 없으면, allow 접근이 체크된다. 만약, Allow 에서 명시적으로 허용하면, 전체 내용이 허락되어 진다. 그렇치 않으면 접근은 묵시적으로 거부된다.

명확히 하면, 다음 예제는 Allow/Deny 접근은 체크할때 사용되어 진다.

* Order allow,deny

1. Allow 지시자를 검사, 한개 이상 설정되어 있으면, ALLOW 결과값과 함께 종료.

2. Deny 지시자를 검사, 한개 이상 설정되어 있으면, DENY 결과값과 함께 종료.

3. 디폴트로 묵시적 ALLOW 로 종료

* Order deny, allow

1. Deny 지시자를 검사, 한개 이상 설정되어 있으면, DENY 결과값과 함께 종료.

2. Allow 지시자를 검사, 한개 이상 설정되어 있으면, ALLOW 결과값과 함께 종료.

3. 디폴트로 묵시적 DENY 로 종료

99. PAMConfig

문법 : PAMConfig service

기본설정 : ftp

사용범위 : server config,<VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre3 에서 1.2.0pre9 까지

이 지시자는 인증을 할때 PAM service 이름을 지정할수 있다. PAM은 인증을 할때 service name을 사용하도록 지정을 한다. 이것은 virtual hosts별로 PAM service 이름을 다르게 사용하도록 할수 있다.

예:

# Virtual host foobar는 다른 user들과는 다르게 인증을 한다.

PAMConfig foobar

이것은 /etc/pam.conf file이나 /etc/pam.d directory에 PAM service name인 foobar를 가지고 있다는 가정하에 한다.

기타 한글 문서 페이지의 README.PAM 문서를 참조하라.

PAMConfig 지시자는 1.2.0pre10 부터는 AuthPAMConfig 지시자로 변경이 되었다.

참조 : AuthPAMConfig

100. PathAllowFilter

문법 : PathAllowFilter regular-표현

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.1.7 이후 버젼

PathAllowFilter는 upload되는 file들에 대해서 정규표현식과 일치하는 것만 허락을 하게끔 설정을 한다. 정규 표현식은 client에 의해 지정된 전체 pathname에 반하여 적용된다. 그러므로 적당한 표현식을 생성할때에는 아주 주의를 해야 한다. 표현식과 매치가 실패를 한 path의 경우 client에게 "Forbidden filename" 이라는 error message를 출력한다.

정규표현식 인자에 공백 문자열이 포함되어 있으면 앞뒤로 따옴표(")를 이용하여 막아줘야 한다.

예:

# 오직 알파벳과 숫자 캐릭터만 포함된 filename 만 허락한다.

PathAllowFilter ".*/[a-zA-Z0-9]+$"

101. PathDenyFilter

문법 : PathDenyFilter regular-expression

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.1.7 이후 버젼

PathDenyFilter 지시자는 PathAllowFilter와 유사하며, 어떤 upload file이름이 정규 표현식과

일치하지 않는 file들을 upload할수 있게끔 허락하도록 설정을 한다.

표현식과 일치가 되면, client에게 "Forbidden filename" 에러 메세지를 출력한다.

이것은 .ftpaccess 또는 .htaccess file을 upload하는 것을 금지하는데 많이 사용을 한다.

예:

# .ftpaccess 또는 .htaccess file들이 upload되지 않게 한다.

PathDenyFilter "(\.ftpaccess)|(\.htaccess)$"

102. PersistentPasswd

문법 : PersistentPasswd on|off

기본설정 : Platform dependent

사용범위 : server config

사용가능 버젼 : 1.1.5 이후 버젼

PersistentPasswd 지시자는 proftp가 어떻게 인증, user/group 비교 그리고 name mapping을 위해 user/group이 조정 되는지를 조절한다. On으로 설정을 하면, proftpd는 시스템 전반적으로 상요이 되어 지는 /etc/passwd, /etc/group (그리고 어쩌면 /etc/shadow를) file들을 열려고 시도를 할 것이며, chroot() login동안 이 file들을 열어 놓고 있을 것이다. (/etc/shadow는 보안상의 이유로 결코 계속 열어 놓고 있지는 않는다는 것을 주의하라.) 어떤 platform에서는, chroot() 안에서는 libc function들이 이 database에 접근할수가 없으므로 이 option을 반드시 on으로 해 놓아야 한다. proftpd 설치시 configure를 할때, 설정 script는 이 지시자의 지원이 필요로 할지 여부 감지를 시도할 것이며, 기본으로 compile을 할것이다. 그러나 이러한 "감지"는 실패할 수도 있으며, 수동으로 이것을 on으로 또는 off로 설정을 해 줘야 한다. anonymous login을 했을때 directory list에서 user또는 group 이름이 보이지 않는다면, 이 지시자를 on으로 설정을 해 주어야 한다. AuthUserFile 또는 AuthGroupFile 지시자의 사용은 PersistentPasswd의 설정에 상관없이 user또는 group database file들을 통해 부분적인 지원을 강제로 하게 할수도 있다.

[주의]

NIS 또는 NIS+ user들은 proftpd가 기본으로 이 설정을 감지한다고 해도 이 지시자를 off로 하는 것이 좋다. on으로 설정한다면, NIS/NIS+ mapping이 작동을 안하게 될수도 있다.

103. PidFile

문법 : PidFile 파일이름

기본설정 : 없음

사용범위 : server config, <Global>

사용가능 버젼 : 1.2.0rc2 이후버젼과 mod_core 모듈 요구됨

PidFile 지시자는 daemon의 process id를 기록할 file을 지정한다. file 이름은 system root를 기준으로 작성을 한다. 예를 들어 /var/run/proftpd/pidfile 과 같이 지정을 한다. PidFile은 standalone mode에서만 사용이 가능하다.

PidFile은 ErrorLog와 TransferLog 그리고 설정파일을 다시 열때나 proftpd를 종료하기 위하여 server에 signal을 보낼때 유용하게 사용할수가 있다. 이것은 PidFIle에 기록되어 있는 주 daemon의 process id에 SIGHUP (kill -1) 를 보내서 실행 할수가 있다.

104. Port

문법 : Port port-번호

기본설정 : Port 21

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 0.99.0 and later

Port 지시자는 ProFTPD가 standalone mode로 작동할때 proftpd가 귀를 귀울일 tcp port를 설정한다. ServerType이 inetd mode일때는 아무런 영향을 미치지 않는다. 이 지시자는 master server와 함께 같은 IP address를 기반으로 vritual server를 실행하기 위해 <VirtualHost>와 함께 연결하여 사용되어 진다. 하지만 같은 port를 사용할수는 없고 다른 port에 귀를 귀울이게 하여야 한다

105. PostgresPort

문법 : PostgresPort 포트번호

기본설정 : 없음

사용범위 : <Directory>, <Anonymous>, <Limit>,.ftpaccess

사용가능 버젼 : 1.2.0 이후버젼과 mod_pgsql 모듈이 요구됨

PostgresPort 지시자는 Postgres database에 접근을 시도할 서버의 포트를 지정한다.

예:

PostgresPort 3306

106. QuotaBlockName

문법 : QuotaBlockName "byte"

기본설정 : QuotaBlockName "byte"

사용범위 : server cofnig, <VirtualHost>, <Anonymous>

사용가능 버젼 : mod_quota module이 포함되어 있어야 함

User에게 보고를 할 Quota block의 단위를 지정한다. 이 지시자를 사용하기 위해서는 우선 Quotas 지시자를 설정해야 한다.

참조 : Quotas

107. QuotaBlockSize

문법 : QuotaBlockSize x

기본설정 : QuotaBlockSize 1

사용범위 : server cofnig, <VirtualHost>, <Anonymous>

사용가능 버젼 : mod_quota module이 포함되어 있어야 함

각 quota block의 size를 byte단위로 설정한다. 기본은 1byte이다. 이 지시자를 사용하려면 우선 Quotas 지시자를 설정해야 한다.

참조 : Quotas

108. QuotaCalc

문법 : QuotaCalc [on/off]

기본설정 : 적용안됨

사용범위 : server cofnig, <VirtualHost>, <Anonymous>

사용가능 버젼 : mod_quota module이 포함되어 있어야 함

.quota file이 존재하지 않거나, quota값이 음수일때, quota상의 값을 산출하는 역할을 한다. 이 지시자를 사용하기 위해서는 우선 Quotas 지시자를 설정해야 한다.

참조 : Quotas

109. QuotaExempt

문법 : QuotaExempt uid,uid

기본설정 : 적용안됨

사용범위 : server cofnig, <VirtualHost>, <Anonymous>

사용가능 버젼 : mod_quota 모듈이 포함되어 있어야 함.

quota에 영향을 받지 않을 user들의 uid list를 지정한다. 이 지시자를 사용하기 위해서는 우선 Quotas 지시자를 설정해야 한다.

참조 : Quotas

110. Quotas

문법 : Quotas on

기본설정 : 적용안됨

사용범위 : server config,<anonymous>, <VritualHost>

사용가능 버젼 : mod_quota 모듈이 포함되어 있어야 함.

quota 사용을 가능하게 한다.

111. QuotaType

문법 : QuotaType [soft/hard]

기본설정 : 적용안됨

사용범위 : server cofnig, <VirtualHost>, <Anonymous>

사용가능 버젼 : mod_quota 모듈이 포함되어 있어야 함.

soft는 현재상태에 대한 경고만을 보여주며, hard로 설정을 하였을 경우에는 quota에 위반 되는 file들을 삭제한다. 이 지시자를 사용하기 위해서는 먼저 Quotas 지시자를 설정해야 한다.

참조 : Quotas

112. RateReadBPS

문법 : RateReadBPS byte_per_sec-number

기본설정 : 0

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Limits>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

RateReadBPS는 주어진 설정부분에서 초당 전송 바이트 즉 다운로드할 수 있는 대역폭을 설정한다. Zero는 대역폭의 한계가 없음을 말하고.(RateReadFreeBytes 다운된 후 양의 한정 대역폭을 의미한다.) 위부분들의 설정은 <Virtual>또는 <Directory>에 주로 쓰인다.

113. RateReadFreeBytes

문법 : RateReadFreeBytes number of bytes

기본설정 : 0

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Limits>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

RateReadFreeBytes는 대역폭의 한계치 없이 전송할 수 있는 바이트의 양을 말한다. 이 옵션은 큰 화일을 다운로드 하는 동안에 많은 대역폭을 설정할 수 있다. (RateReadHardBPS 보면 더우기 무한양을 다운로드 할 수 있다.)

114. RateReadHardBPS

문법 : RateReadHardBPS on/off

기본설정 : off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Limits>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

RateReadFreeBytes 만큼 파일을 전송한 다음 RateReadBPS에 지정된 값으로 대역폭을 억제시킨다. 이 의미는 만약 사용자가 엄청난 대역폭으로 자유롭게 할당된 양을 빠르게 다운로드한 경우에 HardBPS는 평균 전송량이 주어진 제한폭 만큼 내려갈 때까지 중단시킨다. 만약 FreeBytes의 양이 많이 설정되어 있고 ReadBPS가 낮다면 사용자는 전송이 계속될 때까지 계속해서 기다려야한다.

115. RateWriteBPS

문법 : RateWriteBPS byte_per_sec-number

기본설정 : 0

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Limits>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

RateWriteBPS는 주어진 설정 부분에서 업로드의 대역폭을 설정한다. Zero는 대역폭 제한하지 않는다. (RateWriteFreeBytes는 일부 업로드 양의 대역폭 제한을 의미한다.) 이 지시자는 <VirtualHost> 또는 <Directory> 센션에 주로 사용된다.

116. RateWriteFreeBytes

문법 : RateWriteFreeBytes number of bytes

기본설정 : 0

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Limits>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

RateWriteFreeBytes는 대역폭 제한 없이 전송될 수 있는 바이트양이다. 이것을 이용하면 큰것을 제한하면서 작은 파일에는 전체 대역폭을 줄 수 있다. (자유로운 양만큼 전송된 후에 어떤 일이 일어나는지는 RateWriteHardBPS를 참고).

117. RateWriteHardBPS

문법 : RateWriteHardBPS on/off

기본설정 : off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Directory>, <Limits>, <Global>

사용가능 버젼 : 1.2.0 이후 버젼

RateWriteHardBPS는 RateWriteFreeBytes 만큼 파일이 전송된 다음에 RateWriteBPS의 값으로 대역폭을 제한한다. 즉, 사용자가 엄청난 대역폭으로 자유롭게 할당된 양을 빠르게 업로드한 경우에 HardBPS는 평균 전송량이 주어진 제한폭 만큼 내려갈 때까지 중단시킨다. 만약 FreeBytes의 양이 많이 설정되어 있고 WriteBPS가 낮다면 사용자는 전송이 재개될 때까지 계속해서 기다려야한다.

118. RequireValidShell

문법 : RequireValidShell on|off

기본설정 : RequireValidShell on

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

RequireValidShell 지시자는 /etc/shells 에 없는 shell binary로 로그인 하는 것을 허락하거나 거절하는 것에 대하여 server, virtual host, anonymous login을 설정한다. 기본적으로 proftpd는 /etc/shells에 user들의 기본shell이 없으면, login을 허락하지 않는다. /etc/shells가 없다면, 모든 shell들을 유효한 것으로 취급을 한다.

119. RootLogin

문법 : RootLoginl on|off

기본설정 : RootLogin off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.1.5 이후 버젼

일반적으로, proftpd는 어떠한 여건하에서도 root logins을 허락하지 않는다. client가 정확한 password를 가지고서 root로 login을 시도할때, syslog로 특별한 보안 message가 보내지게 된다. RootLogin 지시자를 on으로 하면, root user로도 다른 user로 login을 할수 있듯이 인증을 하여 접속을 할수가 있다. 그러나 root login 보안 메세지는 여전히 syslog에 남게 된다. 이 지시자를 사용하는데 있어서 아주 세심한 주의를 요한다는 것을 명심하라.

120. ScoreboardPath

문법 : ScoreboardPath 경로

기본설정 : ScoreboardPath /var/run

사용범위 : server config

사용가능 버젼 : 1.1.6 이후 버젼

ScoreboardPath 지시자는 proftpd가 실행시 scoreboard file(proftpd-*)들이 위치할 곳을 지정한다. 이 file들은 ftpwho와 ftpcount와 같은 utility들이 잘 작동 할수 있도록 하기 위한 MaxClinets를 위해 필요로 한다.

121. ServerAdmin

문법 : ServerAdmin "admin-email-address"

기본설정 : ServerAdmin root@[ServerName]

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 0.99.0pl10 이후 버젼

ServerAdmin 지시자는 server 또는 virtualhost를 위한 관리자의 email 주소를 설정한다. 이 주소는 magic cookie %E 로서 대신 출력을 할수가 있다. (DisplayLogin 과 DisplayFirstChdir를 참조하라.

122. ServerIdent

문법 : ServerIdent On|Off [identification string]

기본설정 : ServerIdent ProFTPD [version] Server (server name) [hostname]

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre2 이후 버젼

ServerIdent 는 새로운 사용자가 연결했을 때, 보내주는 디폴트 메시지의 설정을 지시한다. off 로 설정하면, "[hostname] FTP server ready." 를 보여주며, on 으로 설정하면 디폴트 메시지외에 임의의 메시지를 보여준다. 만일, 사이트를 "FTP Server ready" 처럼 호스트 이름도 보여주지 않는 최소의 정보만을 보여주고자 할경우에 사용된다.

123. ServerName

문법 : ServerName "이름"

기본설정 : ServerName "ProFTPD Server [버젼]"

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 0.99.0 이후 버젼

ServerName 지시자는 서버에 user가 접속했을때 출력되는 문자열을 설정하거나, 지시자가 <VirtualHost> 블럭 안에 존재할때는 virtual server로 접속했을때 출력되는 문자열을 설정한다.

참조 : <VirtualHost>

124. ServerType

문법 : ServerType standalone|inetd

기본설정 : ServerType standalone

사용범위 : server config

사용가능 버젼 : 0.99.0 이후 버젼

ServerType 지시자는 server daemon의 작동 mode를 설정한다. type-identifier(지시형태)는 두가지가 있다:

* inetd

inetd "super server"로 부터 작동을 제어당한다. ftp로 오는 접속은 inetd를 거쳐 proftpd로 전해지는 즉시 서비스가 된다. ftp service가 주가 아닌 host에서 권장을 한다.

* standalone

daemon이 시작되면, 새로운 접속을 위해 설정되어진 port에 귀를 귀울인다. 새로운 접속에 의해 생성된 자식 process 새로 접속된 clinet로 부터의 모든 요청을 담당한다.

125. ShowDotFiles

문법 : ShowDotFiles on|off

기본설정 : ShowDotFiles Off

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0pl6 이후 버젼 -- 삭제예정

on 으로 셋팅을 하면, "." 으로 시작하는 디렉토리 리스트들이 출력될 것이다. 이 지시자는 LsDefaultOptions (예를 들어 LsDefaultOptions "-a") 에 밀려 외면당하고 있으며, 다음 버젼에서는 삭제가 될 것이다.

참조 : LsDefaultOptions

126. ShowSymlinks

문법 : ShowSymlinks on|off

기본설정 : 익명 로그인에서는 off, real login 에서는 on

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0pl6 이후 버젼

1.1.5 이전 버젼에서는 기본 적용이 On 으로 되어 있다.

host OS나 filesystem에서 제공되는 Symbolic link들은 directory list들에 보여지거나 - 보여질때는 목표물의 링크를 포함해서 보여준다. - 또는 숨겨진다. (proftpd는 symbolic link를 무시하며, 목표file이나 directory의 권한과 소유권을 보여준다.) 일반 유저로 login을 했을 경우에는 기본으로 모든 symbolic link들을 보여주며, 익명으로 login을 했을경우에는 symbolic link들을 숨기게 된다. 어떠한 이유(권한, 목표파일이 존재하지 않는 경우등)에도 symbolic link를 숨기지 않으려면 ShowSymlinks 를 off로 한다. off로 했을 경우 proftpd는 실제 Link의 소유권과 권한으로 그리고 디렉토리 type을 "l" (link)로서 link file이나 directory를 출력한다.

ProFTPD 버젼 1.1.5 이후에서는 ShowSymlinks의 기본값이 OFF로 변경이 되었으며, 이는 ShowSymlinks off 로 지정되기 전까지는 어떠한 경우에도 항상 symbolic link가 출력이 되기 때문이다.

127. SocketBindTight

문법 : SocketBindTight on|off

기본설정 : SocketBindTight off

사용범위 : server config

사용가능 버젼 : 0.99.0pl6 이후 버젼

SocketBindTight 지시자는 독립실행모드(standalone mode)(see Server Type) 에서 초기 tcp listen 소켓을 생성하고 바인드하는 방법을 조절한다.

이 지시자는 inet mode 에서는 적용되지 않는다. 왜냐하면, listen socket 이 필요하지도 생성되지도 않기 때문이다.

SocketBindTight 가 off(기본값) 되었을 경우에는, <VirtualHost> 환경설정에서 사용된 IP 주소의 수에 관계없이 서버가 listen 하는 포트에 따른 소켓은 하나만 생성된다.

이것은 비교적 주 데몬 프로세서의 디스크립터 수가 적은 시스템에서 효과적으로 사용된다.

SocketBindTight 가 on 되었을 경우에는, 주서버및 모든 설정된 가상 서버의 IP 주소마다 리슨 소켓을 생성하고 연결짓는다.

이것은 관리자가 proftpd(한개의 IP 주소에서) 와 다른 데몬(다른 IP 주소에서의) 에 의해서 사용되는 특정 포트를 가지고자 할때 사용되어 진다.

단점은 많은 가상 서버를 지원하기 위해서는 많은 수의 화일 디스크립터가 필요하다.

예:

두개의 서버가 IP 주소 10.0.0.1 과 10.0.0.2 를 마스터와 가상 서버로 각각 설정되어 있으면, 10.0.0.1 서버는 21번 포트에서 실행되고, 반면에 10.0.0.2 는 2001 포트에서 실행할수 있다.

SocketBindTight off #default

# proftpd 는 모든 가능한 주소에 두개의 소케을 만든다.

# 하나는 21 번 포트를 리슨하고, 다른 하나는 2001 번을 리슨한다.

# 이것은 모든 가능한 주소에 연결하며, 다른 데몬이나 사용자 프로세서가

# 21 번 또는 2001 번에 연결하지 않도록 해야 한다.

...

SocketBindTight on

# proftpd 는 역시 두개의 소켓을 만들지만, 10.0.0.1 에 21번 포트를

# 그리고, 10.0.0.2 에 2001 포트를 연결한다. 재사용 가능하도록 하게 하기 때문이다.

SocketBindTight 를 on 함으로서 생기는 부수효과로 일반적으로 주소가 연결되지 않을 때, "500 Sorry, no server available to handle request on xxx.xxx.xxx.xxx." 의 메시지 보다는 "connection refused" 메시지를 받도록 한다.

이것은 주어진 환경에 따라 바람직 할수도 있지만, 그렇치 않을 수도 있다.

128. SQLAuthoritative

문법 : SQLAuthoritative on | off

기본설정 : off

사용범위 : server config

사용가능 버젼 : sql module 추가시 지원

mod_mysql에서 인증을 멈추것인지 아니면 다른 가능한 방법(예를 들면 표준 유닉스 로긴)으로 시도할 것인를 지정한다. 초기값은 off로 다른 방법을 시도한다.

129. SQLEmptyPasswords

문법 : SQLEmptyPasswords bool

기본설정 : off

사용범위 : server config

사용가능 버젼 : sql module 추가시 지원

데이타베이스에서 빈(NULL은 아니지만 길이가 0) 암호를 받아들일지 여부를 지정한다. 초기값은 no고 NULL 암호는 결코 받아들이지 않는다. 만약 검색한 암호가 비어으면 사용자가 어떤 암호를 입력해도 유효하게된다. 그러나 디버그 레벨 4에 경고가 기록된다.

130. SQLEncryptedPasswords

문법 : SQLEncryptedPasswords

기본설정 : on

사용범위 : server config

사용가능 버젼 : sql module 추가시 지원

데이타베이스의 암호가 유닉스 crypt() 형식인지 아닌지를 지정한다. SQLEncryptedPasswords 지시자를 설정을 안하거나, 또는 on으로 체크가 되어지면, 기본값은 ture의 값을 가진다. (이는 설정값이 on이 되는 것을 의미한다.) 암호화된 암호 텍스트를 만들기 위한 도구는 ftp://ftp.linpeople.org/pub/People/lilo/source/makepasswd-1.07.tar.gz에서 찾을 수 있다.

131. SQLKey

문법 : SQLKey 키값

기본설정 : 없음

사용범위 : server config, Global, VirtualHost

사용가능 버젼 : 1.2.0 이상버젼과 mod_sqlpw 모듈이 요구됨

SQLKey는 SQLKeyField 칼럼을 매치시키기 위해 필요한 값을 지정한다.

132. SQLKeyField

문법 : SQLKeyField 칼럼이름

기본설정 : 없음

사용범위 : server config, Global, VirtualHost

사용가능 버젼 : 1.2.0 이상버젼과 mod_sqlpw 모듈이 요구됨

SQLKeyField 는 가상호스트에 따라 로그인을 하는것을 분리하여 사용할수 있도록 테이블 필드를 디자인 할수 있다.

133. SQLPasswordField

문법 : SQLPasswordField fieldname

기본설정 : 기본 적용 안됨

사용범위 : server config

사용가능 버젼 : sql module 추가시 지원

만약 데이터베이스 드라이버가 구성되어 있다면, 이것(SQLPasswordField)을 사용하는 것은 SQL 인증 함수를 직접 활성화시킨다. 이것은 비밀번호를 담고 있는 필드를 조건으로서 명기해야 하며, 기본값은 없다.

134. SQLPlaintextPasswords

문법 : SQLPlainTextPasswords

기본설정 : off

사용범위 : server config

사용가능 버젼 : sql module 추가시 지원

두개의 패스워드를 평문으로 비교하는 것은 규정한다. 기본값은 암호화시키거나 UNIX DES-암호화(기본값) 되었거나 데이타 베이스내에 포함하지 않는다.

이것을 설정하면, 아래의 다른 테스트는 끄지 않는다.

135. SQLScrambledPasswords

문법 : SQLScrambledPasswords

기본설정 : off

사용범위 : server config

사용가능 버젼 : sql module 추가시 지원

데이타 베이스내에 패스워드를 backend 형식이 되도록 규정한다. 기본값은 no

136. SQLUsernameField

문법 : SQLUsernameField fieldname

기본설정 : userid

사용범위 : server config

사용가능 버젼 : sql module 추가시 지원

username filed의 이름을 지정한다. 이것은 모든 다른 작동들을 위하여 WHERE 절 안에서 사용을 한다.

137. SQLUserTable

문법 : SQLUserTable tablename

기본설정 : users

사용범위 : server config

사용가능 버젼 : sql module 추가시 지원

다른 정보를 찾을때 사용되는 table을 지정한다. 기본으로 user table이 지정된다.

138. SyslogFacility

문법 : SyslogFacility facility-level

기본설정 : 기본 적용 안됨

사용범위 : server config

사용가능 버젼 : 1.1.6 이후 버젼

Proftpd 로그는 Unix syslog 메카니즘에 의한다. 이것은 유용성을 주는 여러가지 구별을 제공한다. 일반적으로 메시지와 연관된 인증은 AUTHPRIV (or AUTH) 기능 [보안적이며, 다른사람들에게 보여져서는 안되는] 과 연관되어 기록된다. 반면에 일반적인 기능상의 메시지는 DAEMON 기능으로 기록된다. SyslogFacility 지시자는 모든 기록 메시지를 기본 기능 보다는 다른 기능 으로 지시되도록 한다. 이 지시자가 사용되면, 모든 기록 메시지는 인증(보안) 과 그밖의 다른 특정한 기능에 의해 구분지어 진다.

기능-단계 인자값으로는 다음의 것이 사용되어져야 한다.

AUTH(or AUTHPRIV), CRON, DAEMON, KERN, LPR, MAIL, NEWS, USER, UUCP, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6 또는 LOCAL7.

참조 : SystemLog

139. SyslogLevel

문법 : SyslogLevel emerg|alert|crit|error|warn|notice|info|debug

기본설정 : 없음

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.2.0rc2 이상 버젼과 mod_core 모듈 요구됨

SyslogLevel은 error log내에 기록되는 다양한 메시지를 조정한다.

중요한것부터 다음과 같은 레벨이 가능하다.

Level Description

emerg Emergencies - system is unusable.

alert Action must be taken immediately.

crit Critical Conditions.

error Error conditions.

warn Warning conditions.

notice Normal but significant condition.

info Informational.

debug Debug-level messages

특정 레벨이 기술되어졌을때, 모든 아주 중요한 다른 레벨로 부터 들어오는 메세지들은 그 위에 쓰여질 것이다. 예를 들면 SyslogLevel의 정보가 기술되어지면, 주의와 경고의 log 레벨 메시지들이 기록되어질 것이다.

어떻든 crit 레벨을 이용하는것을 추천한다.

140. SystemLog

문법 : SystemLog filename|NONE

기본설정 : 기본 적용 안됨

사용범위 : server config

사용가능 버젼 : 1.1.6pl1 이후 버젼

SystemLog 지시자는 syslogd를 사용하여 proftpd의 log를 남기는 방법을 불가능하게 하며, 대신에 모든 log 출력을 지정한 file로 전송을 하여 기록을 한다. filename 인자는 절대 경로로 지정을 해야 한다. 이 지시자의 사용은 SyslogFacility에 의한 어떠한 facility 설정도 덮어 씌울수 있다.

게다가, NONE keyword를 지정하는 것으로 설정 전역에 있는 모든 syslog 형태의 log 설정을 사용하지 못하게 할수도 있다.

141. tcpBackLog

문법 : tcpBackLog backlog-size

기본설정 : tcpBackLog 5

사용범위 : server config

사용가능 버젼 : 0.99.0 이후 버젼

tcpBackLog 지시자는 standalone 모드(ServerType을 봐라)에서 귀기울이는 연결에 대해 tcp "backlog queue"를 제어한다. 이넘은 서버가 inetd 모드 일때는 전혀 효과가 없다. cp 연결이 커널 안쪽의 tcp/ip 스택에 의해 이루어졌을 때, 연결의 실질적인 성립과 사용자영역 프로그램에 의한 연결수락 사이에는 짧은 시간 간격이 있다. 이러한 지연간격의 변동은 매우 심하고, 수많은 요인(하드웨어, 시스템부하, 기타등등)들에 의존될 수 있다. 이 간격동안 아까는 "귀기울이던" 포트가 새로운 연결로 채워짐으로써 tcp 연결들이 수락되지 않을 수 있다. 엄청난 연결 부하에서는 요청을 다루기 위한 서비스가 가능할 때 조차도 "연결이 거부됨" 이라는 메세지가 접속자에게 돌아가는것이 때때로(심지어는 자주!) 일어날 수 있다. 이 문제를 없애기 위해서, 요즈음 거의 모든 tcp/ip 스택은 지연간격 동안 backlog-양 을 다루기 위해 필요한 자원을 간단하게 선점하는 "backlog queue"를 구현한다. backlog queue가 크면 클수록 더 많은 연결들이 매우 짧은 시간 간격동안에 성립될 수 있다. 물론 커널 메모리 그리고/또는 다른 커널 자원들과의 trade-off는 존재한다.

많은 수의 가상호스트(<VirtualHost>를 봐라)들을 서비스할 작정이 아니라면 일반적으로 tcpBackLog 지시자는 사용할 필요가 엄따. 원격 접속자들로부터 "연결이 거부됨" 메세지에 대한 소문이 들려오기 시작한다면, 이 지시자의 값을 조금만 높혀서 설정해보라.

142. tcpNoDelay

문법 : tcpNoDelay on|off

기본설정 : tcpNoDelay on

사용범위 : server config, <VirtualHost>, <Global>

사용가능 버젼 : 1.2.0pre3a 이후 버젼

tcpNoDelay 지시자(directive)는 TCP_NODELAY 소켓 옵션의 제어에 사용됩니다. ProFTPd는 TCP_NODELAY를 기본값으로 사용합니다. 일반적으로 TCP_NODELAY 사용이 이익이지만 일부 클라이언트에서는 문제를 일으키기 때문에 tcpNoDelay는 이 옵션(TCP_NODELAY)를 disable시킬 수 있는 방법을 제공해줍니다. 일반적으로 이 지시자를 사용할 필요는 없지만, 클라이언트의 접속이 예상외로 느린 경우에는 이 기능을 off 시키고 사용하기 바랍니다.

143. tcpReceiveWindow

문법 : tcpReceiveWindow window-size

기본설정 : tcpReceiveWindow 8192

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 0.99.0 이후 버젼

tcpReceiveWindow 지시자는 모든 데이타 연결들의 tcp 수신창들의 크기를 설정(octet으로) 한다 (역자 주- octet=byte라 보시면 편하겠습니다요). 이넘은 데이타 연결을 통해 접속자로부터 파일을 받을 경우에만 사용된다. 전통적으로, tcp/ip 도구는 상대적으로 작은 크기의 수신창("우회(turnaround)" 알리기가 요구되기전에 tcp층에서 받을 수 있는 octet들의 숫자)을 사용할 것이다. 상대적으로 높은 지연을 가지는 빠른 디지탈 전송 라인들을 통해 큰 용량의 데이터가 전송될 때, 작은 수신창은 극적일 정도로 인지율에 효과적이다. 왜냐하면 가끔 원격지 종단점이 알리기를 받고 전송을 계속하도록 대기시키기 위해서 완전히 그만두게 할 필요성 때문이다. 예를 들면, 100 ms 지연을 가지는 T1 회선(종단점-종단점 사이에 1.544Mbps인 최대비율이라 가정하자)에서는 4k 의 수신버퍼는 매우 극적으로 인지율을 감소시킬 것이다. 통상의 네트웍 설정에서는 8192 octet (8k)의 기본값이 합리적임에 틀림없다.

부가적으로, proftpd는 내부 버퍼를 receive/send 버퍼들을 창 크기들에 맞도록 할당한다; 수신/전송 성능(proftpd로 부터 커널의 tcp/ip 스택으로 전송되어야만 하는 데이터의 횟수를 감소시키기)을 최대화 시키기 위해. 물론, trade-off는 메모리다; 커널영역과 유저영역 양쪽에서. 만약 메모리 여유가 없는 기계(그리고 낮은 대역폭의 선로)에서 proftpd를 운영중이라면, tcpReceiveWindow와 tcpSendWindow 양쪽 다 크기를 줄이는 것이 바람직하다. (역자 주 - 커넥션 하나당 저만큼의 버퍼를 잡아 놓으니까요. 또 낮은 속도에서 버퍼만 크면 연락이 늦어지고 원격지에선 time-out이라고 끊어지니까요)

144. tcpSendWindow

문법 : tcpSendWindow window-size

기본설정 : tcpSendWindow 8192

사용범위 : server config, <VirtualHost>

사용가능 버젼 : 0.99.0 이후 버젼

tcpSendWindow 지시자는 tcp가 전송되는 대역으로 접속된 모든 data들의 크기를 설정한다. 이것은 data 연결이 되어 있는 서버에서 client로 file을 전송할때만 사용되어 진다. receive/send 대역 크기에 대한 자세한 설명을 보고 싶으면, tcpReceiveWindow 지시자를 참조하라.

145. TimeoutIdle

문법 : TimeoutIdle seconds

기본설정 : TimeoutIdle 600

사용범위 : server config

사용가능 버젼 : 0.99.0 이후 버젼

TimeoutIdle 지시자는 조정 또는 data connection에 해당하는 어떤 data를 받지 않고선 접속을 유지할수 있는 최대 시간을 초단위로 지정을 한다. 접속상태에서 data를 전송받으면, idle timer는 초기화가 된다. TimeoutIdle을 "0"으로 지정하면 idle timer는 무한대의 값을 갖는다. (즉 date의 전송없이 무한히 접속이 가능하다.) 이것은 일반적으로 원격 user가 정확히 접속을 끊었음에도 불구하고 child server가 수동으로 process를 죽이기 전까지 살아있을수 있기 때문에 별로 좋은 설정 방법은 아니다.

설정값은 0~65535 사이의 값을 지정할수 있다.

참조 : TimeoutLogin, TimeoutNoTransfer

146. TimeoutLogin

문법 : TimeoutLogin seconds

기본설정 : TimeoutLogin 300

사용범위 : server config

사용가능 버젼 : 0.99.0 이후 버젼

TimeoutLogin 지시자는 client가 인증을 유지할수 있는 시간을 초단위로 지정을 한다. login 시간은 clinet가 data를 전송한다고 해서 reset이 되지는 않으며, 오직 USER/PASS 명령을 사용하며 승인을 재전송할 경우에만 reset이 된다.

참조 : TimeoutIdle, TimeoutNoTransfer

147. TimeoutNoTransfer

문법 : TimeoutNoTransfer seconds

기본설정 : TimeoutNoTransfer 600

사용범위 : server config

사용가능 버젼 : 0.99.0 이후 버젼

TimeoutNoTransfer 지시자는 인증후에 활성화 되어 있거나 수동적인 data 접속을 생성하는 명령어가 없이 접속을 유지할 수 있는 최대 시간을 초단위로 설정을 한다. (예를 들어 파일을 보내고 받거나 또는 directory list를 받는 경우)

참조 : TimeoutIdle, TimeoutLogin

148. TimeoutStalled

문법 : TimeoutStalled seconds

기본설정 : TimeoutStalled 0

사용범위 : server config

사용가능 버젼 : 1.1.6 이후 버젼

TimeoutStalled 지시자는 proftpd server와 연결은 되어 있지만 실제로 data 전송이 지연되고 있는 상태에서 Server와 FTP client사이의 data connection이 유지될수있는 최대 시간을 초단위로 설정을 한다.

seconds 인자를 0으로 지정하면, data 전송은 무한정 지연을 하고 있는 것을 허락한다.(기본 설정이다)

149. TimesGMT

문법 : TimesGMT on|off

기본설정 : off (이전 버젼은 on)

사용범위 : server config

사용가능 버젼 : 1.2.0pre9 이후버젼

TimesGMT 옵션을 사용하면 서버는 현지시각이 아닌 GMT에 의거한 요일 정보(I)와 MDTM 명령으로 얻어내는 시간을 알려주게 된다.

(Is는 명확하지 않습니다. 쩝. 아마 수정이 필요할 듯)

150. TransferLog

문법 : TransferLog filename|NONE

기본설정 : TransferLog /var/log/xferlog

사용범위 : server config, <Anonymous>, <VirtualHost>, <Global>

사용가능 버젼 : 1.1.4 and later

TransferLog 지시자는 전송 log를 "wu-ftpd 형식"과 같이 절대 경로로 설정을 한다. 분리된 log file들은 각 익명 그리고/또는 VirtualHost들을 위해 생성이 되어 진다.

게다가, 특별한 인자인 "NONE"은 지시자가 사용되어 질때, 문맥 속에 wu-ftpd 형식의 전송 log가 남지 않게 하기 위하여 사용이 되어 진다. (1.1.7 이후 버젼에서 사용이 가능하다.)

참조 : ExtendedLog, LogFormat

151. Umask

문법 : Umask file octal-mask [directory octal-mask]

기본설정 : 기본 적용 안됨

사용범위 : server config, <Anonymous>, <VirtualHost>, <Directory>, <Global>, .ftpaccess

사용가능 버젼 : 0.99.0 이후 버젼

Umask는 주어진 컨텍스트에서 새로 만들어지는 파일과 디렉토리에 적용될 마스크를 지정합니다. 서버 설정상의 Umask가 기본값으로 적용되고, <VirtualHost> 또는 <Anonymous> 블럭이 사용되면 디렉토리 단위로 기본값을 무시하고 Umask를 설정할 수 있습니다. 인자는 0xxx와 같은 형식의 8진수 값으로 지정되어야합니다. 선택적인 두번째 인자는 디렉토리를 만들 때 사용할 Umask를 지정합니다. 두번째 인자가 지정되지 않은 경우에는 디렉토리는 첫번째 인자에 지정되어 있는 기본 Umask를 이용해서 만들어집니다. umask에 대한 좀 더 자세한 정보는 운영 시스템의 문서/man 페이지를 참조하시기 바랍니다.

152. UpTime

문법 : UpTime 시간 "메세지"

기본설정 : UpTime -1

사용범위 : <VirtualHost>, <Anonysmous>, <Global>

사용가능 버젼 : 1.2.0pre9 이후버젼에서 time-limit patch가 적용되어야 함

UpTime 지시자는 서버가 서비스를 시작할 시각을 24시간 단위로 설정한다. 이 지시자로 서비스 시작시각이 지정되면 그 시각 이전에는 해당(가상호스트,익명,계정) 접속자는 서비스를 이용할 수 없다. 로긴메세지 화일에서 %B 라 써주면 설정한 시작 시각이 표시된다. UpTime을 지정하지 않을 경우에는 UpTime은 자동으로 0시를 기준으로 한다.

"메세지"는 로그인이 거부될 경우 여기서 지정한 메세지를 출력을 한다.

자세한 내용은 http://proftpd.cbgate.com/ 을 참조하라.

참조 : DownTime

153. UseFtpUsers

문법 : UseFtpUsers on|off

기본설정 : UseFtpUsers on

사용범위 : server config, <Anonymous>, <VirtualHost>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

과거의 FTP server들은 일반적으로 클라이언트가 인증을 시도할 때 /etc/ftpusers와 같은 특정한 인증 file을 검사한다. username이 이 파일에 존재를 하면 FTP 접근이 거부된다. 호환성을 위하여, proftpd는 인증을 시도하는 동안 이 파일을 체크하는 것을 기본으로 한다. 이러한 행동들은 UseFtpUsers 설정 지시자를 이용하여 억제할수 있다.

154. UseHostsAllowFile

문법 : UseHostsAllowFile 파일이름

기본설정 : /etc/hosts.allow

사용범위 : server, <Anonymous>, <VirtualHost>

사용가능 버젼 : 1.2.0 이후 버젼과 mod_wrap 모듈 요구됨

UseHostsAllowFile 은 hosts.allow와 hosts.deny 파일과 동일한 형식으로 서버에 접속을 허락할 IP address, 네트웍, 또는 이름 기반의 mask를 지정한다.

예 :

UseHostsAllowFile /etc/ftpd.allow

참조 : UseHostsDenyFile

155. UseHostsDenyFile

문법 : UseHostsDenyFile 파일이름

기본설정 : /etc/hosts.deny

사용범위 : server, <Anonymous>, <VirtualHost>

사용가능 버젼 : 1.2.0 이후버젼과 mod_wrap 모듈 요구됨

IP address 기반의 보안을 휘한 deny file을 지정한다. 이는 hosts.deny와 동일한 형식을 취한다. UseHostsDenyFile 을 참조하라.

예 :

UseHostsDenyFile /etc/ftpd.deny

참조 : UseHostsAllowFile

156. User

문법 : User userid

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

User 지시자는 proftpd 데몬을 실행시키는 사용자를 설정한다. 기본값으로 proftpd 는 root 로 실행되는데, 이것은 신뢰성있는 네트워크 환경을 위해서는 좋치 않다.

User 지시자는 Group 지시자와 함께 사용되며, 시작시 가능한 빨리 사용자와 그룹을 설정할수 있도록 지시하도록 한다. unix 환경에서, 데몬은 종종 super-user 제어를 요구하는 작업을 수행하기 위해 root 권한을 얻을려고 한다.

일단 작업이 완료되면, root 권한은 넘겨주고, 특정사용자와 그룹으로 계속 실행되어야 한다.

<VirtualServer> 블럭에 적용되면, proftpd 는 가상 서버의 주소와 포트에 특정 사용자/그룹으로 실행될 것이다.

User 와 Group 지시자가 <Anonymous> 블락에 적용되면, proftpd 는 특정 userid 와 함께 로그인을 시도할 때, anonymous 로그인으로 생성된다.

마찬가지로, anonymous 블락에 User/Group 인자가 로그인후 있으면, 적용되는 uid/gid 로 변환시킨다.

[주의]

unix 의 인증된 사용자가 인증된후, 로그인을 하면 위의 모든 특권은 해제되고, 데몬은 항상 로그인된 uid/gid 로 사용된다. 그리고 root 나 다른 user/group 사용자로 변환될수 없다.

157. UserAlias

문법 : UserAlias login-user userid

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0 이후 버젼

UserAlias 지시자는 client에 의해 사용되어질 가상의 login name을 system의 실제 userid 에 매핑하여 login인을 할수 있게끔 설정을 한다. user가 alias로서 로그인을 한다면, 인증은 user들이 서버상의 실제 user로 로그인을 하는 것과 같이 작동을 한다. 이 지시자는 <Anonymous> 블럭안에서 중복된 anonymous login을 허락하기 위해 자주 사용이 되어 진다.

[주의]

login-user 매개변수가 real system의 userid와 동일할 경우 real userid는 proftpd에 의해 인식되어 지지 않는다.

158. UserDirRoot

문법 : UserDirRoot on|off

기본설정 : off

사용범위 : <Anonymous>

사용가능 버젼 : 1.2.0pre2 이후 버젼

트루로 설정되면 chroot 기본 디렉토리는 현재 사용자의 사용자 이름을 기반으로해서 anonymous ftp 디렉토리의 서브디렉토리가됩니다. 예를 들어 foo 사용자가 ftp로 알리아스되어 있고 foo로 로긴하면 proftpd는 실제 사용자 ftp로 수행되지만 shroot는 ~ftp 대신 ~ftp/foo가됩니다.

159. UseReverseDNS

문법 : UseReverseDNS on|off

기본설정 : UseReverseDNS on

사용범위 : server config

사용가능 버젼 : 1.1.7 이후 버젼

일반적으로 인터밍 액티브 모드 데이터 커넥션과 아웃고잉 패시브 모드 데이타커넥션은 원격 호스트의 IP 주소에 대해서 역 DNS 룩업을 수행합니다. chroot 환경(<Anonymous> 또는 DefaultRoot와 같은)에서는 /etc/hosts 파일은 검사할 수 없고 오직 DNS를 통해서만 리졸루션(resolution)할 수 있습니다. 만약 어떤 이유로 DNS를 사용할 수 없거나 잘못 설정되어 있다면 libc 리졸버(resolver) 코드 타임 아웃이 발생할 때 까지 proftpd는 블럭킹(스톨링) 상태가됩니다.

이 설정자(directive)를 이용해서 접속한 IP 주소에 대한 리버스룩업 시도를 막을 수 있습니다.

160. UserOwner

문법 : UserOwner username

기본설정 : 적용안됨

사용범위 : <Anonymous>, <Directory>

사용가능 버젼 : 1.2.0rc1 이후 버젼

UserOwner 설정자는, 이 설정자가 적용되는 내용의 범위 안에서, 새로 생성된 모든 디렉토리와 파일의 소유자가 되는 사용자를 설정하는데 사용된다. 사용자의 ID값이 0(root를 의미)가 될 수는 없다. UserOwner가 사용될때, GroupOwner 생성자는 현재 사용자가 속한 그룹으로만 설정이 가능하도록 제한받지는 않는다.

161. UserPassword

문법 : UserPassword userid hashed-password

기본설정 : 기본 적용 안됨

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 0.99.0pl5 이후 버젼

UserPassword 설정자(directive)는 /etc/passwd(또는 /etc/shadow)의 일반 암호를 무시하고 특정 사용자의 암호를 따로 만들어줍니다. 이것(암호 무시하는 것)은 UserPassword가 적용된 컨텍스트내에서만 효과를 갖습니다. 해쉬된암호 인자는 표준 유닉스 crypt() 함수를 통과한 cleartext 문자열 이어야합니다. 절대로 그냥 cleartext 암호를 사용하면 안됩니다.

이것은 Anonymous FTP 사이트에 다중 로긴을 제공하기 위해서 UserAlias와 함께 사용할 경우에 유용합니다.

참조 : GroupPassword

162. WtmpLog

문법 : WtmpLog on|off|NONE

기본설정 : WtmpLog on

사용범위 : server config, <VirtualHost>, <Anonymous>, <Global>

사용가능 버젼 : 1.1.7 이후 버젼

WtmpLog 지시자는 last명령이 불러들이는 host system의 wtmp file에 ftp 접속들에 대한 proftpd의 log를 기록한다. 기본적으로 모든 접속들은 wtmp를 통하여 log된다

------------------------------

이상의 지시자들은 여러 사람들에 의해 번역되었다.

김정균, 구익환, 기쁜인연, percept, 최선곤, 이성준, 박진철 님 등이 번역하였고, 위의 싸이트를 참고하여 정리하였다.

위의 지시자중 몇가지 사용 예를 통해 일부 지시자에 대해 알아보도록 하겠다. 사용자의 비율제한, 익명의 FTP 그리고, 가상서버에 대한 것이다. 우선, 사용자의 비율 제한에 대해 알아보면, 이는 사용자의 업로드와 다운로드의 비율을 제한하는 것이다. 이를 위해선 proftpd의 컴파일시에 mod_ratio.c 파일이 모듈 디렉토리에 있어야 하며, ./configure --with-modules=mod_ratio 라고 해야 한다.

# ./configure --with-modules=mod_ratio

배포판 패키지로 제공되는 것은 이 모듈이 기본으로 포함돼 있다.

비율 설정을 이용하려면, proftpd.conf에서 비율설정을 활성화시켜야 하고, 사용자, 호스트, 그룹, 그리고 익명에 따라 그 비율을 설정할 수 있다. 이와 관련된 지시자는 다음과 같다.

- Ratio [on/off]

- UserRatio 사용자 ID 파일개수비율 처음 제공되는 파일개수 바이트비율 처음제공되는바이트

- HostRatio 호스트도메인 [UserRatio와 동일]

- GroupRatio 그룹 [UserRatio 와 동일]

- AnonRatio 로긴암호이메일주소 [UserRatio 와 동일]

예를 들어 다음과 같이 설정되어 있다면,

Ratio on

UserRatio ftp 0 0 0 0

AnonRatio jklee$leelab.co.kr 1 0 1 0

UserRatio * 3 3 3 30000

ftp 사용자는 비율둁 대한 제한이 없으며(비율에서 0은 제한이 없다는 의미), 익명으로 접속한 이중 암호로 jklee@leelab.co.kr로 입력한 사람은 1:1로 파일 개수 비율 제한을 받고, 초기엔 받을 수 있는 파일이 없으며, 1:1의 파일 크기 비율 제한을 받는다. 마지막으로 초기엔 1바이트의 파일도 받을 수 없다. 그 외 접속자에 대해서는 3:1의 비율로 파일개수 제한을 받는다. 초기엔 3개 까지 파일을 받을 수 있으며, 3:1의 파일 크기 비율을 받는다. 마지막으로 초기에 3만 바이트까지 받을 수 있다.

두 번째로 익명 접속에 대한 것인데, proftpd.conf를 보면 익명을 위한 지시자가 포함되어 있다. 그런데 이들 지시자가 주석처리가 되어 있다. 바로 <Anonymous ~ftp> </Anonymous>가 바로 그 지시자이며, 그 사이에 있는 지시자들이 익명 접속을 위한 것들이다. 이들 주석을 제거하는 것만으로도 익명을 위한 FTP를 만들 수 있을 것이다.

<Anonymous ~ftp>에서 ~ftp은 ftp 사용자 계정의 홈디렉토리를 의미하는데, 만약 특정 디렉토리를 익명의 접속을 위해 지정하고 싶다면, ~ftp 대신에 원하는 디렉토리 경로를 지정하면 된다. 여기선 ~ftp와 같이 상대적인 홈디렉토리 경로를 지정해두었지만, 이런 상대적인 경로보다는 절대 경로로 지정하는 것이 보안상 바람직하다. 즉, /home/ftp와 같이 완전 경로를 지정해주는 것이 좋다.

마지막으로 가상 호스트에 대한 것이다. 가상 호스트를 위한 지시자는 <VirtualHost 도메인>과 </Virtual>이다. 이 두 지시자 사이에 가상호스트를 위한 지시자를 넣으면 된다. 사실상 이 두 지시자 사이에 또 다른 proftpd를 설정했다고 생각하고, 지시자를 사용하면 된다.

3.6.7. 정리

ProFTPd의 설정은 아파치의 설정과 비슷한 점이 있다. 아파치의 디렉토리 지시자들과 유사하게 ProFTPd의 지시자에서도 <Limit>와 같은 지시자를 제공하고 있다. 이를 통해 각 디렉토리별로 그 권한을 제한할 수 있다. 설정에 관한 것은 앞서 소개한 홈페이지를 통해 충분히 습득할 수 있으리라 생각한다. 그 외, 접속할 때 보여주는 welcome.msg 또는 .message에서 매직 쿠키라는 것을 이용해서 출력되는 메시지에 현재 FTP의 정보를 사용자에게 동적으로 알려줄 수도 있다.

여러분이 리눅스 서버를 운영한다면, 어떤 의미에서는 부지런해야 한다. 여러분도 알다시피 리눅스는 빠르게 변화하고 있으며, 언제 어느 패키지에서 새로운 보안 버그가 보고될지 모르기 때문이다. 항상 관련 정보에 귀를 기울이길 바란다.


[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.