'vsftpd'에 해당되는 글 2건

  1. 2012.08.17 vsftpd on fedora8
  2. 2007.12.05 vsftpd 설정 -_-

vsftpd on fedora8

Linux 2012. 8. 17. 16:46

개인적으로 Fedora 시리즈를 좋아하지 않는다.  왜냐고 묻는 사람에겐 할말은 없다.  ㅋㅋ 싫은게 이유가 있고 좋은게 이유가 있나요... 그냥 싫고 좋은거지.. ㅋㅋ 

영원히 끝장나지 않는 종교전쟁이나 하자고 100년만에 블로그에 글을 올리는 것은 아니니, 본론으로 들어가자.

회사에서 사용하는 빌드 서버에는 Fedora 8이 설치되어있다.  설치한 분이 퇴사하면서 아무도 관리하지 않는 무법지대가 된지 오래...

어렵사리 받은 영화 파일야동을 팀에 공유하기 위해 팀 빌드 서버의 FTP를 사용하려고 했건만... FTP 접속이 안된다.  뭐지? FTP도 설치 안한거야?

Ubuntu를 알기전엔 나도 Fedora를 썼다고.. ㅋㅋ yum으로 설치하는 것은 어렵지 않지.

# sudo su - (이게 그냥 되다니... Ubuntu의 버릇인가..)

# yum install vsftpd

# service vsftpd start

자.. 이제 올려볼까? 하고 FileZilla를 띄우고 접속을 시도하지만 접속이 되지 않는다.  뭘까? 하고 VMWare에 설치되어있는 Ubuntu를 사용하여 console로 접속하니 속도가 좀 느리긴 하지만 접속이 된다.  FTP prompt에서 ls 명령도 먹는다!! 하지만 사내 네트워크인데 이렇게 느릴리가? 하는 의구심이 들기 시작한다.  뭔가 이상하다.  Process와 port 확인해본다.

# ps -ef | grep ftp

# netstat -a | grep ftp

tcp 0 0 *:ftp *:* LISTEN

Process는 돌고 있지 않은데 port만 열렸다.  닫지 않고 그냥 process가 죽어버려서 열려있나? vsftpd의 상태는 과연 무엇인가?

# /etc/init.d/vsftpd condrestart

vsftpd dead but subsys locked

예상대로 socket을 닫지 못하고 죽어버린 것 같다. (근데 어떻게 FTP client는 동작하는거지???) VSFTPD 소스코드를 후벼파고 싶으나 몰래 영화야동를 올리는 주제에 그것까지는 좀 안될것 같은 느낌이 든다.  subsys는 뭘까? 대부분의 배포판 Linux system에서 대부분의 lock 파일은 /var/lock에서 관리된다.  가보니 subsys라는 디렉토리가 있군.  이 디렉토리에 대해서 fcntl() 로 file lock을 건 것으로 보인다.  그럼, /var/lock/subsys/ 디렉토리에 있는 파일을 살펴볼까.

-rw-r--r-- 1 root root 0 2012-07-31 07:50 acpid
-rw-r--r-- 1 root root 0 2012-07-31 07:51 atd
-rw-r--r-- 1 root root 0 2012-07-31 07:50 auditd
-rw-r--r-- 1 root root 0 2012-07-31 07:50 autofs
-rw-r--r-- 1 root root 0 2012-07-31 07:51 avahi-daemon
-rw-r--r-- 1 root root 0 2012-07-31 07:50 bluetooth
-rw-r--r-- 1 root root 0 2012-07-31 07:51 ConsoleKit
-rw-r--r-- 1 root root 0 2012-07-31 07:51 crond
-rw-r--r-- 1 root root 0 2012-07-31 07:51 cups
-rw-r--r-- 1 root root 0 2012-07-31 07:51 haldaemon
-rw-r--r-- 1 root root 0 2012-07-31 07:50 hcid
-rw-r--r-- 1 root root 0 2012-07-31 07:50 iscsi
-rw-r--r-- 1 root root 0 2012-07-31 07:50 iscsid
-rw-r--r-- 1 root root 0 2012-07-31 07:50 kudzu
-rw-r--r-- 1 root root 0 2012-07-31 07:51 libvirtd
-rw-r--r-- 1 root root 0 2012-07-31 07:51 local
-rw-r--r-- 1 root root 0 2012-07-31 07:50 messagebus
-rw-r--r-- 1 root root 0 2012-07-31 07:50 microcode_ctl
-rw-r--r-- 1 root root 0 2012-07-31 07:51 nasd
-rw-r--r-- 1 root root 0 2012-07-31 07:50 netfs
-rw-r--r-- 1 root root 0 2012-07-31 07:50 network
-rw-r--r-- 1 root root 0 2012-08-13 09:54 nfs
-rw-r--r-- 1 root root 0 2012-07-31 07:50 nfslock
-rw------- 1 root root 0 2012-07-31 07:50 pcscd
-rw-r--r-- 1 root root 0 2012-07-31 07:50 rpcbind
-rw-r--r-- 1 root root 0 2012-07-31 07:50 rpcidmapd
-rw------- 1 root root 0 2012-07-31 07:50 rsyslog
-rw-r--r-- 1 root root 0 2012-07-31 07:51 sendmail
-rw-r--r-- 1 root root 0 2012-07-31 07:51 smb
-rw-r--r-- 1 root root 0 2012-07-31 07:51 sm-client
-rw-r--r-- 1 root root 0 2012-07-31 07:51 sshd
-rw-r--r-- 1 root root 0 2012-08-17 15:04 xinetd
-rw-r--r-- 1 root root 0 2012-07-31 07:51 yum-updates

