linux

Total 136
Today 0
profile_image
운영자
01-05-14 10:35 0개 2,752회
Proftpd 옵션 설정에서 승리하기
############################################

# 작성자 : 지현명

# 작성일자 : 2001년 5월 13일

# 문서제목 : Proftpd 옵션 설정에서 승리하기

# E-mail : gwise@linux.co.kr

# Home-P : http://www.wiselinuxer.org

############################################

# 새로운 버전으로 컴파일 하실때 기존에

# rpm 버전 삭제 하지 마세요.

# rpm 버전 삭제 하시면 Pam 모듈에 관한 설정을

# 다시 해 주셔야 합니다.

# 혹시 지우셨다하더라고 다시 RPM 설치 하시지 말고

# 김정규님 홈페이지에 가면 글 올려 놓은거 참고 하세요.

# 증상은 데몬은 뜨지만 접속이 안될 겁니다.

# 컴파일 하고 나서 /etc/rc.d/init.d/proftpd 을 열어서

# 실행 데몬 화일의 위치를 바꿔 주세요.

# 귀찮게 rc.local에다 적어 주는 것보다.

# ntsysv를 써먹을수 있으니까요..



ServerName "WiseLinuxer FTP Server."

ServerType standalone

DefaultServer on

ServerAdmin gwise@linux.co.kr

DefaultRoot ~

RootLogin off

Port 21

Umask 022

# 최대값은 65535 초이며 1약 18시간이다.

TimeoutIdle 600

TimeoutNoTransfer 600

TimeoutLogin 10

MaxLoginAttempts 2

DeferWelcome on

UseReverseDNS off

IdentLookups off

# 메뉴얼 상에는 절대 경로도 된다고 했는데 저는 안되네요

# /etc/skel/welcome.mgs 화일을 만들어서 새로운 계정 생성하면

# 들어가게 해 주면 됩니다.

# 그냥 welcome.msg을 적어주면 /home/gwise/welcome.msg 여기에 위치 시킵니다.

# 소유자와 그룹을 루트로 해두세요.



DisplayConnect /usr/local/proftp/etc/connect

DisplayQuit /usr/local/proftp/etc/quit

DisplayLogin

welcome.msg

DisplayFirstChdir .message

AccessGrantMsg "어서오세요. %u님"



MaxInstances 30

# 일반 유저들의 접속을 허용하지 않는다면 DenyAll



allowAll



# 일반 유저들은 쉘을 가지고 있습니다.

RequireValidShell on

User nobody

Group nobody



AllowOverwrite off

HideUser root

HideGroup root



# 일반 유저용

MaxClientsPerHost 1 "죄송합니다. 이미 하나의 클라이언트에서 접속하셨습니다."

# 일반 유저를 위한 서버 개방 시간 및 다운시간

# 오후 3시 부터 ~ 오후 7시 까지만 서버를 일반 계정 사용자에게 열어 놓음.

UpTime 15

DownTime 19

#################################################Anonymous

# Anonymous 부분에서 안되는거 몇가지

#

#TimeoutIdle 600

#TimeoutNoTransfer 600

# 일반 유저와 익명사용자의 Timeout 시간을 달리 설정 하려 했으나

# 데몬을 구동 시켜면 에러가 납니다.

# Anonymous 부분에서는 쓸수가 없다네요.

# 김정균님에게 질문 해 보겠습니다.



AccessGrantMsg "당신은 %u 계정을 통하여 들어 오셨습니다."



AllowAll





User ftp

Group ftp

# /etc/passwd 에서 ftp 유저는 쉘이 없지요. 그러니

# /etc/shell과 /etc/passwd에 ftp유저의 쉘을 비교할 필요가 없습니다.

RequireValidShell off

ShowSymlinks off

UserAlias anonymous ftp

# 여기에서의 MaxClients는 ftp나 anonymous 유저로의 접속을 전제로 합니다.

MaxClients 7 "죄송합니다. 이 서버의 최대 접속자수는 %m 명 입니

다. --Try again later"

HideUser root

HideGroup root

# 익명 사용자를 위한 서버 개방시간 및 다운 시간

# 오후 3시 부터 ~ 오후 6시 까지만 서버를 익명 사용자를 위해 열어 놓은

UpTime 15

DownTime 18



# Limit the Bandwidth to "$SPEED" Kbps

# Bandwidth 256

DisplayLogin welcome.msg

DisplayFirstChdir .message

# 익명접속자용

MaxClientsPerHost 1 "죄송합니다. 이미 하나의 클라이언트에서 접속하셨습니다."

# 이하의 모든 디렉토리에서 쓰기 금지를 디폴트로 한다.

# READ는 디폴트이다.



DenyAll



# 세부 세팅에 들어 가기에 앞서

# 업로드 허용은 WRITE 보다 STOR을...

# 다운로드 허용은 READ 보다 RETR을....적용해 주세요.

# 업로드 거부시에는 STOR WRITE 둘다 DenyAll

# 다운로드 거부시에는 RETR READ 둘다 DenyAll ...적용해 줍니다.

# 이거만 기억하셔도 Proftp 접근 디렉토리 설정의 반의 성공....

