사이트 내 전체검색
[linux] PorFTPd의 ID 공유 금지 및 MaxHostsPerUser,MaxClientsPerHost, MaxClientsPerUser
로빈아빠
https://cmd.kr/server/349 URL이 복사되었습니다.

본문

PorFTPd의 ID 공유 금지 및  MaxHostsPerUser,MaxClientsPerHost, MaxClientsPerUser

- 작성자 : 산이 san2(at)linuxchannel.net
--- 질문 내용 -----------------------------------------------
> ProFTPd 에서
> 하나의 계정으로 여러사람이 사용 할수 없도록 하고 싶습니다.
--- 이하 답변 내용 -------------------------------------------

[References]
  http://www.proftpd.org/docs/directives/linked/by-name.html
  or
  http://proftpd.oops.org/reference.php?class=m

[관련 지시자]
  MaxClients -- Limits the number of users that can connect
  MaxClientsPerHost -- Limits the connections per client machine
  MaxClientsPerUser -- Limit the number of connections per userid
  MaxHostsPerUser -- Limit the number of connections per userid
  MaxInstances -- Sets the maximum number of child processes to be spawned

먼저 결론부터 말하자면, 1.2.4 이상 버전을 사용한다면
<Global> ... MaxHostsPerUser 1 "Sorry, the maximum number of hosts (%m) for this user." ... </Global> ... <Anonymous ~ftp> ... MaxClients 30 MaxHostsPerUser 30 "Sorry, (maximum %m hosts)/(user)" MaxClientsPerHost 1 "Sorry, (maximum %m clients/host)" ... </Anonymous>

이렇게 설정합니다.

- MaxHostsPerUser
- MaxClientsPerUser

이 두개의 지시자는 상당히 유사하지만 약간 틀립니다.
(ProFTPd 지시자는 그 외에도 몇개가 서로 비슷한 기능을 하는 경우가 있습니다... T.T)

MaxClientPerUser 지시자는 mod_auth 모듈에 의해서 1.2.7RC1 이상부터 지원합니다.

우선 이들의 차이점을 이해하기 위해서는 ProFTPd 의 설정파일에서는,

- Users
- Hosts
- Clients
- Instances

등의 개념을 파악해야 합니다.

Users
  는 ProFTPd 서버의 anonymous 를 포함하여 일반 계정을 의미합니다.

Hosts
  는 한대의 클라이언트 컴퓨터(호스트)라고 생각하면 됩니다.

Clients
  는 ProFTPd 서버에 접속한 모든 Users 에 대해서 맺여진 세션을 의미합니다. 즉 anonymous를 포함하여 ProFTPd 서버에 인증을 통하여 세션이 맺어진 하나의 자식 프로세스를 의미합니다('로그인 수'를 의미). 따라서,하나의 Host 에서 2개 이상의 Clients 가 있을 수 있고, 또한 같거나 서로 다른 User에 대해서 여러개의 Clients 가 있을 수 있습니다.

Instances
  는 ProFTPd 모든 자식 프로세를 의미하는데 이 수는 인증 대기 상태에서도 자식 프로세스가 생성됩니다. 이 때의 자식 프로세는 Clients로 계산하지 않습니다.

따라서
'Clients' 라고 하면 보통 하나의 '클라이언트 컴퓨터'를 의미하지만 ProFTPd 설정파일에서는 인증을 통하여 '세션이 맺어진 자식 프로세스'를 의미합니다.

예)
[Hosts] [Clients] [user@server] Host A Client 1(192.168.10.111:2550) <--------> user1@192.168.10.7:21 Host A Client 2(192.168.10.111:2551) <--------> user1@192.168.10.7:21 Host A Client 3(192.168.10.111:2552) <--------> user1@192.168.10.7:21 Host A Client 4(192.168.10.111:2553) <--------> user2@192.168.10.7:21 Host B Client 5(192.168.10.222:3000) <--------> user1@192.168.10.7:21 Host B Client 6(192.168.10.222:3001) <--------> user2@192.168.10.7:21 Host B Client 7(192.168.10.222:3002) <--------> user2@192.168.10.7:21 Host C Client 8(192.168.10.123:2802) <--------> user3@192.168.10.7:21 Host D Client 9(192.168.10.124:4000) <--------> user4@192.168.10.7:21 Host D Client10(192.168.10.124:4001) <--------> user1@192.168.10.7:21

이와 같은 경우는 4개의 Hosts 에 대해서 총 10개의 Clients가 맺여진 상태입니다.
Users 수는 10개가 아닌 4명(user1, user2, user3, user4)의 User로 계산됩니다.

그렇다면,

  - MaxHostsPerUser
  - MaxClientsPerUser

이 두개의 차이점에 대해서 조금 이해할 수 있겠죠.

