제 목 : vsftpd 설치와 운영 (한글로그 패치 포함) 작성자 : 좋은진호(truefeel, http://coffeenix.net/ ) 작성일 : 2003.10.01(수)
이 글은 7월에 썼던 'vsftpd에서 한글파일로그와 lastlog 로긴확인하기'를 기초로 작성하였다.
vsftpd는 UNIX 시스템에서 사용할 수 있는 free FTP 서버(라이센스는 GPL)이다. vsftpd가 내세우고 있는 것은 보안, 성능, 안정성이다. 지금까지 vsftpd의 자체 보안 문제가 있어 보안권고가 나온 적은 없다.(Redhat의 rpm 패키지중에 tcp_wrappers 지원없이 만들어져서 업데이트 rpm은 나온 적 있음)
* 지원 및 테스트된 OS
- Linux (Redhat, SuSE, Debian) - Solaris (버전에 따라 IPv6나 inet_aton함수때문에 설치가 잘 안될 수 있음) - FreeBSD, OpenBSD - HP-UX - IRIX
* 주요 기능
- 가상 IP별 별도의 환경 설정 기능 (설정파일의 listen_address= 이용) - 가상 사용자 설정 - 전송 대역폭 지정 - PAM 지원 (버전 1.2.0부터는 PAM을 통한 wtmp에 로긴 로그를 남김) - xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원 - Standalone 방식과 inetd(xinetd)를 통한 운영 모두 지원 - IP별 다른 환경 파일 지정 기능 (tcp_wrappers와 함께 사용할 때) - ...
1. vsftpd 설치 ※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다.
------------------------------------------------------------- # tar xvfz vsftpd-1.2.0.tar.gz # cd vsftpd-1.2.0 -------------------------------------------------------------
한글로 된 파일명을 전송할 때 로그에 파일명이 ???? 로 남지 않도록 logging.c 파일을 연 후 140번째 줄의
str_replace_unprintable(p_str, '?');
를 다음처럼 주석 처리한다.
/* str_replace_unprintable(p_str, '?'); */
또한 tcp_wrappers를 통한 접속제어를 사용하려면 builddefs.h 에서
#undef VSF_BUILD_TCPWRAPPERS 를 #define VSF_BUILD_TCPWRAPPERS 로 바꾼다.
------------------------------------------------------------- # make # make install (vsftpd 데몬, man page, xinetd 용 설정 파일 설치) # cp vsftpd.conf /etc (환경설정 파일 복사) # chmod 600 /etc/vsftpd.conf # cp RedHat/vsftpd.pam /etc/pam.d/vsftpd (PAM 설정 파일 복사) -------------------------------------------------------------
즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)
------------------------------------------------------------- # FTP 접속을 허용하지 않을 ID를 등록한다. # /etc/passwd를 참조해서 설치할 서버의 환경에 맞게 등록 root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody smmsp xfs gdm mysql -------------------------------------------------------------
2. vsftpd.conf 의 주요 설정
------------------------------------------------------------- # anonymous 사용자의 접속 허용 여부 (default = YES) # 공개된 형태의 FTP 서버로 운영할 것이 아니라면 NO로 한다. anonymous_enable=NO # 로컬 계정 사용자의 접속 허용 여부 (default = NO) local_enable=YES
# anonymous 사용자가 파일을 업로드 할 수 있는지 여부 (default = NO) # anon_upload_enable=YES # anonymous 사용자의 디렉토리 생성 허용 여부 (default = NO) # anon_mkdir_write_enable=YES
# 파일 전송 로그를 남길 것인지 여부 (default = YES) xferlog_enable=YES # xferlog 표준 포맷으로 로그를 남길지 여부 (기본 설정파일은 YES) # 아래에서 NO로 설정했을 때를 설명함 xferlog_std_format=YES # 파일 전송 로그 파일명 xferlog_file=/var/log/vsftpd.log
# FTP 서버 접속할 때 로긴 메시지 (default = vsFTPd 버전번호) # 한글 사용 가능 # ftpd_banner=Welcome to blah FTP service.
# ------------------------------------------------------------------- # 기본 설정 파일에는 없는 설정값으로 필요한 설정만 추가한다. # ※ 중요한 설정은 굵은 글씨로 표시 # -------------------------------------------------------------------
# PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd명으로 복사함) pam_service_name=vsftpd
# wtmp에 로그 남기기 (YES로 해야만 last 명령어로 접속 여부 확인 가능) session_support=YES
# 사용자가 자신의 home directory를 벗어나지 못하도록 설정 chroot_local_user=YES
# 새로운 디렉토리에 들어갔을 때 뿌려줄 환경 메시지를 저장한 파일명 # message_file=.message
# xferlog 형식으로 log를 남기려면 (위에서 이미 YES로 했음) # xferlog_std_format=NO # # - xferlog 표준 포맷은 로긴, 디렉토리 생성등의 로그를 남기지 않음 # 그러나 vsftpd 스타일 로그는 이를 포함한 보다 상세한 로그를 남김 # - vsftpd 스타일 로그 예 # # Sun Jul 12 01:38:32 2003 [pid 31200] CONNECT: Client "127.0.0.1" # Sun Jul 12 01:38:34 2003 [pid 31199] [truefeel] FAIL LOGIN: Client "127.0.0.1" # Sun Jul 12 01:38:38 2003 [pid 31199] [truefeel] OK LOGIN: Client "127.0.0.1" # Sun Jul 12 01:38:41 2003 [pid 31201] [truefeel] OK MKDIR: Client "127.0.0.1", "/mp3" # Sun Jul 12 01:39:06 2003 [pid 31201] [truefeel] OK UPLOAD: Client "127.0.0.1", "/델리 # 스파이스 5집 - [04]키치죠지의 검은 고양이.mp3", 6855473 bytes, 3857.39Kbyte/sec
# 전송속도 제한 (0은 제한없음, 단위는 초당 bytes) anon_max_rate=0 local_max_rate=0 trans_chunk_size=0
# 최대 접속 설정 (단 xinetd를 통하지 않고 standalone으로 동작할 때만 사용 가능) # standalone을 위해서는 listen=YES 추가하고 별도로 vsftpd를 띄워야 함 # # max_clients=최대 접속자 수, max_per_ip=IP당 접속 수 # max_clients=100 # max_per_ip=3
# Standalone 으로 운영할 때 listen=YES. 포트 변경을 원할 경우 listen_port 설정 # 디폴트 포트는 21번 포트이다. # listen=YES # listen_port=21 -------------------------------------------------------------
5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다.
/etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다. 여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다.
Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd
6) standalone으로 운영하고 싶다. (즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.)
/etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여 xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다.
레드햇의 경우 /etc/rc.d/init.d/xinetd restart
이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin)
# /usr/local/sbin/vsftpd &
7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때)
* xinetd를 이용하는 경우
/etc/service 에 'ftp2 11121/tcp' 한 줄을 추가한다. 그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서 service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다.
* standalone으로 운영하는 경우
/etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다.
바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스)
9. 어떤 프로세스가 메모리를 가장 많이 잡아먹고 있는지 알아내기 ps -aux | sort +4n 또는 ps -aux | sort +5n
10. FTP로 들어온 사용자 확인하기 ftpwho,ftpcount
11. 원하지 않는 사용자 죽이기 skill -KILL sunny 위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는
skill -KILL -v pts/14 이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.
12. less 결과를 vi로 보기 less상태에서 v를 누르면 바로 vi로 감
13. vi에서 블럭 설정하기 alt+v 하면, 라인 단위로 블럭 설정을 할 수 있으며, 해제 하시려면 Esc를 누르면 됩니다. 또한 ctl+v를 하시면, 블럭 단위로 블럭을 설정하실 수 있습니다. 블럭을 설정 하신 뒤,
삭제를 하려면 x 복사를 하려면 y 붙여넣기는 p
14. man 페이지 프린트하기 man -t vi 0.0.0.15 ping 무시하기 echo 1 0.0.0.16 LILO 다시 살리기 boot : vmlinuz root=/dev/hda6
17. 특정 사용자 ftp 접근 막기 /etc/ftpusers 파일에 로그인 네임을 추가하면 됩니다.
18. X 윈도우에서 TV보기 리눅스에서 TV보기 위해서는 드라이버 파일과 TV를 보는 프로그램이 필요합니다. 이 글에서는 미지 리눅스 OS에 탑재된 bttv 칩셋을 사용하는 TV 카드를 기준으로 설명합니다. 만일 커널을 새로 컴파일 하실 분은 반드시 Character devices -
alias char-major-81 bttv # 필립스 튜너의 경우 pre-install bttv modprobe -k tuner # 알프스 튜너의 경우 pre-install bttv modprobe -k tuner type=9
이제 kwintv나 xawtv 등의 TV 시청 프로그램으로 TV를 볼 수 있습니다. 만약 TV 장치를 찾지 못하는 오류가 있다면 bttv driver 디렉토리에 포함된 MAKEDEV 를 실행하십시오.
19. ls라는 파일이 포함된 rpm패키지 찾기 일단 ls의 절대경로를 알아야 한다. which lswhich로 알아낸 ls의 절대경로로 rpm질의를 한다.
rpm -qf /bin/ls [root@piruks /etc]# which ls /bin/ls [root@piruks /etc]# rpm -qf /bin/ls fileutils-4.0i-2mz
20. 현재 rpm패키지의 의존패키지 rpm -qR 패키지명
21. 현재 디렉토리크기 du -h --max-depth=1 .
22. 바로 이전 디렉토리로 가기 cd -
23. 프로세스명으로 프로세스 죽이기 killall 프로세스명 kill -9 `pidof 프로세스명
24. 하드웨어 시계맞추기 배포본을 설치하고 나면 시간이 맞지 않는 경우가 많다. 간단히 어느정도 정확한 시간을 설정하는 방법이다.
25. 원격에서 리모트서버의 X application실행시 X윈도 app를 실행할때 다음과 같은 에러가 나면 조치
[kang@dev /home/kang] xclock Xlib: connection to "211.222.186.170:0.0" refused by server Xlib: Client is not authorized to connect to Server Error: Can't open display: 211.222.186.170:0.0 export DISPLAY=211.222.186.170:0 xhost +211.222.186.170
26. 링크 파일 ln -sf 링크할디렉토리 링크로 만들어질 디렉토리 참고로 링크를 걸기만 한다고 접근가능한것은 아니고,링크가 걸린 디렉토리의 퍼미션도 허용으로 바꿔야 한다. 링크로 만들어질 디렉토리는 저절로 생성되고 퍼미션 777로 잡혔음.
ln -sf /www/dir_1/r_photo /www/dir_2/r_photo
27. ^M 문자 없애기 a = 1^M def vartest(a):^M a = a + 1^M return a^M a = vartest(a)^M print a^M Unix 류 기계에서는 그냥 ^J 하나만을 개행문자로 사용하는데 PC에서는 MJ 이렇게 두 제어문자가 연속으로 사용되어야 개행문자로 받아들이죠. (그래서 PC쪽에서 만들어진 txt문서를 유닉스 기계로 불러와 vi 등을 실행하면 줄 끝마다 보기싫은 ^M이 붙습니다. 뭐 vi에서 요거 지우는건 간단하지만요.)
PC에서 Unix에서 작성한 텍스트 문서를 보통 ftp로 받아오거나 하면 워드패드 등에서 봤을 때 전혀 개행이 되어있지 않지요. 하지만 MS Word 등 좀더 강력한 편집기에선 대개 잘 처리해서 잘 보여줍니다.
위 는 간단한 Python 소스입니다. 위의 경우 처럼 ^M문자가 있을때, dos2unix라는 유틸리티를 많이 사용하기도 하죠. 하지만 vi에서 간단하게 모두 삭제할수도 있습니다. dos2unix가 없거나 빠져나가서 지우는게 귀찮을때 좋겠죠.
명 령은 :%s/(ctrl+v)M//g 입니다. (ctrl+v)M 이거는 ctrl과 v를 눌러준후, ctrl키를 떼지 말고 바로 m을 눌러주시믄 됩니다. 위는 정규표현식을 이용한것이고, 형식은 %s/이것을/요걸로/g 입니다 그럼 문서안의 모든 "이것을" "요걸로" 바꾸게 되죠. 단, M의 경우 ctrl+M의 뜻인데 단순히 문자로 M을 바꾸라도 해도 인식을 못하기 때문에, 위처럼 (ctrl+v)M 으로 해주셔야 합니다.
28. 비어있는 행을 찾기 #grep -n '^$' filename 정 규표현 의미 ^ 행의 처음 $ 행의 끝 . 임의의 한 문자 [...] ... 안의 임의의 한 문자. a-z,0-9 같은 범위도 사용 [^..] .. 안에 없는 임의의 한 문자. 범위 사용가능 r* 0회 이상 r 반복 r+ 1회 이상 r 반복 r? 0 혹은 1회의 r r{n,m} n회 이상 m회 이하 r 반복 r1|r2 r1 혹은 r2 (egrep 만) (r) r 의 정규표현(egrep 만)
29. =====> 맨아래..
30. 각자가 사용하는 컴퓨터의 정보를 알고 싶을때 [root ...]#more /proc/cpuinfo 위와 같이 치면 사용자의 컴퓨터 정보를 볼수 있으며,
[root ...]#more /proc/meminfo 라고 치면 사용자의 메모리 정보를 볼수 있습니다.
31. 전체 메일 먼 저 보낼 내용을 텍스트로 파일로 만들어야 합니다.어디에서든지 가능하지요! [root@aromi /root]# vi nea 안녕하세요! 저희 서버에서는 웹서버를 오늘부터 시작합니다. 사용자 여러분의 많은 관심과 이용을 부탁드립니다.
:wq [root@aromi /root]#
만약, 한글을 사용하지 못하면 윈도우95에서 먼저 쓴다음에 ftp를 이용해서 올리면 됩니다. [root@aromi /root]# mail -s "[공지]" `cat /etc/passwd|gawk ?F :'{print$1}'`
[공지]-
32. 디렉토리만 빠르게 검색 ls -al | grep "^d"
33. 호스트 네임 바꾸기 /etc/HOSTNAME file은 부팅시 /etc/sysconfig/network file 의 HOSTNAME 부분을 참조하여 저장합니다. 호스트 네임을 바꾸고자 한다면 /etc/sysconfig/network file 의 HOSTNAME 부분을 바꿔주면 됩니다.
[root@linux /root]# vi /etc/sysconfig/network NETWORKING=yes HOSTNAME="linux" GATEWAY="" GATEWAYDEV="" FORWARD_IPV4="yes" 바꾸신후 시스템을 재부팅 하신거나, #/etc/rc.d/init.d/network restart 명령을 내리시면 됩니다.
34. 틀린명령어 틀린글자만 바꿔서 실행 # ./configure --prefax=/usr/local/apache 앗, 틀렸습니다. prefax가 아니라 prefix인데... 고쳐야지요...간단하게 화살표키로 왔다갔다 하면서 지워지고 바꿔주면 되겠지만 다른 방법이 있습니다. # ^fax^fix^ 라고 하면... -
35. 유닉스의 현재 버젼과 종류 그리고 라이센스등을 알려주는 명령어 [root@aromi /root]# uname -a
36. 열려있는 포트 알아내기 netstat -anp | grep LISTEN
37. 텔넷 모든 접속자에게 메세지 보내기 wall 내용... Ctrl-D
38. lsof는 열려있는 파일을 나타내 주는 옵션 여기에 보안 점검을 위하여, -i 옵션을 사용하면, 현재 열려 있는 포트와 링크되어 있는 서비스 또는 프로그램이 모두 나타나죠. 자신이 열어 놓지 않은 포트가 열려있다던지하면 한번쯤 의심해 봐도 되겠죠?
39. 사용자가 어디에서 무엇을 하는지 알아내기 w라는 명령어를 사용하시면 된답니다. 이 때, w [-s] 를 붙여주시면 -s 옵션이 긴 정보 대신에 필요한 짧은 정보만 알려 준답니다.
40. 텔넷 화면 수정 로그인화면: /etc/issue.net 로그인후화면: /etc/motd
41. 하위 디렉토리 한꺼번에 만들기 mkdir -p music/koreanmusic/ost
42. 특정디렉토리의 모든 파일 안의 특정 문자열 치환 for i in $*; do sed "s//opt/arm//opt/arm-linux/g" < $i > $i.new mv -f $i.new $i done
(chihwan.sh를 포함하지 않는 디렉토리면) find ./ -type f -exec 'chihwan.sh' {} ; s
43. killall 명령 시뮬레이션 (프로세스명으로 죽이기) ps aux | grep 프로세스명 | grep -v grep | awk '{ print $w }' | xargs kill -9 모든 프로세스 나열 지정한 프로세스만 뽑아냄 grep 명령이 포함된 라인 제거 awk로 두번째 필드만 뽑아냄 xargs에 의해 걸러진 아이디로 죽임
45. vi 검색, 치환 구호스트 서비스 오늘 날짜에서 분류코드가 110100인 파일 찾기 :%s/./U&/g 모든문자-
46. 파일내의 중복되는 행을 제거 : uniq 입 력 파일에서 연속되는 행을 비교하여, 두 번째 이상의 동일한 행들을 제거하고 나머지는 출력파일로 출력 연속되어 표시되지 않으면 동일한 행이 존재할 수 있음. sort 명령을 사용하여 정렬한 후 사용하는 것이 타당 사용법uniq [-cdu] [+|숫자] [입력파일 [출력파일]] -c : 각 행이 연속적으로 나타난 횟수를 행의 시작부분에 표시 -d : 연속적으로 반복되는 행만 출력 -u : 연속적으로 반복되지 않는 행만 출력 +숫자 : 행의 처음 '숫자' 만큼의 문자는 무시 -숫자 : 행의 처음 '숫자' 만큼의 필드는 무시
47. 파일의 결합 여러 개의 텍스트 파일을 하나의 파일로 순차적으로 묶는데 사용 cat [파일명1] [파일명2] ...
% cat
행단위 결합 : paste 여러 파일에 대해여 행간 결합을 수행하거나 하나의 파일에 대해 연속되는 행들을 결합 둘이상의 파일에 대해서 테이블상의 하나의 열과 같이 취급하여 동일한 행번호 끼리 결합
paste [파일명1] [파일명2].. paste -d리스트 [파일명1] [파일명2] ... paste -s [-d리스트] [파일명] d : 행간 결합시 행간 구분문자들의 리스트 s : 한파일의 연속되는 행을 결합
% cat
두 파일을 동일한 필드 값에 따라 행 단위 결합 : join
관 계형 데이터 베이스에서의 join 연산과 동일 키로 사용할 필드에 대해 정렬된 두 파일의 각 행에 대해 동일한 키 값을 갖는 행들을 결합 입력으로 사용될 두 파일은 키 값에 대해 오름 차순으로 정렬되어 있어야 함 출력 결과는 기본적으로 키 값이 먼저 표시되고, 첫번째 파일에서 키를 제외한 나머지 필드, 두번테 파일에서 키를 제외한 나머지 필드가 표시 필드 구분은 공백, 탭, 개행문자가 기본, 연속적으로 나타날 경우 하나로 취급
% cat
48. 파일의 암호화 : crypt 파일을 암호화 하여 키를 알지 못하는 사람은 내용을 볼 수 없도록 함 표준 입출력 사용
% cat < crypt.data1 Enter key:hello test test 안녕하십니까? %
51. 특정 파일의 화일명을 비슷하게 여러개 한꺼번에 바꾸기 ls *.* | awk '{print "mv",$1, $1 }' |
sed "s/ ([a-zA-Z0-9]*).([a-zA-Z0-9]*)$/1._2/g" 현재디렉토리의 모든 *.* 파일을 *._* 형식으로 바꾼다. 더 간단하게
ls *.* | sed "s/([a-zA-Z0-9]*).([a-zA-Z0-9]*)/mv 1.2 1._2/g" --------------------------------------------------------------------------------
52. 어제 날짜 구하기 $ date -v-1d "+%Y-%m-%d" [컴퓨터분류]
53. 원하지 않는 사용자 죽이기 [root@dream /root]# skill -KILL sunny 위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다. 그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠? 그럴때는
[root@dream /root]# skill -KILL -v pts/14 이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.
54. UNIX상에서 한글출력이 깨져 나올경우 유 닉스상에서 한글을 stdout출력할 경우 가끔 출력되는 문자들이 몽땅 깨져서 나오는 경우가 있다. 이때부터는 프로그램이 종료된 이후에도 쉘 프람프트를 비롯, 쉘에서 입력하는 모든 커맨드가 깨져서 나온다. 이는 ascii code 로 ^n 에 해당하는 문자가 출력될 때 나오는 현상으로 그 이후로는 MSB가 모두 켜지기 때문이다. 문자가 깨져나오는 이후부터 ascii code 로 ^o 에 해당하는 문자를 출력하면 반대로 된다. 쉘 커맨드 상에서라면, # echo ^v^o 라고 해야겠지만 커맨드가 깨져나오므로 shell이 해석을 못한다. 따라서, command line에서 ^v^o를 치고 enter 하면 된다
55. 현재 디렉토리의 대량의 파일을 각자의 파일명가운데에 특정문자 추가하여 바꾸기
29. 기타 명령어 떼 alias(명령어 간소화하기) apropos(관련된 명령어 찾기) arch(컴퓨터 종류 알기) arp(같은 서브넷의 IP 보여주기) at(작업 시간 정하기) atd(계획성 있는 작업 실행하기) awk(특정 패턴 문자 처리하기) a2p(펄 파일로 바꾸기) badblocks(배드 블럭 검사하기) bc(계산기) biff(메일 수신 소리로 확인하기) bg(후면작업; 배경화면 설정) bind(키나 함수 순서 결합하기) break(루프 빠져나가기) cal(달력보기) builtin(내부 명령어 알아보기) case(조건 처리하기) cat(화면상에서 파일 보기) cd(디렉토리 변경하기) cfdisk(디스크 설정하기) chattr(파일 속성 변경하기) chfn(사용자 정보 변경하기) chgrp(파일, 디렉토리가 속했던 그룹 바꾸기) chmod(파일 권한 바꾸기) chown(파일 주인 바꾸기) chsh(지정된 셸 바꾸기) cksum(CRC값을 점검한다) clear(화면 청소하기) clock(CMOS 시각을 조정하기) cmp(파일 비교하기) colcrt(문자 변환 필터) colrm(열 삭제하기) column(가로 정렬하기) comm(파일 비교 출력하기) command(명령어 알아보기) continue(루프 계속돌기) cp(파일 복사하기) cpio(복사본 만들기) crontab(cron을 관리한다) csplit(파일에 서식, 규칙 정하기) cut(필요한 필드만 출력하기) date(날짜 보기) dd(블럭장치 읽고 쓰기) debugfs(ext2 파일 시스템 디버깅하기) declare(변수 선언하기) df(파일 시스템의 사용량 보기) dirs(디렉토리 목록 표시하기) dmesg(부팅 메시지 보기) dnsdomainname(DNS 이름 출력) domainname(NIS 이름 출력&설정) du(디렉토리와 파일의 용량 파악하기) dumpe2fs(파일 시스템 정보 보기) echo(표준 출력하기) eject(장치 해제하기) elm(메일 관련) enable(내부 명령어 지정) env(환경변수 출력하기) eval(인수 읽기) exec(셸 명령어 실행하기) exit(종료하기) expand(탭을 공백으로 변환하기) export(변수 지정하기) e2fsck(파일 시스템 복구하기) fc(지정된 편집기 받기) fdformat(플로피 디스크 포맷하기) fdisk(파티션 나누기) fg(지정된 작업을 전면 프로세스로 시작하기) file(파일 종류 보기) find(파일 찾기) finger(사용자 정보 알기) fold(정형화하기) fmt(정형화하기) for(반복 실행하기) free(메모리 사용량 알아보기) fsck(파일 시스템 검사하기) fstab(파일 시스템에 대한 고정적인 정보 저장하기) ftp(파일 전송 프로그램) fuser(프로세스 ID 출력) getkeycodes(매핑 테이블 출력하기) grep(특정 문자(열) 검색하기) gzexe(실행 파일 압축하기) gzip(압축하기) halt(시스템 종료하기) hash(기억해 두기; index 역할) head(파일의 앞부분 출력하기) help(도움말 보여주기) host(호스트 정보 보기) history(사용 명령어 목록보기) hostname(서버 이름 알기) id(계정 정보 알기) if(조건문 실행하기) ifconfig(랜카드에 주소 할당하기) imolamod(모듈 설치하기) inetd(인터넷 서비스의 최상위 데몬) init(실행 단계 정하기) ispell(철자법 검사하기) jobs(수행중인 프로세스 알기) kbd_mode(키보드 모드 출력하기) kill(프로세스 죽이기) klogd(커널 로그 데몬) ldd(공유 라이브러리의 의존성 알기) less(페이지 단위로 출력하기) let(정규식 표현하기) lilo(부팅하기) ln(링크하기) locate(패턴에 맞는 파일 찾기) login(로그인하기) logger(시스템 로그 기록하기) logname(사용자 로그인명 보여주기) logout(로그인 셸 종료하기) look(특정 단어 검색하기) losetup(중복 장치 확인하기) lpd(프린트 데몬) lpq(현재 프린트 작업 상태 출력하기) lpr(출력하기) lprm(대기열에 있는 문서 삭제하기) ls(디렉토리 내용보기) lsattr(파일 시스템의 속성 보여주기) lsdev(하드웨어 장치 출력하기) lsmod(모듈 정보 출력하기) mail(메일 관련) make(컴파일하기) man(매뉴얼 보기) mattrib mbadblocks mcd mcopy mdel mdeltree mdir mesg(메시지를 받을 수 있는지 확인하기) mformat minfo mkdir (디렉토리 만들기) mke2fs(파일 시스템 생성하기) mkfs(파일 시스템 만들기) mknod(특수 파일 만들기) mkswap(스왑 영역 지정하기) mlabel mmd mmount mmove mpartition mount(장치 연결하기) more(화면 단위로 출력하기) mrd mren mtoolstest mtype mutt(메일 관련) mv(파일 옮기기) mzip netstat(현재 네트웍 상황 보기) nice(프로세스 우선 순위 변경하기) od(8진수로 파일 보기) passwd(암호 입력하기) pidof(실행중인 프로그램의 프로세스 ID 찾기) pine(메일 관련) ping(네트웍 확인하기) popd(pushd 취소) ps(프로세스 纘?알기) pstree(프로세스 상관관계 알기) pwd(절대경로 보여주기) quota(디스크 한계량 알기) rarp(rarp 테이블 관리하기) rcp(원격 호스트에 파일 복사하기) rdev(루트, 스왑장치, 램 크기, 비디오 모드를 조사하고 설정하기) rdate(네트웍으로 시간 설정하기) reboot(재부팅하기) rmmod(모듈 지우기) readonly(읽기 전용으로 표시하기) renice(프로세스 우선 순위 바꾸기) reset(터미널 초기화하기) restore(다시 저장하기) rlogin(바로 접속하기) rm(파일 지우기) rmdir (디렉토리 지우기) route(라우팅 테이블 추가/삭제하기) rpm(프로그램 추가/삭제) rpm2cpio(rpm을 cpio로 변환하기) rsh(원격으로 명령어 실행하기) rup(호스트 상태 출력하기) rusers(호스트에 로그인한 사용자 출력하기) rwall(호스트 사용자에게 메시지 뿌리기) script(기록하기) set(변수값 설정하기) setup(시스템 관련 설정하기) showmount(호스트의 마운트 정보 보여주기) shutdown(전원 끄기) sleep(잠시 쉬기) source(스크립트 번역하기) split(파일 나누기) ssh(암호화된 원격 로그인하기) stty(터미널라인 설정 보여주기) su(계정 바꾸기) suspend(셸 중단하기) swapoff (스왑 해제하기) swapon(스왑 활성화하기) sync(버퍼 재설정하기) syslogd(로그인 과정 설정하기) tac(거꾸로 보기) tail(문서 끝부분 출력하기) talk(이야기하기) tar(파일 묶기) tcpdchk(tcp wrapper 설정하기) tcpmatch(네트웍 요청에 대해 예측하기) tee(표준 입력으로부터 표준 출력 만들기) telnet(원격접속하기) test(테스트하기) times(셸에서의 사용자와 시스템 시간 출력하기) top(cpu 프로세스 상황 보여주기) tr(문자열 바꿔주기) true(종료 코드 리턴하기) type(유형 보기) ul(밑줄 처리해서 보여주기) ulimit(제한하기) umask(매스크 모드 설정하기) umount(장치 해제하기) unalias(별명 제거하기) uname(시스템 정보 보기) unexpand(공백 문자를 탭으로 변환하기) uniq(중복된 문장 찾기) useradd(사용자 계정 만들기) userdel(계정 삭제하기) usermod(사용자 계정정보 수정하기) unset(설정 변수 해제) uptime(시스템 부하 평균 보여주기) users(로그인된 사용자 보여주기) w(시스템에 접속한 사용자 상황 알아보기) wait(프로세스 기다리기) wall(모든 사용자에게 메시지 보내기) wc(문자, 단어, 라인수 세기) whatis(명령어의 간단한 설명보기) while(루프 명령어) who(사용자 알기) write(콘솔 상에서 간단한 메시지 보내기) xcopy(반복적으로 복사하기) XFree86 ypchfn(NIS에서 사용하는 chfn 명령어) ypchsh(NIS에서 사용하는 chsh 명령어) yppasswd(NIS에서 사용하는 passwd 명령어) zcat(압축 파일 보기) zcmp(압축 파일 비교하기) zforce(강제로 gz 만들기) zgrep(압축 상태에서 grep 실행하기) zmore(압축 상태에서 more 실행하기) znew(.Z 파일을 .gz로 다시 압축하기)
앞 강좌인 proftp에서도 언급을 하였지만 바로 vsftp를 보시는분을 위하여 약간의 중복내용이 있겠습니다.
FTP는 "File Transfer Protocol" 의 약자로써 쉽게 말해 서버에(=홈페이지) 에 자료를 올리기위한 규정같은 것이라고 보시면 됩니다. 다른 자료들을 보면 구구절절 내용이 많은데 내용적인 측면을 공부하시려면 좀더 자료를 찾아 보시고 여기서는 간략하게 Linux 에서 ftp를 설치하고 사용하는데 필요한 계념및 정보들을 알려드리는게 맞는것 같습니다.
일반사람들이 자신의 계정이나 혹은 무계정으로 ftp에 접속하여 홈페이지자료를 올린다거나 음악,영화,프로그램의 저장목적으로 많이 사용하며 기타 저장매체가 없어도 인터넷만 된다면 아주 효율적으로 자료를 확보할수있기 때문에 ftp를 씁니다. 관리자 입장에서는 백업과 서버이전작업시 꼭 필요한 서비스이겠지요... ^^
먼저 ftp는 port 21 을 사용합니다. 보통전송모드에는 아스키모드(일반모드) 와 패시브모드(보안이강화된 모드) 가 있습니다. 우리가 설치할(컴파일로) vsftp 의 설정파일은 서버단에서 /etc/vsftpd.conf 입니다. =>/usr/local/아래에 설치를 하는데 설치후 vsftpd.conf를 /etc 아래로 복사하여 설정합니다. 참고 하시길 바랍니다. 설정파일인 vsftpd.conf 에서 ftp에 관련된 모든 내용을 셋팅할수있습니다. 그리고 proftp보다 좀더 보안적으로 성격이 강하며 성능면에서도 더 좋다고 느꼈습니다. 이 내용은 이 강좌 마지막부분에서 낫낫히 알려 드리겠습니다.
그럼 이제 사뿐히 설치해 볼까요... (컴파일로 설치합니다. rpm은 누구나 한번에 설치다 하니 추후에...)
자 위의 결과처림 아직 21번포트를 LISTEN하고 있는 ftp 서비스는 보이질 않는고 sendmail 및 ssh등의 서비스만이 있음을 알수있다. 그리고 pstree라는 명령어로 ftp프로세서가 있는지도 확인해 봅니다. 혹시나 설치가 되어있더라도 중복설치 가능하니 걱정말고 다음 관정으로 넘어간다.주의할점은 어떤것이든지 덮어씌워 설치를 할때는 그 서비스는 내려놓고 하는것이 정석입니다. ^^
vsftp 를 다운받아 설치하기 항상 말하는것이지만 컴파일설치시 보통 /usr/local/에서 주로 합니다. 그러나 이것은 절대적인것은 아니며 만약 rpm으로 설치를 하시면 경로는 대부분 /etc/아래에 설정파일같은것들이 다 들어가게 됩니다. 참고하시구요. 다음과같이 다운로드하고 설치합니다.
=> 위의메세지가 보이면 설치가 정상적으로 된것입다. 나무색의 글씨처럼 /etc/xinetd.d/vsftpd 에서 우리는 수퍼데몬에서 vsftp를 실행하는 파일이 저기있구나라고 유추할수있고 실제로 이파일의 정보를 참고하여 프로세스를 띄워주게 됩니다.
자 vi /etc/xinetd.d/vsftpd 해봅니다. # default: on # description: # The vsftpd FTP server serves FTP connections. It uses # normal, unencrypted usernames and passwords for authentication. # vsftpd is designed to be secure. service ftp { disable = no (disable 즉 불가능이 no 니까 서비스를 가능한상태로 두겠다라는 의미) socket_type = stream wait = no user = root server = /usr/local/sbin/vsftpd # server_args = # log_on_success += DURATION USERID # log_on_failure += USERID nice = 10 }
위의 내용에서 disable = no로 되어있어야 합니다. server = /usr/local/sbin/vsftpd 부분은 실제 수퍼데몬이 참조하는 실행파일입니다.
약간다르지요. 그냥 데몬을 띄우는거랑은 조금 차이를 느끼실겁니다. 자 확인을 하셨으면 이제 데몬을 띄워봅니다. 이렇게 하세요..
자 netsysv로 선택했던 직접 vi /etc/xinetd.d/vsftpd 를 체크하던지 둘중에서 편안한 방법을 사용하신다음 아래와같이 슈퍼데몬을 재가동하면 포트도 열린것을 확인할수있고 pstree 하시면 프로세서가 딱 띄워져 있는것을 확인하실수 있을 것입니다.
[root@lecture ~]# /etc/rc.d/init.d/xinetd restart xinetd 를정지함: [ 확인 ] xinetd(을)를 시작함: [ 확인 ]
vsftp데몬이라하여도 슈퍼데몬이 이를 관리하여 띄워주므로 표시는 xinetd라고 표시되나 포트번호를 보면 21번이라고 ftp가 추가되었음을 알수가 있습니다.
여기까지가 vsftp의 설치과정및 실행방법입니다.
설치만한다고 해서 바로 사용할수있는 것은 아닙니다. 이시죠? ^^
가장 기본적인 vsftpd.conf를 설정해주셔야지 비로서 외부에서 접속할수있겠지요.
protfp보다 더욱 체계적으로 보안셋팅을 할수있는 vsftpd.conf 를 해부해 봅시다.
3. vsftpd.conf 완전 분석하기
ftp의 계념과 설치방법에 대해 알아보았습니다. 별 어려움 없이 넘어오셨을 것입니다. 마지막으로 설치후 기본적인 셋팅과 보안적인 셋팅등 입맛에 맛게 ftp를 설정하는데 /etc/vsftpd.conf 설정파일이 그것이며 기본셋팅및 다른 어떤 셋팅 항목들이 있는지 직접 설정파일을 열어 항목들과 설명만 정리하였습니다. 빨간색 부분은 최소 기본적으로 해주셔야 할 것들이고 나머지는 상황에 따라 하시면 됩니다. 특히 vsftp와는 다르게 접근계정을 파일에 명시하고 접속을 허락하고 거부하는 정책을 유심히 보시길 바라면 다른 사항은 비슷합니다.
# ascii 모드 파일을 취급(업,다운로드)할거냐? #ascii_upload_enable=YES #ascii_download_enable=YES
# ftp서버접속시 보여줄 멘트 #ftpd_banner=Welcome to blah FTP service.
# 이자식은 좀 웃깁니다. # 단순히 yes , no 계념이 아니고 # 먼저 yes를 하면 다름 나오는 파일에 명시된 # 계정들을 chroot(홈디렉토리 위로갈수있는) 하겠다라는 # 뜻이되고 no를 하면 아래파일에 적힌 계정들만 # chroot 못하게 하겠다라는 뜻 #chroot_list_enable=YES #chroot_list_file=/etc/vsftpd.chroot_list
######################################################### # # 여기서부터는 기본 설정에는 없고 필요시 추가해서 # # 쓰는 설정들입니다. # #########################################################
# PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd명으로 복사함) pam_service_name=vsftpd
# wtmp에 로그 남기기 (YES로 해야만 last 명령어로 접속 여부 확인 가능) session_support=YES
# 사용자가 자신의 home directory를 벗어나지 못하도록 설정 chroot_local_user=YES
# 새로운 디렉토리에 들어갔을 때 뿌려줄 환경 메시지를 저장한 파일명 # message_file=.message
# xferlog 형식으로 log를 남기려면 (위에서 이미 YES로 했음) # xferlog_std_format=NO # # - xferlog 표준 포맷은 로긴, 디렉토리 생성등의 로그를 남기지 않음 # 그러나 vsftpd 스타일 로그는 이를 포함한 보다 상세한 로그를 남김 # - vsftpd 스타일 로그 예 # # Sun Jul 12 01:38:32 2003 [pid 31200] CONNECT: Client "127.0.0.1" # Sun Jul 12 01:38:34 2003 [pid 31199] [truefeel] FAIL LOGIN: Client "127.0.0.1" # Sun Jul 12 01:38:38 2003 [pid 31199] [truefeel] OK LOGIN: Client "127.0.0.1" # Sun Jul 12 01:38:41 2003 [pid 31201] [truefeel] OK MKDIR: Client "127.0.0.1", "/mp3" # Sun Jul 12 01:39:06 2003 [pid 31201] [truefeel] OK UPLOAD: Client "127.0.0.1", "/델리 # 스파이스 5집 - [04]키치죠지의 검은 고양이.mp3", 6855473 bytes, 3857.39Kbyte/sec
# 전송속도 제한 (0은 제한없음, 단위는 초당 bytes) anon_max_rate=0 local_max_rate=0 trans_chunk_size=0
# 최대 접속 설정 (단 xinetd를 통하지 않고 standalone으로 동작할 때만 사용 가능) # standalone을 위해서는 listen=YES 추가하고 별도로 vsftpd를 띄워야 함 # # max_clients=최대 접속자 수, max_per_ip=IP당 접속 수 # max_clients=100 # max_per_ip=3
# Standalone 으로 운영할 때 listen=YES. 포트 변경을 원할 경우 listen_port 설정 # 디폴트 포트는 21번 포트이다. # listen=YES # listen_port=21