# 아~~ 그리고 Write옵션을 허락해도 위에서 디폴트로 Write 를 거부 해놨기 때문에

# Mkdir 명령어가 먹지 않습니다. 만약 바로 위에 있는 3줄을 지우고 limit 에서 Write를

# 허용한다면 Mkdir명령은 자동으로 먹습니다.(지금 두가 경우 test해 봤습니다.)

# 결론은 위에 3줄을 적용시키고 아래에서 디렉토리 생성할때는 MKD 옵션을 주셔야 합니

다.

# 옵션 줄때 소문자 보다 대문자를 적어주세요. 가끔 소문자로 옵션 주면 잘 안 먹네요..

# WRITE READ MKD RETR STOR ........대문자로....꼭....

# 업로드 전용 폴더 설정

# MKD에 의해서 폴더를 생성할 수 있다.

# 임의에 의해서 폴더를 생성한 다음 MKD 옵션을 삭제 할 수도 있음.

# 단순히 업로드만 한다면 write보다는 STOR옵션을 준다.(더 제한을 가할 수 있다.)





DenyALL





AllowALL





#다운로드 전용 폴더 설정

# 단순한 다운로드 전용 폴더는 READ보다는 RETR옵션을 준다.(더 제한을 가할 수 있다.)





DenyALL





AllowALL





# 업로드/다운로드 겸용 폴더(한번 업로드한 화일은 덮어쓰기나 삭제 할 수 없음. 위를 보세



# 오버라이드 금지 시켜 놨습니다.)

# 더 많은 제한을 가하기 위해서 READ/WRITE 보다 STOR/RETR을 사용한다.





AllowALL









# 이 설정 부분에 주의 해 주세요.

# 일단 O/S 상에 useradd 명령어로 guest 사용자가 생성이 되어야 합니다.

# 화일 업로드/다운로드 디렉토리 삭제 및 생성 권한을 주었습니다.

# READ 와 WRITE는 특별한 경우를 제외하고는 단순히 화일 업로드/다운로드 할때는

# 권한을 안주는 것이 좋습니다.

# 화일이 잘못 되었을 경우 덮어쓰기보다는 삭제하고 지우는 것이 좋겠죠.



User guest

Group guest

AnonRequirePassword on

# guest 유저의 텔넷 접근을 막아야 하니까

# /etc/passwd 의 guest 쉘을 /bin/false로 한다.

# 그리고 /etc/shells 에 /bin/false을 추가 해준다.

# 개념상 위에 작업을 하지 않고 아래에 off만 해줘도

# 비교 작업을 수행하지 않기때문에 가능하지만

# 실제 작업을 해보니 되지 않았습니다.

# 아래 것을 on/off 든 위에 작업을 해주면

# 텔넷을 접근 안되고 ftp 만 접근이 됩니다.

RequireValidShell on

DisplayLogin welcome.msg

AllowOverwrite off

HideUser root

HideGroup root





AllowAll





AllowALL







#<<<<<<<<<<<<<<<<< RequireValidShell 에 대한 김정균님과의 나의 다른 생각

>>>>>>>>>>>>>

#김정균님의 번역한 것을 보자.

#첫번째, Anonymous user가 ftp로 접근하여 shell의 권한을 얻는 것을 방지한다.

#두번째, RequireValidShell 지시자는 /etc/shells 에 없는 shell binary로 로그인하는 것을 허

락하거나 거절하는 것에

#대하여 , server, virtual host, anonymous login 을 설정한다. 기본적으로 proftpd 는

/etc/shells에 user들의

#기본 shell이 없으면 login을 허락하지 않는다. /etc/shells가 없다면 모든 shell들을 유효한

것으로 취급한다.

#

#자 ...읽어 보니시 어떻습니까...한국말인데도 어렵죠...^^

#첫번째것은 김정균님의 개인적인 생각을 적은거 같고 두번째는 원본에 있는 것을 번역한

듯 싶습니다.

#

#그럼 가상 상황을 한번 적용해 보죠.

#위를 보세요 guest/pds 를 인용하겠습니다.

#"텔넷을 허용하지 않고 ftp만을 허용하고 싶다."

#이 질문에 대해서 "리눅스 6.2 그대로 따라하기"의 저자는 TCP랩퍼를 이용해야 한다고 했

습니다.

#그러나 근본 해결책이 아니라 비껴가는 냄새가 나죠....^^

#

#위에 번역대로라면 /etc/passwd 에 guest 의 쉘을 /bin/false로 해주고

#RequireValidShell off 로 해준다면 (현재는 /etc/shellsdp /bin/false는 없다.)

#정상적으로 로그인이 되어야 합니다.

#그러나 접속은 되지 않습니다. on으로 하면 당근 안되는 거구요..

#그럼 이번에는 /etc/shelss 에 /bin/false(guest의 쉘)을 추가 해보고

#RequireValidShell off/on 두가지 경우를 다 적용해 보죠

#

# 이런 두 가지 경우 전부 접속이 되네요.....

#

# 그렇다면 RequireValidShell 이 도대체 뭘 뜻하는 걸가요?

#

