>> Edit article
이름
제목
패스워드
############################################ # 작성자 : 지현명 # 작성일자 : 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 <Limit LOGIN> allowAll </Limit> # 일반 유저들은 쉘을 가지고 있습니다. RequireValidShell on User nobody Group nobody <Directory /*> AllowOverwrite off HideUser root HideGroup root </Directory> # 일반 유저용 MaxClientsPerHost 1 "죄송합니다. 이미 하나의 클라이언트에서 접속하셨습니다." # 일반 유저를 위한 서버 개방 시간 및 다운시간 # 오후 3시 부터 ~ 오후 7시 까지만 서버를 일반 계정 사용자에게 열어 놓음. UpTime 15 DownTime 19 #################################################Anonymous # Anonymous 부분에서 안되는거 몇가지 # #TimeoutIdle 600 #TimeoutNoTransfer 600 # 일반 유저와 익명사용자의 Timeout 시간을 달리 설정 하려 했으나 # 데몬을 구동 시켜면 에러가 납니다. # Anonymous 부분에서는 쓸수가 없다네요. # 김정균님에게 질문 해 보겠습니다. <Anonymous /home/ftp> AccessGrantMsg "당신은 %u 계정을 통하여 들어 오셨습니다." <Limit LOGIN> AllowAll </Limit> 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는 디폴트이다. <Limit STOR WRITE> DenyAll </Limit> # 세부 세팅에 들어 가기에 앞서 # 업로드 허용은 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옵션을 준다.(더 제한을 가할 수 있다.) <Directory incoming> <Limit RETR READ> DenyALL </Limit> <Limit STOR MKD> AllowALL </Limit> </Directory> #다운로드 전용 폴더 설정 # 단순한 다운로드 전용 폴더는 READ보다는 RETR옵션을 준다.(더 제한을 가할 수 있다.) <Directory pub> <Limit STOR WRITE> DenyALL </Limit> <Limit RETR> AllowALL </Limit> </Directory> # 업로드/다운로드 겸용 폴더(한번 업로드한 화일은 덮어쓰기나 삭제 할 수 없음. 위를 보세 요 # 오버라이드 금지 시켜 놨습니다.) # 더 많은 제한을 가하기 위해서 READ/WRITE 보다 STOR/RETR을 사용한다. <Directory pds> <Limit STOR RETR MKD> AllowALL </Limit> </Directory> </Anonymous> # 이 설정 부분에 주의 해 주세요. # 일단 O/S 상에 useradd 명령어로 guest 사용자가 생성이 되어야 합니다. # 화일 업로드/다운로드 디렉토리 삭제 및 생성 권한을 주었습니다. # READ 와 WRITE는 특별한 경우를 제외하고는 단순히 화일 업로드/다운로드 할때는 # 권한을 안주는 것이 좋습니다. # 화일이 잘못 되었을 경우 덮어쓰기보다는 삭제하고 지우는 것이 좋겠죠. <Anonymous ~guest/pds> 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 <Limit Login> AllowAll </Limit> <Limit STOR RETR MKD RMD> AllowALL </Limit> </Anonymous> #<<<<<<<<<<<<<<<<<< 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에 있냐 없냐를 판별하는 것입니다. # 차이점을 아시겠죠... # # 제 의견이 김정균님 생각과 다를 뿐이지 제가 옳다고는 생각하지 않습니다. # 제 의견을 읽고 다른 고수 분들의 생각을 적어 주셨으면 합니다. # # # 이런 약간의 의견 조정이 있으므로 해서 더 큰 발정이 있으리라 생각됩니다. # # 제 글 이 잘 못 된 의견일 수도 있으니 # 이 글을 읽으시는 분들은 취사 선택 하시기 바랍니다. # 본인이 직접 실습을 해 보시는게 빠를거라 생각됩니다. # # 그럼, 이만
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved