proftp보안 설정
* proftpd로 ftp 서비스할때, 사용자들이 자신의 계정 디렉토리만 억세스하게 설정하려면 proftpd.conf
(보통 /etc 나 /etc/proftpd/conf) 에
DefaultRoot ~ 를 추가 해줍니다.
* telnet 접속을 금지시키는 방법
/etc/pam.d/login 과 /etc/pam.d/rlogin 의 첫 줄에 다음을 추가한다.
auth required /lib/security/pam_listfile.so item=user
sense=deny file=/etc/notelnetusers onerr=succeed
/etc/notelnetuser 화일을 만들어서 telnet login 금지시킬 사용자의 id를 적는다.
* 특정 사용자의 ftp접속시 접근할수 있는 디렉토리를 home directory로 제한하는 방법
/etc/proftpd.conf 에 다음 문자을 추가한다.
defaultroot ~ datauser
여기서 defaultroot는 ftp 접속시 root디렉토리를 지정하는 명령임을 나타낸다. ~ 는 ftp 접속시 root디렉토리를 접속한 사용자의 home directory로 지정한다. datauser는 "defaultroot ~" 의 option을 적용할 사용자들의 group 명이다. 위 문장을 요약하면 datauser group에 속하는 사용자가 ftp로 접속하면
그 때 root directory는 접속한 사용자의 home directory가 된다.
즉 특정 사용자들이 ftp로 접속했을 경우 각 사용자의 home directory 이하만
접근가능하게 제한한다. 그리고 /etc/group화일에 datauser라는 group을 만들고 필요한 사용자를
등록한다. 1번과 2번을 조합하면 특정 디렉토리를 ftp로만 접근할수 있는 계정이 만들어진다.
*proftpd의 로그 스크립트 입니다.
#!/bin/bash
LANG=
Mon=`date +%b`
vo=1
if [ -n "$1" ] ;then
case $1 in
1)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Jan' '$2
else
cat /var/log/xferlog | grep Jan' '$2
fi
;;
2)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Feb' '$2
else
cat /var/log/xferlog | grep Feb' '$2
fi
;;
3)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Mar' '$2
else
cat /var/log/xferlog | grep Mar' '$2
fi
;;
4)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Apr' '$2
else
cat /var/log/xferlog | grep Apr' '$2
fi
;;
5)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep May' '$2
else
cat /var/log/xferlog | grep May' '$2
fi
;;
6)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Jun' '$2
else
cat /var/log/xferlog | grep Jun' '$2
fi
;;
7)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Jul' '$2
else
cat /var/log/xferlog | grep Jul' '$2
fi
;;
8)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Aug' '$2
else
cat /var/log/xferlog | grep Aug' '$2
fi
;;
9)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Sep' '$2
else
cat /var/log/xferlog | grep Sep' '$2
fi
;;
10)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Oct' '$2
else
cat /var/log/xferlog | grep Oct' '$2
fi
;;
11)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Nov' '$2
else
cat /var/log/xferlog | grep Nov' '$2
fi
;;
12)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Dec' '$2
else
cat /var/log/xferlog | grep Dec' '$2
fi
;;
esac
else
Day=`date +%d`
echo $Mon
echo $Day
case $Day in
01)
cat /var/log/xferlog | grep $Mon' '1
;;
02)
cat /var/log/xferlog | grep $Mon' '2
;;
03)
cat /var/log/xferlog | grep $Mon' '3
;;
04)
cat /var/log/xferlog | grep $Mon' '4
;;
05)
cat /var/log/xferlog | grep $Mon' '5
;;
06)
cat /var/log/xferlog | grep $Mon' '6
;;
07)
cat /var/log/xferlog | grep $Mon' '7
;;
08)
cat /var/log/xferlog | grep $Mon' '8
;;
09)
cat /var/log/xferlog | grep $Mon' '9
;;
esac
fi
LANG=ko_KR.eucKR
위 내용을 복사해서 실행가능하게 퍼미션주고 lf라고 이름 지어주시면 됩니다.
사용법은
lf -> 오늘의 ftp로그 파일 내용
lf 7 9 ->7월 9일의 로그파일 내용
------------------------------------------------------------------------------------------------
* ftp서비스로 인해 계정을 발급하게 될시 Shell접속을 하게 되어 있는데,
Shell 접속을 끊기
/etc/passwd 파일의 계정 내용중 마직막 부분이 Shell설정 부분입니다.
test:x:500:500::/home/test:/bin/bash <-- /bin/bash 부분입니다.
bash부분을 변경해 주면 ftp계정은 열어주되 Shell서비스는 막을수가 있습니다.
!!! 주의 !!!
/bin/false 나 /bin/true 로 하시면 ftp서비스까지 하실수가 없습니다.
:: 단계 1
cat /etc/shells
/bin/bash2
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
쉘이 등록되어 있는 곳입니다. 이곳에 임의로 하나를 등록 합니다. 예를 들어 /bin/nosh 이라고 아래부분에 추가한후
cd /bin
touch nosh( 퍼미션 777 )
그리고 /etc/passwd 쪽에서 쉘부분의 세팅만 바꿔 주면 됩니다.
test:x:500:500::/home/test:/bin/nosh
*Proftpd - 전문적인 설정, 보안 File Transfer Protocol Server
사용법
proftpd [ -hlntv ] [ -d debuglevel ] [ -c config-file ] [ -p 0|1 ]
설명
proftpd 는 전문적인 File Transfer Protocol (FTP) server daemon이다. server는 FTP service가 이루어지기 위해 접속될때마다 또는 stand-alone daemon으로서 실행 되는 것을 대체될때 Internet "super-server" inetd(8) 에 의하여 시작된다. proftp 가 standalone mode로 작동할때 그리고 SIGHUP를 받을때 proftp는 config file 을 다시 읽을 것이다. -n option이 없이 standalone으로 작동할 경우 SIGHUP 신호를 진행할때 쉽게 하기 위하여 자신의 PID를 /var/run/proftpd.pid에 기록하게 된다.
<옵션>
-h,--help
간단한 사용설명을 보여주며, 가능한 모든 option들을 포함하고 있다.
-n,--nodaemon
standalone mode로 proftpd process를 실행한다.(configuration file에서 처럼 설정 되어져 있어야 한다) but does not background the process or disassociate it from the controlling tty. 게다가 모든 ourput (log 또는 debug 메세지들) 은 syslog maechanism 보다 오히려 stout으로 보내지게 된다. debugging을 위해서는 -d option 을 가장 자주 사용하게 된다.
-v,--version
stdout으로 ProFTPD의 version number를 출력한다.
-d,--debug debuglevel
proftpd의 내부 debug lovel을 설정한다.(일반적으로 0 이다) debuglevel 은 0에서 5 사이의 정수값을 가진며, debug stdout 보다 더 높은 숫자로서 가지게 된다. 일반적으로 debug message들은 DEBUG facility 를 이용하여 syslog 로 보내지게 된다. 하지만 -n option 을 이용하면 모든 output들은 stdout으로 보내지게 된다.
-c,--config config-file
시작시에 /etc/proftpd.conf 에서 발견되는 기본 설정 file을 무시하고 다른 config-file 로 지정할수 있다.
-t,--configtest
설정 파일을 읽어서 문법 에러가 있는지 확인을 한다.
-p,--persistent 0|1
default persistent password를 지원한다. Disables는 0, enable은 1 이며 각 platform을 통해 설정 시간을 결정한다. 이 option은 오직 default support에만 영향을 미치며, 실행시에 PersistentPasswd 지시자에 의해서 무시되어 질수 있다.
-l,--list
proftpd에 compile되어진 module들의 list를 보여 준다.
파일
/usr/sbin/proftpd
/usr/bin/ftpwho
/usr/bin/ftpcount
/usr/sbin/ftpshut
/var/log/xferlog
/var/run/proftpd-[pid]
/var/run/proftpd-inetd
저자
ProFTPD는 Floody에 의하여 처음 개발되어 졌으나 현재는 MacGyver (aka Habeeb J. Dihu)에 의하여 개발되어 지고 있다. [http://www.macgyver.org]
SEE ALSO
inetd(8),ftp(1),ftpwho(1),ftpcount(1),ftpshut(8)
proftpd 설정의 문서는 http://www.proftpd.net에서 볼수 있다.
버그 리포트는 http://bugs.proftpd.net 으로 한다. 도움및 지원은 Proftpd 메일링 리스트를 이용하도록 한다. 메일링 리스트는 proftp@proftpd.net 이다. (http://www.proftpd.lists.html 을 참조하라)
역자
김정균, 김현철 ,
문법 Allow ["from"] "all"|"none"|host|network[,host|network[,...]]
기본 설정 모든곳으로 부터 허락
사용 범위 사용가능버젼 0.99.0pl6 이후 버젼
Allow 지시자는 문맥 내부에서 어떤 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 공격이나 스푸핑에 약한 DNS server 에 많은 보안문제를 야기한다. 전체 network 를 지정하는 숫자로 된 주소들은 마지막에 구둣점 '.'을 넣어 줘야 한다. ( 예를 들어 10.0.0 서브넷 전체를 나타내기 위해서는 10.0.0. 으로 표기한다.) 전체 network를 나타내는 name 주소는 해당 도메인의 제일 앞에 구둣점 "." 으로 시작을 한다. (예를 들어 proftpd.org domain 의 sub domain 들을 나타낼 때는 .proftpd.org 로 표기를 한다.)
! 문자를 사용하여 반대의 의미를 표현할수 있으며, host 나 ip 주소의 블럭을 지정할수도 있으며 하나의 호스트를 표현할수도 있다.
Example:
Order Allow,Deny
Allow from 128.44.26.,128.44.,myhost.mydomain.edu,.domain.org
Deny from all
문법 AllowForeignAddress on|off
기본 설정 AllowForeignAddress off
사용 범위 server config,,
사용가능버젼 1.1.7 이후 버젼
일반적으로 proftpd 는 client 들이 자신의 address (ftp control 연결 의 source 주소) 뿐 아니라 타 address 로도 ftp PORT 명령을 사용하는 것을 허락하지 않으며, 1024 번 port 아래에 지정된 PORT 역시 사용을 할수가 없다. 이 경우 client 들은 "Invalid port" 라는 에러를 만나게
되며 syslog'd 에 의하여 "address mismagch" 또는 "bounce attack" 라는 log 를 남기게 된다. 이 지시자를 on 으로 함으로서, proftpd 는 클라이언트의 주소와 매치되지 않는 외부 데이타 주소전송을 하는 클라이언트들을 허용할 것이다. 이것은 실제 data 연결상태에서 client 가 자기 자신은 관여하지 않고 두 FTP server 사이에서 file 을 전송 하는것과 같은 trick 을 허락한다. 일반적으로 이것을 허락하는 것은 보안 정책상 결코 좋은 idea가 아니다.
AllowForeignAddress 는 오로지 data connection address 에만 영향을 미치며, tcp port와는 상관이 없다. client들에게 Proftpd의 PORT 명령의 사용을 허락하는 방법은 없으며, 정당한 이유도 없다.
문법 AllowLogSymlinks [ "on"|"off"]
기본 설정 AllowLogSymlinks off
사용 범위 server config,,
사용가능버젼 1.2.2rc2 이후 버젼에서 mod_log 모듈 필요
기본으로, 서버는 만약 symbolic links인가 보기 위해 모든 구성된SystemLog, TransferLogs, ExtendedLogs 로 경로 되어 있다.만약 경로가 symbloic links일 경우, 서버는 전적으로 이 지시를 통해 구성된 경우가 아닐시 link에 연결을 거부 할것이다.
*******************보안 노트*******************************************************************
이 행위는 아주 좋은 이유가 없을시 허용되어선 안된다.허용 하면, 서버는 root 권한으로 symbolic links를 개방하게 된다, 이로서 symbolic link 공격을 허용하게 되며, 이경우, 서버는 임의 시스템 화
일을 실수로 overwriting하게 될수도 있다.경고 하는 바이다.
예제:
AllowLogSymlinks on
문법 DefaultRoot directory [group-표현]
기본 설정 DefaultRoot /
사용 범위 server config,,
사용가능버젼 0.99.0pl7 이후 버젼
DefaultRoot 지시자는 로그인 한 유저들에게 지정된 default root 디렉토리를 조절한다. DefaultRoot 가 "/" 가 아닌 디렉토리에 지정이 되어있으면, chroot 는 client 의 인증후 즉시 수행이 된다. 이것은 system파일공간의 한 부분으로 부터 client 들을 효과적으로 분리하는데 사용이 되어진다. 지정된 root 디렉토리는 "/" 또는 magic character "~" 로 시작이 되어지며, 이것은 client 가 그들의 home 디렉토리안에 가두어지는 것을 의미한다. 만약 DefaultRoot 지시자가 로그인 유저들의 홈디렉토리로 접근을 허락하지 않는 디렉토리를 지정한다면, 로그인 후의유저들의 현재 디렉토리가 그들의 일반적인 홈디렉토리 대신에 DefaultRoot 로 지정이 된다. 지시자가 익명 로그인을 위
해 사용을 하는 root 디렉토리를 포함하고 있으므로, 설정블록에서는 DefaulRoot 를 사용하지 않는다.
special character '~' 는 로그인 후 바로 인증된 유저의 홈디렉토리들로 대체된다. DefaultRoot 는 "~/anon-ftp" 와 같이 홈디렉토리의 서브디렉토리가 된다는 것을 주의하라.
부가적인 group-표현식 인자는 DefaultRoot 를 UNIX 그룹, 그룹들 또는부분적인 그룹들로 제한 할 때에 사용되어 진다. 이 표현식은
[!]group-name1[,[!] group-name2[,...]]
의 형식을 취한다. 표현식들은 AND 연산으로 분석이 되어지며, 표현식의 각 구성원들은 DefaultRoot 지시자에 적용하기 위하여 논리적인 참값이 구해져야 한다. special character '!'는 지정된 그룹을 제외한다는 의미로 사용을 한다.
DefaultRoot 사용할 때는 주의 해야한다. Chroot 를 이용해서 제한하는것은 유저가 이를 벗어날 방법이 존재할 수도 있기 때문에(이런 것들을버그라고 한다.) 일반적인 보안 수단의 방법으로 사용되서는 안된다.
DefaultRoot 설정의 예:
ServerName "A test ProFTPD Server"
ServerType inetd
User ftp
Group ftp
#
# 이것은 proftpd가 login후 즉시 인증된 user들의 directory를
# chroot로 수행하는 것을 설정한다.
# 이것이 실행이 되면, user "users"는 group-표현식에
# 포함되어져있기 때문에 상위 디렉토리들을 볼수가 없게 된다.
# 오직 group 'users'의 멤버이고 'staff'의 멤버가 아닌 user들만
# ~로 지정된 default root directory를 가진다.
DefaultRoot ~ users,!staff
문법 DeferWelcome on|off
기본 설정 DeferWelcome off
사용 범위 server config,,
사용가능버젼 0.99.0 이후 버젼
DeferWelcome 지시자는 client 가 인증에 성공할때 까지 master server
또는 가상서버에 새로운 접속에 대한 ServerName 과 address 를 전송하는 것을 지연시키는 것을 설정한다. on 으로 설정을 한다면, 초기의 welcome message 는 아주 일반적일 것이며, 데몬이 활발하게 작동 중인host 에 대한 어떤 종류의 정보도 주지 않는다. 이것은 믿을수 없는 네트워크들이나 호스트들로 부터 서버염탐의 가능성을 제한하기위해 보안의식이 있는 관리자들이 주로 사용을 한다
문법 GroupPassword groupid hashed-password
기본 설정 기본 적용 안됨
사용 범위 server config,, ,
사용가능버젼 0.99.0pl5 이후 버젼
GroupPassword 지시자는 하나의 password 공유하여 인증을 시킬 그룹이사용 할 특별한 password 를 만든다. group/password 는 오직 GroupPassword 가 적용 될 context 내에서만 효과적으로 사용이 가능하다. hashed-password 인자는 기본 평문 password 이며, 이것은 기본 유닉스 암호화 라이브러리 함수를통해 인증이 되어진다. 그룹 membership이 주의깊게 조절되지 않으면 심각한 보안문제가 발생할 수 있으므로, GroupPassword 을 사용할 때 주의해야한다.
문법 Order allow,deny|deny,allow
기본 설정 Order allow,deny
사용 범위
사용가능버젼 0.99.0pl6 and later
Order 지시자는 블락내에 Allow 와 Deny 지시자의 체크되는 순서를 설정하도록 한다. 왜냐하면, Allow 는 허용되도록 하고, Deny 는제한을 가하는데, 이것의 순서는 보안기능상으로 중유하기 때문이다. 디폴트 설정 allow,deny 가 사용되면 "allowed" 접근 권한이 먼저 체크된다. 블럭내에 명시적으로 접근 권한을 설정하면, 다른 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 로 종료
문법 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를) 파일들을 열려고 시도를 할 것이며, chroot() 로그인이 적용 되어 있는 동안 이 파일들을 열어 놓고 있을 것이다. (/etc/shadow 는 보안상의 이유로 결코계속 열어 놓고 있지는 않는다는 것을 주의하라.) 어떤 플랫폼 에서는,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 이 작동을 안하게 될 수도 있다.
문법 RootLoginl on|off
기본 설정 RootLogin off
사용 범위 server config,, ,
사용가능버젼 1.1.5 이후 버젼
기본적으로, proftpd 는 어떠한 여건 하에서도 root 로그인을 허락하지않는다. 클라이언트가 정확한 패스워드를 가지고서 루트로 로그인을 시도할 때, syslog 로 특별한 보안메세지가 보내지게 된다. RootLogin 지시자를 on 으로 하면, 루트로도 다른 유저로 로그인을 할 수 있듯이 인증을 하여 접속을 할 수가 있다. 그러나 루트 로그인 보안 메세지는 여전히 syslog 에 남게 된다. 이 지시자를 사용 하는데 있어서 아주 세심한 주의를 요한다는 것을 명심하라.
루트 로그인을 가능하게 설정을 한다고 해도, ProFTPd 는 루트 역시 일반 유저로 간주하기 때문에, 다른 유저의 소유를 가진 파일이나 디렉토리들은 건드릴 수가 없다. 그러므로 루트 로그인을 가능하게 하는 것을 권장하지 않는 바이다.
문법 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.
* proftpd로 ftp 서비스할때, 사용자들이 자신의 계정 디렉토리만 억세스하게 설정하려면 proftpd.conf
(보통 /etc 나 /etc/proftpd/conf) 에
DefaultRoot ~ 를 추가 해줍니다.
* telnet 접속을 금지시키는 방법
/etc/pam.d/login 과 /etc/pam.d/rlogin 의 첫 줄에 다음을 추가한다.
auth required /lib/security/pam_listfile.so item=user
sense=deny file=/etc/notelnetusers onerr=succeed
/etc/notelnetuser 화일을 만들어서 telnet login 금지시킬 사용자의 id를 적는다.
* 특정 사용자의 ftp접속시 접근할수 있는 디렉토리를 home directory로 제한하는 방법
/etc/proftpd.conf 에 다음 문자을 추가한다.
defaultroot ~ datauser
여기서 defaultroot는 ftp 접속시 root디렉토리를 지정하는 명령임을 나타낸다. ~ 는 ftp 접속시 root디렉토리를 접속한 사용자의 home directory로 지정한다. datauser는 "defaultroot ~" 의 option을 적용할 사용자들의 group 명이다. 위 문장을 요약하면 datauser group에 속하는 사용자가 ftp로 접속하면
그 때 root directory는 접속한 사용자의 home directory가 된다.
즉 특정 사용자들이 ftp로 접속했을 경우 각 사용자의 home directory 이하만
접근가능하게 제한한다. 그리고 /etc/group화일에 datauser라는 group을 만들고 필요한 사용자를
등록한다. 1번과 2번을 조합하면 특정 디렉토리를 ftp로만 접근할수 있는 계정이 만들어진다.
*proftpd의 로그 스크립트 입니다.
#!/bin/bash
LANG=
Mon=`date +%b`
vo=1
if [ -n "$1" ] ;then
case $1 in
1)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Jan' '$2
else
cat /var/log/xferlog | grep Jan' '$2
fi
;;
2)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Feb' '$2
else
cat /var/log/xferlog | grep Feb' '$2
fi
;;
3)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Mar' '$2
else
cat /var/log/xferlog | grep Mar' '$2
fi
;;
4)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Apr' '$2
else
cat /var/log/xferlog | grep Apr' '$2
fi
;;
5)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep May' '$2
else
cat /var/log/xferlog | grep May' '$2
fi
;;
6)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Jun' '$2
else
cat /var/log/xferlog | grep Jun' '$2
fi
;;
7)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Jul' '$2
else
cat /var/log/xferlog | grep Jul' '$2
fi
;;
8)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Aug' '$2
else
cat /var/log/xferlog | grep Aug' '$2
fi
;;
9)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Sep' '$2
else
cat /var/log/xferlog | grep Sep' '$2
fi
;;
10)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Oct' '$2
else
cat /var/log/xferlog | grep Oct' '$2
fi
;;
11)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Nov' '$2
else
cat /var/log/xferlog | grep Nov' '$2
fi
;;
12)
if [ ${#2} = ${#vo} ]; then
cat /var/log/xferlog | grep Dec' '$2
else
cat /var/log/xferlog | grep Dec' '$2
fi
;;
esac
else
Day=`date +%d`
echo $Mon
echo $Day
case $Day in
01)
cat /var/log/xferlog | grep $Mon' '1
;;
02)
cat /var/log/xferlog | grep $Mon' '2
;;
03)
cat /var/log/xferlog | grep $Mon' '3
;;
04)
cat /var/log/xferlog | grep $Mon' '4
;;
05)
cat /var/log/xferlog | grep $Mon' '5
;;
06)
cat /var/log/xferlog | grep $Mon' '6
;;
07)
cat /var/log/xferlog | grep $Mon' '7
;;
08)
cat /var/log/xferlog | grep $Mon' '8
;;
09)
cat /var/log/xferlog | grep $Mon' '9
;;
esac
fi
LANG=ko_KR.eucKR
위 내용을 복사해서 실행가능하게 퍼미션주고 lf라고 이름 지어주시면 됩니다.
사용법은
lf -> 오늘의 ftp로그 파일 내용
lf 7 9 ->7월 9일의 로그파일 내용
------------------------------------------------------------------------------------------------
* ftp서비스로 인해 계정을 발급하게 될시 Shell접속을 하게 되어 있는데,
Shell 접속을 끊기
/etc/passwd 파일의 계정 내용중 마직막 부분이 Shell설정 부분입니다.
test:x:500:500::/home/test:/bin/bash <-- /bin/bash 부분입니다.
bash부분을 변경해 주면 ftp계정은 열어주되 Shell서비스는 막을수가 있습니다.
!!! 주의 !!!
/bin/false 나 /bin/true 로 하시면 ftp서비스까지 하실수가 없습니다.
:: 단계 1
cat /etc/shells
/bin/bash2
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
쉘이 등록되어 있는 곳입니다. 이곳에 임의로 하나를 등록 합니다. 예를 들어 /bin/nosh 이라고 아래부분에 추가한후
cd /bin
touch nosh( 퍼미션 777 )
그리고 /etc/passwd 쪽에서 쉘부분의 세팅만 바꿔 주면 됩니다.
test:x:500:500::/home/test:/bin/nosh
*Proftpd - 전문적인 설정, 보안 File Transfer Protocol Server
사용법
proftpd [ -hlntv ] [ -d debuglevel ] [ -c config-file ] [ -p 0|1 ]
설명
proftpd 는 전문적인 File Transfer Protocol (FTP) server daemon이다. server는 FTP service가 이루어지기 위해 접속될때마다 또는 stand-alone daemon으로서 실행 되는 것을 대체될때 Internet "super-server" inetd(8) 에 의하여 시작된다. proftp 가 standalone mode로 작동할때 그리고 SIGHUP를 받을때 proftp는 config file 을 다시 읽을 것이다. -n option이 없이 standalone으로 작동할 경우 SIGHUP 신호를 진행할때 쉽게 하기 위하여 자신의 PID를 /var/run/proftpd.pid에 기록하게 된다.
<옵션>
-h,--help
간단한 사용설명을 보여주며, 가능한 모든 option들을 포함하고 있다.
-n,--nodaemon
standalone mode로 proftpd process를 실행한다.(configuration file에서 처럼 설정 되어져 있어야 한다) but does not background the process or disassociate it from the controlling tty. 게다가 모든 ourput (log 또는 debug 메세지들) 은 syslog maechanism 보다 오히려 stout으로 보내지게 된다. debugging을 위해서는 -d option 을 가장 자주 사용하게 된다.
-v,--version
stdout으로 ProFTPD의 version number를 출력한다.
-d,--debug debuglevel
proftpd의 내부 debug lovel을 설정한다.(일반적으로 0 이다) debuglevel 은 0에서 5 사이의 정수값을 가진며, debug stdout 보다 더 높은 숫자로서 가지게 된다. 일반적으로 debug message들은 DEBUG facility 를 이용하여 syslog 로 보내지게 된다. 하지만 -n option 을 이용하면 모든 output들은 stdout으로 보내지게 된다.
-c,--config config-file
시작시에 /etc/proftpd.conf 에서 발견되는 기본 설정 file을 무시하고 다른 config-file 로 지정할수 있다.
-t,--configtest
설정 파일을 읽어서 문법 에러가 있는지 확인을 한다.
-p,--persistent 0|1
default persistent password를 지원한다. Disables는 0, enable은 1 이며 각 platform을 통해 설정 시간을 결정한다. 이 option은 오직 default support에만 영향을 미치며, 실행시에 PersistentPasswd 지시자에 의해서 무시되어 질수 있다.
-l,--list
proftpd에 compile되어진 module들의 list를 보여 준다.
파일
/usr/sbin/proftpd
/usr/bin/ftpwho
/usr/bin/ftpcount
/usr/sbin/ftpshut
/var/log/xferlog
/var/run/proftpd-[pid]
/var/run/proftpd-inetd
저자
ProFTPD는 Floody에 의하여 처음 개발되어 졌으나 현재는 MacGyver (aka Habeeb J. Dihu)에 의하여 개발되어 지고 있다.
SEE ALSO
inetd(8),ftp(1),ftpwho(1),ftpcount(1),ftpshut(8)
proftpd 설정의 문서는 http://www.proftpd.net에서 볼수 있다.
버그 리포트는 http://bugs.proftpd.net 으로 한다. 도움및 지원은 Proftpd 메일링 리스트를 이용하도록 한다. 메일링 리스트는 proftp@proftpd.net 이다. (http://www.proftpd.lists.html 을 참조하라)
역자
김정균
문법 Allow ["from"] "all"|"none"|host|network[,host|network[,...]]
기본 설정 모든곳으로 부터 허락
사용 범위
Allow 지시자는
와 유사하다) 게다가, magic keyword 'none' 은 'from' 이 절대적으로 접근승인을 막지 않는것을 나타낸다고 하지만 어떤 host들이나 network 들이 접근하는 것을 거부하는데 사용이 된다. 'all' 이나 'none' 이 사용되어 지면, 다른 host 들이나 network 들은 지정을 해도 의미가 없게 된다.
host 와 network 주소는 이름이나 숫자로된 주소로 지정된다. 보안상의 이유로 모든 주소의 정보는 숫자로 적용 하는것이 추천되어 진다. name address 로만 의존하는 것은 named 공격이나 스푸핑에 약한 DNS server 에 많은 보안문제를 야기한다. 전체 network 를 지정하는 숫자로 된 주소들은 마지막에 구둣점 '.'을 넣어 줘야 한다. ( 예를 들어 10.0.0 서브넷 전체를 나타내기 위해서는 10.0.0. 으로 표기한다.) 전체 network를 나타내는 name 주소는 해당 도메인의 제일 앞에 구둣점 "." 으로 시작을 한다. (예를 들어 proftpd.org domain 의 sub domain 들을 나타낼 때는 .proftpd.org 로 표기를 한다.)
! 문자를 사용하여 반대의 의미를 표현할수 있으며, host 나 ip 주소의 블럭을 지정할수도 있으며 하나의 호스트를 표현할수도 있다.
Example:
Order Allow,Deny
Allow from 128.44.26.,128.44.,myhost.mydomain.edu,.domain.org
Deny from all
문법 AllowForeignAddress on|off
기본 설정 AllowForeignAddress off
사용 범위 server config,
사용가능버젼 1.1.7 이후 버젼
일반적으로 proftpd 는 client 들이 자신의 address (ftp control 연결 의 source 주소) 뿐 아니라 타 address 로도 ftp PORT 명령을 사용하는 것을 허락하지 않으며, 1024 번 port 아래에 지정된 PORT 역시 사용을 할수가 없다. 이 경우 client 들은 "Invalid port" 라는 에러를 만나게
되며 syslog'd 에 의하여 "address mismagch" 또는 "bounce attack" 라는 log 를 남기게 된다. 이 지시자를 on 으로 함으로서, proftpd 는 클라이언트의 주소와 매치되지 않는 외부 데이타 주소전송을 하는 클라이언트들을 허용할 것이다. 이것은 실제 data 연결상태에서 client 가 자기 자신은 관여하지 않고 두 FTP server 사이에서 file 을 전송 하는것과 같은 trick 을 허락한다. 일반적으로 이것을 허락하는 것은 보안 정책상 결코 좋은 idea가 아니다.
AllowForeignAddress 는 오로지 data connection address 에만 영향을 미치며, tcp port와는 상관이 없다. client들에게 Proftpd의 PORT 명령의 사용을 허락하는 방법은 없으며, 정당한 이유도 없다.
문법 AllowLogSymlinks [ "on"|"off"]
기본 설정 AllowLogSymlinks off
사용 범위 server config,
사용가능버젼 1.2.2rc2 이후 버젼에서 mod_log 모듈 필요
기본으로, 서버는 만약 symbolic links인가 보기 위해 모든 구성된SystemLog, TransferLogs, ExtendedLogs 로 경로 되어 있다.만약 경로가 symbloic links일 경우, 서버는 전적으로 이 지시를 통해 구성된 경우가 아닐시 link에 연결을 거부 할것이다.
*******************보안 노트*******************************************************************
이 행위는 아주 좋은 이유가 없을시 허용되어선 안된다.허용 하면, 서버는 root 권한으로 symbolic links를 개방하게 된다, 이로서 symbolic link 공격을 허용하게 되며, 이경우, 서버는 임의 시스템 화
일을 실수로 overwriting하게 될수도 있다.경고 하는 바이다.
예제:
AllowLogSymlinks on
문법 DefaultRoot directory [group-표현]
기본 설정 DefaultRoot /
사용 범위 server config,
사용가능버젼 0.99.0pl7 이후 버젼
DefaultRoot 지시자는 로그인 한 유저들에게 지정된 default root 디렉토리를 조절한다. DefaultRoot 가 "/" 가 아닌 디렉토리에 지정이 되어있으면, chroot 는 client 의 인증후 즉시 수행이 된다. 이것은 system파일공간의 한 부분으로 부터 client 들을 효과적으로 분리하는데 사용이 되어진다. 지정된 root 디렉토리는 "/" 또는 magic character "~" 로 시작이 되어지며, 이것은 client 가 그들의 home 디렉토리안에 가두어지는 것을 의미한다. 만약 DefaultRoot 지시자가 로그인 유저들의 홈디렉토리로 접근을 허락하지 않는 디렉토리를 지정한다면, 로그인 후의유저들의 현재 디렉토리가 그들의 일반적인 홈디렉토리 대신에 DefaultRoot 로 지정이 된다.
해 사용을 하는 root 디렉토리를 포함하고 있으므로,
special character '~' 는 로그인 후 바로 인증된 유저의 홈디렉토리들로 대체된다. DefaultRoot 는 "~/anon-ftp" 와 같이 홈디렉토리의 서브디렉토리가 된다는 것을 주의하라.
부가적인 group-표현식 인자는 DefaultRoot 를 UNIX 그룹, 그룹들 또는부분적인 그룹들로 제한 할 때에 사용되어 진다. 이 표현식은
[!]group-name1[,[!] group-name2[,...]]
의 형식을 취한다. 표현식들은 AND 연산으로 분석이 되어지며, 표현식의 각 구성원들은 DefaultRoot 지시자에 적용하기 위하여 논리적인 참값이 구해져야 한다. special character '!'는 지정된 그룹을 제외한다는 의미로 사용을 한다.
DefaultRoot 사용할 때는 주의 해야한다. Chroot 를 이용해서 제한하는것은 유저가 이를 벗어날 방법이 존재할 수도 있기 때문에(이런 것들을버그라고 한다.) 일반적인 보안 수단의 방법으로 사용되서는 안된다.
DefaultRoot 설정의 예:
ServerName "A test ProFTPD Server"
ServerType inetd
User ftp
Group ftp
#
# 이것은 proftpd가 login후 즉시 인증된 user들의 directory를
# chroot로 수행하는 것을 설정한다.
# 이것이 실행이 되면, user "users"는 group-표현식에
# 포함되어져있기 때문에 상위 디렉토리들을 볼수가 없게 된다.
# 오직 group 'users'의 멤버이고 'staff'의 멤버가 아닌 user들만
# ~로 지정된 default root directory를 가진다.
DefaultRoot ~ users,!staff
문법 DeferWelcome on|off
기본 설정 DeferWelcome off
사용 범위 server config,
사용가능버젼 0.99.0 이후 버젼
DeferWelcome 지시자는 client 가 인증에 성공할때 까지 master server
또는 가상서버에 새로운 접속에 대한 ServerName 과 address 를 전송하는 것을 지연시키는 것을 설정한다. on 으로 설정을 한다면, 초기의 welcome message 는 아주 일반적일 것이며, 데몬이 활발하게 작동 중인host 에 대한 어떤 종류의 정보도 주지 않는다. 이것은 믿을수 없는 네트워크들이나 호스트들로 부터 서버염탐의 가능성을 제한하기위해 보안의식이 있는 관리자들이 주로 사용을 한다
문법 GroupPassword groupid hashed-password
기본 설정 기본 적용 안됨
사용 범위 server config,
사용가능버젼 0.99.0pl5 이후 버젼
GroupPassword 지시자는 하나의 password 공유하여 인증을 시킬 그룹이사용 할 특별한 password 를 만든다. group/password 는 오직 GroupPassword 가 적용 될 context 내에서만 효과적으로 사용이 가능하다. hashed-password 인자는 기본 평문 password 이며, 이것은 기본 유닉스 암호화 라이브러리 함수를통해 인증이 되어진다. 그룹 membership이 주의깊게 조절되지 않으면 심각한 보안문제가 발생할 수 있으므로, GroupPassword 을 사용할 때 주의해야한다.
문법 Order allow,deny|deny,allow
기본 설정 Order allow,deny
사용 범위
사용가능버젼 0.99.0pl6 and later
Order 지시자는
거부되며, 그렇치 않으면 접근이 된다.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 로 종료
문법 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를) 파일들을 열려고 시도를 할 것이며, chroot() 로그인이 적용 되어 있는 동안 이 파일들을 열어 놓고 있을 것이다. (/etc/shadow 는 보안상의 이유로 결코계속 열어 놓고 있지는 않는다는 것을 주의하라.) 어떤 플랫폼 에서는,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 이 작동을 안하게 될 수도 있다.
문법 RootLoginl on|off
기본 설정 RootLogin off
사용 범위 server config,
사용가능버젼 1.1.5 이후 버젼
기본적으로, proftpd 는 어떠한 여건 하에서도 root 로그인을 허락하지않는다. 클라이언트가 정확한 패스워드를 가지고서 루트로 로그인을 시도할 때, syslog 로 특별한 보안메세지가 보내지게 된다. RootLogin 지시자를 on 으로 하면, 루트로도 다른 유저로 로그인을 할 수 있듯이 인증을 하여 접속을 할 수가 있다. 그러나 루트 로그인 보안 메세지는 여전히 syslog 에 남게 된다. 이 지시자를 사용 하는데 있어서 아주 세심한 주의를 요한다는 것을 명심하라.
루트 로그인을 가능하게 설정을 한다고 해도, ProFTPd 는 루트 역시 일반 유저로 간주하기 때문에, 다른 유저의 소유를 가진 파일이나 디렉토리들은 건드릴 수가 없다. 그러므로 루트 로그인을 가능하게 하는 것을 권장하지 않는 바이다.
문법 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.