# 요구+정당한+쉘 .......... 당신이 쓰는 쉘이 정당한가?

#

# 당신이 쓰고 있는 쉘(/etc/passwd)이 /etc/shells 에 있냐?

# 만약 on 이면 두개 비교 해서 클라이언트가 쓰고 있는 쉘이 /etc/shells 목록에 없

다면

# 너의 접근을 허락하지 않겠다.

#

# 만약 off 이면 클라이언트가 쓰고 있는 쉘이 /etc/shells의 목록 에 있든 없든

# 체크 하지 않고 접속을 허락한다.

#

# 이 개념 대로 라면 위에 있는 가상 시나리오는 성립되어야 하는데...그렇지가 않습

니다.

#

# 제가 직접 테스트 한 결과 내린 결론 입니다.

# 그렇다면 과연 첫번재 라고 적힌 뜻은 뭘까요?

# "쉘의 권한을 얻는다".......쉘의 권한이라...쉘의 권한.......

# 단순히 비교하는것 뿐인데 비교한다고 쉘의 권한을 줄까요?..

# 자 그럼 우리 한번 /etc/passwd화일을 봅시다.

#

#root:x:0:0:root:/root:/bin/bash

#bin:x:1:1:bin:/bin:

#daemon:x:2:2:daemon:/sbin:

#adm:x:3:4:adm:/var/adm:

#lp:x:4:7:lp:/var/spool/lpd:

#sync:x:5:0:sync:/sbin:/bin/sync

#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

#halt:x:7:0:halt:/sbin:/sbin/halt

#mail:x:8:12:mail:/var/spool/mail:

#news:x:9:13:news:/var/spool/news:

#uucp:x:10:14:uucp:/var/spool/uucp:

#operator:x:11:0:operator:/root:

#games:x:12:100:games:/usr/games:

#gopher:x:13:30:gopher:/usr/lib/gopher-data:

#ftp:x:14:50:FTP User:/home/ftp:

#nobody:x:99:99:Nobody:/:

#mysql:x:100:101:MySQL server:/usr/local/mysql:/bin/bash

#xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false

#named:x:25:25:Named:/var/named:/bin/false

#gdm:x:42:42::/home/gdm:/bin/bash

#piranha:x:60:60::/home/httpd/html/piranha:/dev/null

#postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

#pvm:x:24:24::/usr/share/pvm3:/bin/bash

#squid:x:23:23::/var/spool/squid:/dev/null

#gwise:x:500:500::/home/gwise:/bin/bash

#mysqladm:x:501:501::/home/mysqladm:/bin/bash

#oracle:x:502:5000::/home/oracle:/bin/bash

#shop:x:503:503::/home/shop:/bin/bash

#guest:x:504:504::/home/guest:/bin/false

#

#자 보셨죠.....ftp에는 쉘이 없답니다. 초기 값부터 쉘이 할당되어 있지 않다는 얘기죠....

#더 깊이 생각을 한다면 내가 ftp에게 쉘을 준다면 얘기는 달라지겠죠..

#그러나 준다 해도 on이든 off이든간에 anonymous는 ftp로 들어 오겠죠..

#단순히 비교하는 것 뿐인데 그거 가지고 쉘의 권한을 얻을수 있을까요?...

#

#한가지 예를 들죠

#등장인물 : 남편, 아내 , 외부인

#

#외부인이 집에 들어가려 합니다.

#분명 아내는 문을 안열어 주겠죠.

#

# UserAlias 외부인 남편

#

# 외부인은 남편의 alias를 했습니다.

#부인은 일단 외부인을 남편으로 인식하겠죠.

#그 다음에 부인의 상태

#RequireValidShell off 인경우

#부인의 뇌속에 있는 남편의 정보와 지금 자신의 앞에 있는 남편(?)을

#비교하지 않고 집으로 들어 오게 합니다.

#

#

#RequireValidShell on 인경우

#부인은 외부인을 자신의 뇌속에 있는 남편 정보와 비교를 합니다.

#그래서 이넘이 가짜라는 것을 압니다.

#결국 문을 열어 주지 않겠죠.....

#

#자 이해가 빠르게되셨나요?????

#

#얘기가 길어지는데 정리하겠습니다.

#

# RequireValidShell 은 알리아스의 Source 유저의 쉘을 얻냐 안 얻냐가 아니라....

# 알리아스 Source 유저의 shell이 /etc/shells에 있냐 없냐를 판별하는 것입니다.

# 차이점을 아시겠죠...

#

# 제 의견이 김정균님 생각과 다를 뿐이지 제가 옳다고는 생각하지 않습니다.

# 제 의견을 읽고 다른 고수 분들의 생각을 적어 주셨으면 합니다.

#

#

# 이런 약간의 의견 조정이 있으므로 해서 더 큰 발정이 있으리라 생각됩니다.

#

# 제 글 이 잘 못 된 의견일 수도 있으니

# 이 글을 읽으시는 분들은 취사 선택 하시기 바랍니다.

# 본인이 직접 실습을 해 보시는게 빠를거라 생각됩니다.

#

# 그럼, 이만

댓글목록

등록된 댓글이 없습니다.