즉 하나의 User 에 대해서 제한할 그 대상이 Hosts 이냐 아니면 세션이 맺여질 Clients 수 이냐에 대한 차이점입니다.

앞에서, 질문에 대한 답변으로 MaxClientsPerUser 가 아닌 MaxHostsPerUser 로 설정했는데 그 이유는 User에 대한 제한 대상이 Clients가 아닌 호스트 컴퓨터, 즉 Hosts 이기 때문입니다.

물론 1.2.7rc1 이상 버전을 사용하고 MaxClientsPerUser 1 과 같이 설정하면, 하나의 User에 대해서 하나의 Clients 만, 즉 결과적으로 하나의 User에 대해서 하나의 Host만 제한 결과가 되므로 동일한 결과를 얻을 수있습니다.

[부연 설명]
  MaxHostsPerUser 1
이 설정 내용은 하나의 User에 대해서 오직 하나의 Host에서 만 접속 가능 하도록 제한합니다(ID 공유 금지 설정).

바꾸어 설명하면, 이 설정은, Clients 에 대한 제한 설정이 아니기 때문에 하나의 Host에서는 동일한 하나의 User에 대해서 여러 개의 Clients 를 가질 수 있습니다.(하나의 컴퓨터에서 여러개의 창을 열어서 하나의 User로 여러번 접속 가능)

만약 이 설정에서 좀더 제한적으로 하나의 Host 에서 하나의 Clients 만 가질 수 이도록 하려면 MaxClientsPerHost 지시자를 1 로 추가 설정하면 됩니다.

만약,
  MaxHostsPerUser 2
와 같은 설정은, 하나의 User에 대해서 최대 2개의 Hosts가 제한되므로,
[Hosts] [Clients] [user@server] Host A Client 1(192.168.10.111:2550) <--------> user1@192.168.10.7:21 Host A Client 2(192.168.10.111:2551) <--------> user1@192.168.10.7:21 Host A Client 3(192.168.10.111:2552) <--------> user1@192.168.10.7:21 Host B Client 4(192.168.10.222:3000) <--------> user1@192.168.10.7:21

이와 같은 결과가 됩니다(Clients 수에 상관없음).

반면,
MaxClientsPerUser 지시자는 ProFTPd 버전 1.2.7RC1 이상에서 추가되었으므로 그 이하 버전에서는 사용할 수 없습니다.
하나의 User에 대해서 Hosts 에 대한 제한 설정이 아닌 Clients 에 대한 제한 설정입니다.

  MaxClientsPerUser 1
이 설정은
하나의 User에 대해서 최대 1개의 Client 으로 제한하므로, 결국 하나의 User에 대해서는 오직 1개의 Host 로 제한하는 결과와 동일합니다.
그러나 특정 Host 입장에서 보면 Clients 수 제한 설정이 아니므로 특정 Host A에서는 다른 User 로 여러 개의 Clients 를 가질 수 있습니다.
그 결과는 다음과 같습니다.
[Hosts] [Clients] [user@server] Host A Client 1(192.168.10.111:2550) <--------> user1@192.168.10.7:21 Host A Client 2(192.168.10.111:2551) ---deny--> user1@192.168.10.7:21 Host A Client 3(192.168.10.111:2552) ---ok----> user2@192.168.10.7:21 Host A Client 4(192.168.10.111:2553) ---ok----> user3@192.168.10.7:21

또 한가지 주의할 점은

  MaxClientsPerUser 1


  MaxHostsPerUser  1
  MaxClientsPerHost 1
과 그 의도는 일맥상통하지만 전적으로 그 결과는 동일하지는 않습니다.즉 전자와 후자 모두 하나의 User 차원에는 오직 하나의 Host 에서 만 접속 가능하지만, Host 차원에서 비교하면, 전자의 경우는 다른 User로 여러개의 Clients 를 가질 수 있지만 후자는 오직 한개의 User와 한개의Client 만 가질 수 있는 차이점이 있습니다.

하나 더 예를 들자면,

  MaxClientsPerUser 2
이 설정은 하나의 User 당 최대 2개의 Clients 가 제한되므로,
[Hosts] [Clients] [user@server] Host A Client 1(192.168.10.111:2550) <--------> user1@192.168.10.7:21 Host A Client 2(192.168.10.111:2551) <--------> user1@192.168.10.7:21

또는
[Hosts] [Clients] [user@server] Host A Client 1(192.168.10.111:2550) <--------> user1@192.168.10.7:21 Host B Client 2(192.168.10.222:3000) <--------> user1@192.168.10.7:21

이와 같이 Clients 수에 대한 제한이지 Hosts 수에 대한 제한은 아닙니다.
하나의 User에 대해서 Hosts 수를 제한하려면 MaxHostsPerUser 지시자를 따로 설정해야 합니다.


