Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
Interesting ports on localhost (127.0.0.1):
(The 1545 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
110/tcp open pop-3
111/tcp open sunrpc
143/tcp open imap2
3306/tcp open mysql
22305/tcp open wnn6_Kr
Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
- Limit 은 command 부분에 하나 또는 둘 이상의 FTP 명령어들을 사용하는데 제한을 하기 위하여 사용된다. Limit 이 설정되면 이후 설정에 영향을 주게 되며, 뒤에 설정한 이 나올 때 까지 모든 와 에 적용된 설정들을 제한하게 된다. 그리고 block 의 command 의 숫자는 제한이 없다. command 는 어떤 사용 가능한 FTP 명령도 되지만, 보통은 다음 중 하나를 사용한다. FTP 명령에는 CWD, MKD, RNFR, RNTO, DELE, RETR, STOR 등이 있으며, CWD(Change Work Directory) 명령은 디렉토리를 변경하는 명령이고, MKD(Make Directory) 명령은 새로운 디렉토리를 만드는 명령이고, RNFR (ReName From) 과 RNTO(ReName To)는 디렉토리의 이름을 바꾸는 명령이고, DELE(DELEte) 명령은 파일을 삭제하는 명령이고, RMD(ReMove Directory)는 디렉토리를 삭제하는 명령이고, RETR(RETRieve) 명령은 서버에서 클라이언트로 파일을 전송하는 명령이고, STOR(STORe) 명령은 클라이언트가 서버로 파일을 전송하는 명령이다. 이와 같이 개별적인 명령을 다음과 같이 명령어 그룹으로 사용할 수도 있다. 명령어 그룹에는 READ, WRITE, DIRS, ALL 이 있으며, READ는 RETR 이나 STAT 과 같은 파일 읽기와 관련된 모든 FTP 명령을 포함하지만, 디렉토리 목록은 포함되지 않고, WRITE 는 MKD 와 RMD 과 같은 파일 또는 디렉토리 쓰기, 생성, 삭제와 관련된 FTP 명령을 포함하고, DIRS는 LIST 와 NLST 과 같은 디렉토리 목록관 관련된 FTP 명령을 포함하며, ALL 은 모든 FTP 명령에 대한 제한을 적용할 수 있다. 마지막으로 다음과 같은 특수 명령을 사용할 수도 있다. LOGIN 은 사용자가 FTP 서버에 연결이나 login을 할 때 의사명령에 Limit을 적용해서 문맥에 연결 또는 login 초기화의 허용 또는 제한에 사용할 수 있다. Limit 명령어 제한이 파일과 디렉토리에 접근 권한을 변경시키는 것은 아니고 Limit 가 어떤 디렉토리에서 명령어를 제한하도록 사용되는 동안, 기본 운영체제 파일 시스템에 상속되는 파일의 권한은 아무런 변화가 없다.
CWD : 디렉토리를 변경할 경우 MKD : 새로운 디렉토리를 만들 경우
RNFR,RNTO : 디렉토리의 이름을 바꿀 경우 DELE : 파일을 삭제할 경우
RMD : 디렉토리를 삭제할 경우 RETR : 서버에서 클라이어트로 파일을 전송할 경우
STOR : 클라이언트에서 서버로 파일을 전송할 경우 READ : 파일 읽기와 관련된 모든 FTP 명령
DIRS : 디렉토리 목록과 관련된 모든 명령 LOGIN : 서버에 연결하거나 로그인을 제한할 경우
WRITE : 파일 또는 디렉토리 쓰기, 생성,삭제와 관련된 FTP 명령 ALL : 모든 FTP 명령
예) ....... ……………………… ①
.............
……………………… ②
AllowAll
……………………… ③
DenyAll
……………………… ④
……………………… ⑤
AllowAll
위의 설정을 보면 ① 은 ftp user 의 홈디렉토리에 대하여 anonymous 로 FTP 에 접속할 때 어떠한 제한을 할 것인가 하는 설정이고, ② 는 FTP 서버에 anonymous user 로 LOGIN을 허락하겠다는 설정이고, ③ 은 anonymous user 로 FTP 서버에 접속하여 쓰기를 제한하는 설정이고, ④ 는 ftp user 의 홈디렉토리의 incoming 디렉토리에 대하여 어떠한 제한을 할 것인가 하는 설정이고, ⑤ 는 anonymous user 로 FTP 서버에 접속하여 incoming 디렉토리에 저장기능과 디렉토리를 만들 수 있는 기능을 허락하는 것이다. 이렇게 예를 들어 설명하니 조금 이해하기 쉬울 것이라고 필자는 생각이 든다. 이렇게 하여 ProFTP 환경설정 파일을 살펴보았다. 물론 여기에 소개된 내용이 전부는 아니다. 더 많은 기능이 존재하고 어떻게 관리자가 설정하느냐에 따라서 달라질 것이다. 그럼, 다음으로 넘어가자.
4. ProFTP 데몬 실행 및 종료
(1) ProFTP 데몬 실행
데몬 실행방법은 /usr/local/proftpd 디렉토리로 이동하여 sbin 디렉토리의 proftpd 를 실행하면 된다. 데몬 실행을 하고 난후 에러가 없다면 ps 명령으로 ProFTP 데몬의 상태를 알아볼 수 있다.
# sbin/proftpd ( pwd : /usr/local/proftpd )
(2) ProFTP 데몬 재시작 및 종료
만약 proftpd.conf 파일을 수정하여 ProFTP 데몬을 재시작 하고 싶다면 ps 명령으로 ProFTP 데몬의 PID를 알아낸 다음 "kill -HUP PID" 명령을 내려 주면 수정한 환경설정을 추가해 줄 수 있을 것이다. ProFTP 데몬 종료는 "kill -TERM PID" 명령을 내려주면 종료시킬 수 있을 것이다.
※ 일반 계정을 anonymous로 사용하기.
mp3라는 계정을 anonymous로 사용
1. adduser mp3 로 mp3라는 user를 만듭니다.
2. vi /etc/passwd 로 mp3 user의 shell 부분(/bin/bash)을 /dev/null 로 바꾼다. (물론 /etc/shells 에 /dev/null 이 있어야 한다.)
3. proftpd.conf에 설정한다.
AnonRequirePassword off
User mp3
Group mp3
RequireValidShell off
AllowAll
4. standalone 의 경우 /etc/rc.d/init.d/proftpd restart 를 inetd의 경우 killall -HUP inetd 를 실행하여 proftpd를 다시 구동한다.
5. Anonymous 가 접속할 때 보여주는 .welcome.msg 파일도 만들어 주자.
----------~HOME/mp3/.welcome.msg ----------------------
환영합니다......
ProFTPd Alzza Linux 6.0 2.2.12(안정)
ftp://%L/
o 남은 용량 : %F KB
o 현 사용자 수 : %N/%M (하나의 호스트당 1명까지 접속 허가합니다)
o %R의 %u(%U)님이 접속한 현 시각은 %T년입니다.
Admin-mailto:%E
-----------end --------------------------------------------
위의 결과는
-----------------------------------------------------------
환영합니다......
ProFTPd Alzza Linux 6.0 2.2.12(안정)
ftp://ftp.linux.ac.kr/
o 남은 용량 : 302868 KB
o 현 사용자 수 : 2/10 (호스트당 1회 접속만 허가합니다)
o 192.168.12.5의 UNKNOWN(anonymous)님이 접속한 현 시각은 Tue Sep 14 22:05:36 1999년입니다.
Admin-mailto:ftp@linux.ac.kr
-----------------------------------------------------------
1.2.pre6 버전을 제외한 그 이상의 버전은 "%F KB" 대신 "%f"로 기입하면 Mb로 출력됩니다.
1. ProFTP 소개 및 다운로드
(1). ProFTP 소개
FTP 란 File Transfer Protocol 의 약자로서 파일 전송 규약을 말한다. ProFTP 서버는 예전에 사용하던 Wu_FTP 보다 환경설정파일이 하나로 되어 관리하기가 편해지고 보안 및 버그 또한 패치를 하여 요즘 많이 사용하고 있는 FTP 서버중 하나이다.
(2). ProFTP 다운로드
ProFTP 서버를 구할 수 있는 곳은 ProFTP 웹 사이트(http://www.proftpd.net) 에서 최신 버전의 ProFTP 서버를 다운로드 할 수 있다.
2. ProFTP 설치
(1) 압축된 파일 풀기
먼저 다운로드한 파일을 /usr/local/src 밑으로 복사하기 바란다. 위에서 소개한 ProFTP 웹사이트에서 받았다면 *.tar.gz 형식의 파일일 것이므로 tar를 이용하여 압축을 풀면 된다.
(가) 압축된 파일이 *.tar.gz 또는 *.tar.Z 파일 압축 풀기
# tar -xvzf proftpd-1.2.xxx.tar.gz
(나) 압축을 풀면 proftpd-1.2.xxx 라는 디렉토리가 생성된다. 이 디렉토리를 proftpd 라는 이름으로 바꾸어 준다.
# mv proftpd-1.2.xxx proftpd
압축을 풀었다면 /usr/local/src/proftpd 에 README 와 INSTALL 파일이 존재하므로 참고하기 바란다. README 와 INSTALL을 강조하는 이유는 대부분의 배포되는 설치 파일들은 이 두 개의 파일을 포함하고 있으므로 잘 읽어보고 따라하면 되기 때문이다.
(2) 컴파일 하기 전에 configure 파일 실행하기
압축을 잘 풀었다면 /usr/local/src/proftpd 에 configure 파일이 있을 것이다. 이 파일을 실행하면 Makefile 이 생성된다. configure 실행은 설치할 디렉토리를 지정하도록 다음과 같이 하면 되겠다.
# ./configure --prefix=/usr/local/proftpd
위와 같은 명령을 주면 make install 시에 /usr/local/proftpd 디렉토리에 설치하게 된다.
(3) ProFTP 서버 컴파일
위에서 configure 파일을 실행해서 Makefile을 만들었을 것이다. 그럼 컴파일을 해보자.
# make
(4) ProFTP 서버 설치
위 과정을 에러 없이 마쳤다면 설치과정으로 들어가도록 하겠다. 현재위치(/usr/local/src/proftpd)에서 다음과 같은 명령을 실행하도록 한다.
# make install
이렇게 하면 ProFTP 서버의 설치과정이 끝나게 된다. 여기서 다룬 설치과정은 ProFTP 웹사이트로부터 받은 소스파일을 가지고 수동으로 설치하는 방법을 다루었다. 레드햇 리눅스 6.0 이상의 사용자라면 기본으로 ProFTP 가 설치되었을 것이므로 업그레이드나 수동으로 재설치시에 참고하면 되겠다.
3. proftp 환경 파일 설정 ( proftpd.conf )
/etc/proftpd.conf 설정파일을 알아보자.
ServerName "SAGELINUX FTP SERVER"
- ServerName 은 사용자가 FTP 서버에 접속했을 때 이 FTP 서버의 이름이 무엇인지 출력해준다.
ServerType standalone
# ServerType inetd
- ServerType 은 ProFTP 서버를 실행시키는 방법이다. standalone 은 보통 응용프로그램을 실행하듯이 직접 proftpd 를 실행하는 방법이고, inetd 은 inetd 슈퍼 서버에 의해 실행되는 방법을 말한다.
DefaultServer on
- DefaultServer 는 FTP 서버의 primary IP address 또는 가상 호스트 설정 블록에서 설정된 IP address 가 아닌 IP address 로부터 연결이 있을 때 기본으로 사용되어질 서버 설정을 해준다. 이와 같이 알려지지 않은 연결이 있을 때는 "no server available to service your request" 라는 내용을 보여주며 연결이 끊어지게 될 것이다.
DefaultRoot / 또는 ~/
- DefaultRoot 는 FTP 서버에 일반 계정으로 접속한 사용자에게 최상위 디렉토리를 지정해주는 것이다. DefaultRoot 를 / 로 설정하면 사용자가 FTP 서버에 접속했을 때 / 디렉토리까지 접근 가능하며, ~/ 로 설정하면 일반 계정의 홈디렉토리가 최상위 디렉토리까지 접근 가능하게 될 것이다.
Port 21
- Port 는 ProFTP 서버가 standalone 모드로 동작할 때 사용자가 FTP 와 연결할 통로를 정해주는 것이다. 보통 FTP 서버의 경우는 21 번 Port를 사용한다. 참고로 inetd 모드로 동작을 원하고자 한다면 이 부분을 주석으로 하고 Port 번호를 /etc/services 파일에 설정해 주어야 할 것이다.
Umask 022
- Umask 는 새로 만들어지는 파일과 디렉토리에 적용될 마스크를 지정한다.
MaxInstances 30
- MaxInstances 는 ProFTP 서버가 standalone mode 일 때 최대 접속가능한 사용자 수를 지정한다. ProFTP 서버가 inetd mode 일 경우에는 아무런 효과가 없으므로 주석으로 해주면 될 것이다.
User nobody
Group nobody
- User 와 Group 은 ProFTP 서버 실행시에 생성되는 프로세스의 User 와 Group을 지정해준다. 혹시라도 이 부분이 슈퍼유저로 되어 있다면 매우 위험하므로 User 와 Group을 nobody 로 반듯이 해주기를 권한다. 위와 같이 설정하였다면 서버 설정이 끝나고 proftpd를 실행시킨 후에 ps 명령으로 확인하기 바란다.
...........................
- ..... 는 명시한 디렉토리에 대해 옵션을 정의해 준다. 위의 예는 /(루트) 아래의 모든 디렉토리에 대한 옵션을 정의해 줄 수 있다.
AllowOverwrite on
- AllowOverwrite 는 사용자가 FTP 서버에 접속하여 새로 전송하려고 하는 파일이 기존에 있는 파일이 있을 때 어떻게 할 것인가에 대한 설정이다. AllowOverwrite 가 on 이면 Overwrite를 허락하는 것이고 off 이면 Overwrite를 허락하지 않는 것이다.
....... ...........................
- 위의 설정은 FTP 서버 접속시에 익명의 사용자 anonymous 로 접속하여 이용할 수 있는 디렉토리에 대한 옵션을 설정할 수 있게 한다. 디렉토리명의 표현은 /home/ftp 나 ~ftp 같은 형식으로 하면 된다. 그리고 지금부터 이후에 소개되는 것에 대해서는 ....... 안에 사용되는 설정이다.
User ftp
Group ftp
- .......에서 사용되는 User 와 Group 은 ProFTP 서버에 사용자가 anonymous 로 접속할 때 디렉토리에 대한 User 와 Group을 지정해준다. 이렇게 되면 디렉토리에 대한 실제적인 권한은 ftp user 가 가지게 되는 것이다.
RequireValidShell off
- RequireValidShell 은 /etc/shells 파일에 정의되지 않는 shell을 사용하는 유저에게 FTP 접속을 허락하거나 거절하는 것에 대한 지정이다. 기본적으로 ProFTP 서버에서는 on 상태이므로 /etc/shells 에 user 들이 사용하는 shell 이 없으면 login을 할 수 없게 된다. 그러므로 anonymous user 로 접속을 하고자 한다면 RequireValidShell을 off 로 해주어야 login 할 수 있을 것이다.
UserAlias anonymous ftp
- 사용자가 FTP 서버에 접속할 때 anonymous user 로 접속하면 ftp user 로 접근하게 하는 지정이다. 그러니까 ftp user로 FTP 서버에 접속하여 이용하는 것이 된다.
MaxClients 10 "message"
- MaxClients 는 anonymous user 로 접속할 때 client 들이 최대로 접속할 수 있는 수를 설정한다. 그리고 anonymous user 로 접속할 수 있는 수를 제한하지 않으려면 none 이라는 설정을 해주면 된다. 또한, 최대 이용자수 뒤에 message를 적어주면 접속할 수 있는 수를 넘을 때 user 와 password를 입력한 후 연결이 끊어지게 되는데, 이 때 사용자에게 message를 보여 줄 수 있는 방법이다.
DisplayLogin welcome.msg
- DisplayLogin 는 사용자가 anonymous user 로 접속했을 때 보여줄 메시지가 들어있는 text file을 지정하는 것이다. 파일은 상대 경로나 절대 경로를 지정할 수 있으며, 상대경로로 지정할 경우 user 가 접속했을 때 처음 디렉토리를 기준으로 찾게 된다. 일반 user 의 경우에는 user 의 홈디렉토리가 기준이 되며, user 의 홈디렉토리에 지정한 파일이 있으면 접속시에 메시지가 보일 것이다. 만약, file 이 없다고 하더라도 에러는 발생하지 않는다.
DisplayFirstChdir .message
- DisplayFirstChdir 은 client 사용자가 FTP 서버에 접속하여 chdir(cd) 명령을 이용해 처음으로 다른 디렉토리로 접근할 때 접근한 디렉토리에 .message file 이 있으면 file 의 내용을 보여주게 된다. 이 파일의 내용은 FTP 서버에 접속하여 디렉토리에 처음 접근할 때에만 보여준다.
--------------------------------------------------------------------
만약, etc/init.d/ 밑에 "proftpd" 실행 파일이 없으면 만들어줘야한다.
그리고, user와 group 은 "nobody" 로 해주어야 한다.