졸라 많네.  어쨌든 VSFPTD는 이곳에 자기의 파일을 만들기 위해서 fcntl로 get lock을 try한 것으로 보이고, 어떤놈이 잡고 있어서 실패했을 것이라고 추측한다.  어떤놈이 잡고 있는거냐? fcntl로 잡았다면 open을 했을 것이고, close를 하지 않았겠지? 하고 검색해보지만 내 예측은 빗나간다.

# find /proc -name fd -exec ls -al {} \; grep subsys

저기있는 수많은 daemon을 stop해보는 건 무리라고 판단, 제일 눈에 익은 xinted부터 시도해봤는데.  운이 좋은건지 한방에 잡은 놈을 찾았군... ㅋㅋ

# serivce xinetd stop;service vsftpd start;service xinetd start

# ps -ef | grep ftp

root 24160 1 0 15:03 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.con

오... 접속 된다... FTP 띄우기가 이렇게 힘들다니... 제기랄... Linux를 하도 안썼더니 감을 잃었군...

2012/09/04에 추가한 내용 - xinted에서 ftp service로 proftp란 놈을 사용하면서 발생한 문제였던 것 같다....... 제길슨..

service ftp
{
      socket_type = stream
      wait = no
      user = root
      server = /usr/sbin/in.proftpd
      log_on_success += DURATION USERID
      log_on_failure += USERID
      nice = 10
      disable = no
}

disable을 yes로 바꾸고 xinetd 를 restart시키고 vsftp를 start시키니 제대로 돈다.  셋!

TODO : subsys 고 는 을 을 수 는 법 

2012/10/15에 추가한 내용 -

지난번 TODO로 subsys를 잡고 있는 놈을 찾을 수 있는 방법을 강구하는 것이 목표였는데 이건 컨셉을 잘못 잡았다.  Source code를 받아서 확인한 결과, port 번호 21번에 대해 이미 proftpd가 동작하고 있었으므로, 해당 port에 bind가 실패하면서 subsys/vsftpd가 미처 지워지지 않고 종료된 것이 "vsftpd dead but subsys locked" 의 원인이다.  해당 메세지가 발생하는 것은 vsftpd의 source code가 아닌,  /etc/init.d/functions에서 발생시키는 것으로, 이미 파일이 존재하고 있다면 해당 메세지를 출력하게끔 되어있다.

        if [ -f /var/lock/subsys/${base} ]; then
                echo $"${base} dead but subsys locked"
                return 2
        fi

결국 subsys/vsftpd를 잡고 있다는 것은 fcntl(3)의 lock이나 기타 기능들이 아닌, 그냥 파일이 존재하는지에 대한 여부를 말하는 것이었다.  음..... 역시 source code를 봐야 되는건가?

Posted by 강군님

댓글을 달아 주세요

vsftpd 설정 -_-

Linux 2007. 12. 5. 09:13
linux 한번 새로 밀때마다 이놈의 설정들이 문제다. 개인적으로 linux는 이게 문제라고 생각한다. 설정이 너무 여기저기 흩어져 있는거... 물론 windows도 문제라고 생각하지만.

개인적으로 위안을 삼는 것은 나는 서버 관리자가 아니잖아? 하고 나름대로 위안하는건데... 어쨌든... 찾기도 귀찮으니까 정리를...

/etc/vsftpd.conf를 열어 필요한 것만 수정하면...

# anonymous 사용자의 접속 허용 여부 (default = YES)
# 공개된 형태의 FTP 서버로 운영할 것이 아니라면 NO로 한다.
anonymous_enable=NO
# 로컬 계정 사용자의 접속 허용 여부 (default = NO)
local_enable=YES

# write 명령어 허용 여부 (defualt = NO)
write_enable=YES
# 로컬 계정 사용자용 umask (default = 077)
local_umask=022

# 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.

# 사용자의 홈디렉토리를 벗어나지 못하도록 제한하기 위한 설정 (default=NO)
# 제한이 필요할 경우 YES로 바꾼 후 제한할 사용자 ID를 chroot_list_file= 에 설정한 파일에
# 지정한다.
# chroot_local_user= 설정과 관련이 있으니 '3. 문제 해결'을 꼭 읽어보라.
#
# 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

Posted by 강군님
TAG linux, vsftpd

댓글을 달아 주세요