[권장 설정 방향]
보통 보안상의 이유로 anonymous 계정을 제외한 나머지 일반 계정은, 서로 다른 Host 컴퓨터에서 같은 계정으로 동시에 접속하는 경우(하나의 계정 공유)는 매우 위험하므로 하나의 User에 대해서는 오직 하나의 Host에서 만 접속하도록 다음과 같이 설정하는 것이 좋습니다.

  MaxHostsPerUser 1 "Sorry, (maximum %m hosts)/(user) : this user already connected."

그러나 이 설정은 하나의 Host 에서 접속 수 제한(Clients)이 없으므로 같은 User 로 여러 번 접속할 수 있다는 단점이 있습니다.

따라서,
하나의 Host 에서 너무 많은 접속(세션)을 이루어 서버에 과부하를 가져올 수 도 있으므로 하나의 Host 에서도 다음과 같이 적절한 Clients 제한 수를 설정하는 것이 좋습니다.

  MaxClientsPerHost 2 "Sorry, (maximum %m clients/host) : are already connected."

이 두개의 설정을 종합해보면 하나의 User는 즉 오직 하나의 Host에서 최대 두번까지 접속할 수 있는 설정입니다.

좀더 공식화(?) 한다면,

* 하나의 User는 n 개의 Hosts에서 최대 i 번까지 접속(Clients)을 제한함 ^^^^|^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `-- MaxHostsPerUser n | ^^^|^^^ `-- MaxClientsPerHost i | ^^^^^|^^^^ `-- MaxClientsPerUser z --'

  (z의 값은 하나의 User 당 최대 접속 세션수, 로그인 수)

이와 같습니다.

그런데 n=1 이고, i=1 이면, z의 값은 당연히 1이 되어, 오직 하나의 User는 오직 하나의 호스트에서 오직 한번만 접속가능하도록 하는 매우 제한적인 설정입니다. 즉 하나의 호스트에서는 이미 한번 접속하면 동시에 같은 User나 다른 User로 접속할 수 없어 약간 불편한 감이 없지 않아 있습니다.

보통 아주 바쁜 FTPd 서버가 아니면 일반적으로 MaxClientsPerHost 는 2 정도로 설정하여 운영하는 것이 보통입니다.

그런데,
n=1, i=1 또는 n=1, i=2 와 같은 매우 제한적이거나 또는 비교적 제한적인 설정인 경우는 큰 문제가 없는데, 서버의 입장에서 보면 하나의 User에 대해서는 최대 (n * i) 번의 Clients 를 허용하는 셈이 됩니다.

즉,

  MaxClientsPerUser(z)  = MaxHostsPerUser(n) * MaxClientsPerHost(i)

이와 같은 새로운 공식(?)이 성립됩니다.

바꾸어 말하면,
n=1 이라도 하나의 User는 최대 i 의 수 만큼 Clients 를 가질 수 있다는 의미가 됩니다. 또한 i의 MaxClientsPerHost 지시자를 설정하지 않으면 특정 Host 에서는 사실상 하나의 User는 그 접속 제한(Clients)이 없다는 결과를 초래합니다.

이 단점을 보완하기 위해서 ProFTPd 1.2.7RC1 버전부터는 MaxClientsPerUser 라는 지시자가 추가된것 같습니다(추측)

따라서 1.2.7RC1 이상 버전을 사용한다면 다음과 같이 설정하는 것이 좋습니다.

  MaxClientsPerUser(z)  <= MaxHostsPerUser(n) * MaxClientsPerHost(i)

[권장 설정]
<Global> ... MaxHostsPerUser 1 "Sorry, (maximum %m hosts)/(user)" MaxClientsPerHost 2 "Sorry, (maximum %m clients/host)" MaxClientsPerUser 2 "Sorry, (maximum %m clients/user)" ## 1.2.7RC1 ... </Global> <Anonymous ~ftp> ... MaxClients 30 ## MaxClientsPerUser 와 동일함 MaxHostsPerUser 30 ## MaxClients 와 같거나 작게 MaxClientsPerHost 1 ## 1 또는 2 정도로 설정 MaxClientsPerUser 30 ## MaxClients와 결과적으로 동일 ... </Anonymous>

[정리]
- MaxClients        : 세션이 맺어진 최대 자식 프로세스 수 제한
- MaxClientsPerHost : 하나의 Host 에서 최대 Clients 수 제한(접속 제한 수)
- MaxClientsPerUser : 하나의 User 에서 최대 Clients 수 제한(접속 제한 수)
- MaxHostsPerUser  : 하나의 User 에서 최대 Hosts(하나의 컴퓨터) 수 제한

EOF

댓글목록

등록된 댓글이 없습니다.

1,139 (12/23P)

Search

Copyright © Cmd 명령어 3.17.76.174