'solaris10'에 해당되는 글 1건

  1. 2009.08.03 solaris10 vsftp 설치 및 포트변경
OS/SOLARIS2009. 8. 3. 15:03
반응형
출처 :http://blog.tinyfall.net/142

기본 ftp 삭제

# pkginfo | grep ftp
로 FTP에 관련된 패키지 목록 확인

# svcs | grep ftp
확인
# svcadm disable /network/ftp
라고 쳐서 ftp 정지

ftp 삭제
# pkgrm SUNWftpr SUNWftpu


Solaris10에서 일반적인 형태로 (ssl 와 익명접속 제외,  tcp_wrappers 포함) 설치하는 것을 정리해 볼까 합니다.

간단설명
VsFTPD는 Very Secure FTP Daemon의 약자이며, 이름에서 그대로 나오듯이 보안에 매우 신경을 쓴 데몬입니다. 레드햇, 데비안 등의 기본 패키지에 포함이 될 정도라고 하며 사이트에서도 그렇게 홍보하고 있군요. 제 개인적으로는 별다른 신경을 안써도 손쉽게 컴파일 및 설치가 된다는 장점이 가장 큰 것 같습니다.


vsftpd 다운로드


vsftpd 홈페이지 : http://vsftpd.beasts.org

vsftpd-2.0.5.tar.gz 다운로드

한글을 위한 소스 수정
기본적으로 UTF8같은 유니코드를 지원하지 않으므로 source 파일을 수정해 주어야 한글이 제대로 로그파일이나 전송처리가 됩니다. 그렇지 않으면 표준 ASCII 문자 외에는 모두 ?(물음표)로 처리해 버립니다.

logging.c 파일을 vi로 불러들여 아래 라인을 주석처리합니다. (157 라인입니다.)

원본 : str_replace_unprintable(p_str, '?');
변경 : /* str_replace_unprintable(p_str, '?'); */

postlogin.c 파일을 vi로 불러들여 아래 라인을 주석처리합니다. (121 라인입니다.)

원본 : str_replace_unprintable(&proctitle_str, '?');
변경 : /* str_replace_unprintable(&proctitle_str, '?'); */

또한 tcp_wrappers를 지원하기 위해서는 builddefs.h 파일을 불러서 아래와 같이 수정합니다.

원본 : #under VSF_BUILD_TCPWRAPPERS
변경 : #define VSF_BUILD_TCPWRAPPERS

그리고 solaris는 PAM을 지원하지 않으므로 바로 밑에 있는 PAM 지원부분을 무효화시켜줍니다.(이 부분을 설정하지 않으면 컴파일시 에러가 줄줄줄주루루루루루 뜹니다.)

원본 : #define VSF_BUILD_PAM
변경 : #undef VSF_BUILD_PAM


vsftpd 컴파일 및 설치
vsftpd는 기본적으로 configure 작업이 없습니다. 그냥 make 하시면 됩니다. 조심하실 것은 INSTALL 문서에 있는대로 make install 을 하시면 안됩니다. vsftpd는 리눅스 계열의 운영체제를 기본으로 만들어져 있으므로 xinetd 등을 이용하도록 설정되어 있는데, solaris에서는 해당 데몬이 존재하지 않습니다. 게다가 solaris10으로 올라오면서 서비스 관리를 svcs 또는 svcadm, inetadm 등 패키지로 분리되어 운영됩니다. 그러므로 make 만 실행하셔서 컴파일만 하시고 나머지 설치작업은 수동으로 하셔야 합니다.

컴파일 화면(성공)

컴파일 화면(성공)


만일 위의 builddefs.h 부분에서 PAM 부분을 undeine 시켜주시기 않았다면 아래와 같은 경고가 뜨고 운영중에 로그인이 안되거나 에러가 발생하는 경우가 생깁니다.(PAM을 undefine 시키면 shadow 모드로 동작하는 듯 합니다.)

사용자 삽입 이미지

컴파일이 무사히 넘어갔다면 vsftpd 파일이 생성되어있습니다.

사용자 삽입 이미지

vsftpd 파일의 생성을 확인하셨다면 아래와 같이 관련 파일들을 세팅합니다.

# mkdir /usr/local/sbin   ;; 없는 경우만 만들어 주시면 됩니다.
# cp vsftpd /usr/local/sbin 
# chmod 755 /usr/local/sbin/vsftpd

# cp vsftpd.conf.5 /usr/share/man/man5   ;; vsftpd.conf 매뉴얼 복사
# cp vsftpd.8 /usr/share/man/man8          ;; vsftpd 매뉴얼 복사
# mkdir /usr/share/empty
# chown root:root /usr/share/empty
# chmod 755 /usr/share/empty
# cp vsftpd.conf /etc                 ;; 설정파일 복사


vsftpd를 Solaris 10의 SMF에 연결
이젠 남은것은 실행하는 방법입니다.
solaris10 에서는 inetd 서비스가 SMF(Service Management Facility)로 통합운영되어 집니다. 모든 서비스 관리는 svcadm 명령으로 제어할 수 있는데, 네트워크 관련 서비스는 inetadm 이라는 명령을 이용하여 특별히 관리할 수 있습니다. vsftpd를 SMF 서비스로 등록하여 이용하면 편리하게 관리할 수 있도록 합니다. (자세한 기타 내용은 마지막에 참고사이트를 보세요.)

우선 첫번째로 /etc/services 파일 내용중 ftp 가 기술되어 있는지 확인합니다.
사용자 삽입 이미지

현재 디렉토리에 아래와 같은 내용을 /etc/inetd.conf 라는 내용으로 저장합니다.

ftp stream tcp nowait root /usr/sfw/sbin/tcpd /usr/local/sbin/vsftpd

※ 미리 tcp_wrappers 가 설치되어 있어야 합니다.

그리고 아래 명령을 수행하면 smf 관련 명령으로 확인하거나 관리하실 수 있습니다.

# inetconv -i inet.ftp
# svcs -a | grep ftp
online          21:02:07    svc:/network/ftp/tcp:default      <== vsftpd 데몬이 서비스로 등록된 모습

이후부터 서비스의 시작과 중지를 아래와 같이 수행할 수 있습니다.

# svcadm enable /network/ftp/tcp:default     ;; vsftpd 서비스 시작
# svcadm disable /network/ftp/tcp:default  ;; vsftpd 서비스 중지

svcs 명령으로 보았을 때 online 은 동작중, offline은 중지된 상태, maintenance 는 문제가 있어서 작업이 필요하다는 의미입니다. online 상태로 서비스를 시작하고 localhost 로 접속하여 정상적으로 FTP 접속이 되는지 확인합니다. 현재는 제대로 설정이 되어 있지 않으므로 anonymous (익명)으로 접속하셔야 하며, 접속되더라도 OOPS! 라는 메세지가 보입니다.(웁스~)


vsftpd.conf 설정
구글링이나 기타 인터넷상에 올라온 자료들을 검색해 본 결과 예전 버젼이거나 linux 계열의 운영체제에 맞게 설정되어 있어서 제가 사용할려는 solaris 운영체제에는 전혀 맞지가 않더군요. 로그처리 부분도 마찬가집니다. 그래서 제가 사용하는 Solaris 10 환경에 맞게 나름대로 설정파일을 세팅하는 과정에서 겪은 시행착오을 줄이기 위해 vsftpd.conf 파일의 옵션을 정리해 보았습니다. SSL 은 사용하지 않으므로 자세한 설명은 생략하며 익명도 사용하지 않는 환경임을 미리 인지하시고 참고하여 주시면 되겠네요. (해당 환경과 관련된 옵션은 설명에서 몽땅 제외입니다. 뷁~~~~)

또한 위에서 manpage 파일을 정상적으로 설치하셨다면 man vsftpd.conf 명령으로도 옵션들을 확인하실 수 있습니다.

옵션을 사용하기 전에 주의할 점 : 반드시 옵션명=값 으로 설정하셔야 합니다. 즉 =(equal) 좌우에 공백이 있어서는 절대 안됩니다. 반드시 옵션과 값사이에 =(equal)을 딱!!! 붙여서 주셔야 합니다.


anonymous_enable=NO ( 기본값 : YES )
  익명 사용자의 접속을 허용할 것인지를 결정합니다.


background=YES ( 기본값 : NO )
listen_port=21 ( 기본값 : 21 )
listen_ipv6=NO ( 기본값 : NO )
  기본적으로 vsftpd는 inetd 또는 xinetd 또는 Solaris10의 서비스로 등록하여 사용이 가능하도록 설정되어있습니다. 위 옵션대로 설정하게 되면 standalone(proftpd 의 standalone 동작과 동일) 모드로 동작합니다. Solaris10에서는 위에서 서비스로 등록해 놓았으므로 모두 주석처리합니다. 일반적으로 FTP 접속이 그리 많지가 않는 경우에는 기본 동작모드(inetd 등)가 유리하며 FTP 접속자가 많은 경우에는 standalone 모드가 유리하다고 합니다.

listen_address=none ( 기본값 : none )
listen_address6=none ( 기본값 : none )
  standalone 모드로 동작시 대기할 IP를 지정합니다.(멀티 IP 서버를 이용할때) address6는 IPV6 상황에서 사용합니다.

pasv_address=none ( 기본값 : none )
  Use this option to override the IP address that vsftpd will advertise in response to the PASV command. Provide a  numeric IP address, unless pasv_addr_resolve is enabled, in which case you can provide a hostname which will be DNS resolved for you at startup. (해석불가)

nopriv_user=nobody ( 기본값 : nobody )
  vsftpd가 구동할 유저명을 지정합니다.

max_clients=50 ( 기본값 : 0 )
  최대 접속자수를 결정합니다. 0으로 두면 무제한입니다.

max_per_ip=5 ( 기본값 : 0 )
  하나의 IP에서 동시에 접속할 수 있는 수를 결정합니다.

local_max_rate=0 ( 기본값 : 0 )
  로컬 사용자의 접속시 업/다운로드 속도 제한을 지정합니다. 단위는 초당 Bytes 입니다.

trans_chunk_size=0 ( 기본값 : 0 )
  한번에 전송할 크기를 지정합니다. 단 일정단위로 묶어서 전송하게 되는데 이 항목은 전송량 조절 옵션인 rate 관련 옵션들과 연관성이 있습니다. 되도록이면 이 옵션은 수정하지 않는 것이 좋다고 제작자는 밝히고 있군요. 다만 8192로 하면 부드럽게 대역폭 제한이 가능하다고 하는데 당최 무슨 뜻인지;;;;;;

use_localtime=YES ( 기본값 : NO )
  파일의 시간을 보여줄 때 시스템의 Local time에 맞춰서 보여줍니다. 기본적으로 vsftpd는 GMT를 따르고 있습니다. 우리나라의 시간은 GMT + 9 입니다.

setproctitle_enable=YES ( 기본값 : NO )
  FTP의 현재 상황을 PS 로 볼 수 있도록 해줍니다. 즉 현재 세션의 상황을 ps 명령으로 나오는 값을 조작하여 접속자 등을 파악할 수 있습니다.

user_config_dir=none ( 기본값 : none )
  특정 사용자의 접속 환경을 vsftpd.conf 가 아닌 파일로 저장시켜 두고 적용시킬 수 있게 해줍니다. 여기서 지정하는 값은 디렉토리를 의미합니다. 예를 들어 /etc/vsftpd_user/chris 라는 파일을 생성한 후 파일속에 vsftpd.conf 와 같은 각종 지시어를 이용하여 환경을 구축해 놨을 때 chris라는 사용자가 접속하면 vsftpd.conf 가 아닌 /etc/vsftpd_user/chris 라는 파일의 환경에 적용을 받습니다. 물론 /etc/vsftpd_user/chirs 안에 없는 옵션은 vsftpd.conf 옵션에 적용을 받습니다. 다만 /etc/vsftpd_user/chris 파일내에 유저의 환경과는 관계가 없는 옵션들(banner_file, max_per_ip, max_clients, xferlog_file 등)은 무시됩니다.

local_enable=YES ( 기본값 : NO )
  시스템에 등록된 유저의 접속을 허용합니다.

userlist_enable=NO ( 기본값 : NO )
  유저 목록을 담고 있는 파일속의 내용에 있는 사용자만 접속을 허용합니다. 이 옵션은 userlist_deny 옵션이 비활성화된 상태에서만 효과가 있습니다.(userlist_deny 옵션과 반대역활입니다.)

userlist_deny=YES ( 기본값 : YES )
  유저 목록을 담고 있는 파일속의 내용에 있는 사용자만 접속을 불허합니다. userlist_enable 옵션과 반대 역활을 합니다. 특정 유저의 접속을 허용하지 않고자 할때 주로 사용합니다.

userlist_file=/etc/vsftpd.user_list ( 기본값 : /etc/vsftpd.user_list )
  userlist_enable 옵션과 userlist_deny 옵션에서 사용되는 유저 목록을 담고 있는 파일입니다.

text_userdb_names=YES ( 기본값 : NO )
  디렉토리 목록을 보여줄 때 유저명과 그룹명을 문자로 표시할 것인지를 결정합니다. 성능상과 보안문제상 NO로 되어 있는 듯 하며 개인적으로는 YES를 좋아라 합니다.

pam_service_name=vsftpd ( 기본값 : ftp )
  Solaris10과는 관계없는 옵션이며, pam 사용자 인증을 할때 사용할 인증파일을 지정합니다.

tcp_wrappers=YES ( 기본값 : NO )
  TCP wrappers에 의해서 FTP 접속을 제어할 것인지를 설정합니다. 미리 tcp_wrappers가 설치되어 있어야 하며, sunfreeware 에서는 현재날짜 기준으로(2008. 08. 04) 7.6 버젼이 공개되어 있으므로 vsftpd 설치전에 tcp_wrappers를 설치하시길 바랍니다. 참고로, solaris10 을 기본으로 설치할 경우 tcp_wrappers가 설치되어 있습니다만, 버젼이..... 전 7.6 버젼을 새로 설치하였습니다.

ssl_enable=NO ( 기본값 : NO )
  ssl 접속을 허용할 것인지를 결정합니다. 이 옵션을 사용할려면 컴파일 하기전에 builddefs.h 파일에서 SSL 옵션을 활성화시켜야 하며 관련 라이브러리 및 데몬들도 설치가 되어 있어야 합니다. 솔라리스에서는 SSL 연결이 좀 까탈스럽더군요. OTL;;;;;;

ssl_tlsv1=NO ( 기본값 : YES )
ssl_sslv2=NO ( 기본값 : NO )
ssl_sslv3=NO ( 기본값 : NO )
  ssl 접속시 어떤 프로토콜을 사용할 것인지를 결정합니다. 각각 TLS, V2, V3 를 의미하며 ssl_enable 옵션이 활성화되어 있을 때 기본 프로토콜은 SSL v1 프로토콜을 이용하여 접속합니다.

dsa_cert_file=none ( 기본값 : none - RSA certificate suffices 를 사용 )
  SSL의 암호화 접속시 사용할 DSA 인증서의 위치를 지정합니다.

dsa_private_key_file=none ( 기본값 : none )
  SSL의 암호화 접속시 사용된 DSA 개인키 파일의 위치를 지정합니다.

rsa_cert_file=/usr/share/ssl/certs/vsftpd.pem ( 기본값 : none )
  SSL 접속시 RSA 인증서를 지정합니다.

rsa_private_key_file=none ( 기본값 : none )
  SSL 접속시 RSA 인증에 사용할 RSA 개인키 값 파일을 지정합니다.

force_local_data_ssl=YES ( 기본값 : YES )
  ssl_enable 옵션이 활성화되어 있을때만 활성화되는 옵션이며, 로컬 사용자가 데이터를 전송시 SSL을 사용하도록 강제적으로 규정합니다.

force_local_logins_ssl=YES ( 기본값 : YES )
  ssl_enable 옵션이 활성화되어 있을때만 활성화되는 옵션이며, 로컬 사용자가 로그인시 강제적으로 SSL을 이용하도록 합니다.

connect_timeout=60 ( 기본값 : 60초 )
  Port 모드로 접속시 사용자의 접속 허용 시간을 설정합니다. 지정된 시간내에 접속이 완료되지 않으면 접속이 끊어집니다.

accept_timeout=60 ( 기본값 : 60초)
  Pasv 모드로 접속시 사용자의 접속 허용 시간을 설정합니다. connect_timeout 옵션과 동일하게 동작합니다.

data_connection_timeout=300 ( 기본값 : 300초)
  데이타를 전송한 후 (업/다운) 지정된 시간동안 아무런 동작이 없을 경우 접속을 끊습니다.

idle_session_timeout=300 ( 기본값 : 300초)
  접속 완료 후 지정된 시간동안 아무런 동작을 하지 않으면 접속을 끊습니다.

banner_file=/etc/vsftpd.banner_file ( 기본값 : none )
  사용자가 접속했을 때 보여줄 환영 메세지를 가진 파일을 지정합니다.

ftpd_banner=Welcome to FTP Service ( 기본값 : none - vsftpd의 기본 메세지가 보입니다.)
  사용자가 접속했을 때 보여줄 안내 메세지를 지정합니다.
 
dirmessage_enable=NO ( 기본값 : NO )
  디렉토리로 접속할때 해당 디렉토리에 message_file 옵션에서 지정한 파일의 내용을 보여줄 것인지를 결정합니다.

message_file=.message ( 기본값 : .message )
  dirmessage_enable 옵션이 YES로 되어있다면 읽어서 보여줄 파일명을 지정합니다.

port_enable=YES ( 기본값 : YES )
  FTP의 Port 모드를 활성화홥니다. 일명 Active 모드라고도 합니다.

connect_from_port_20=YES ( 기본값 : NO )
  Port 모드로 동작시 데이터 전송의 기본 포트인 20번 포트의 사용 여부를 결정합니다.

ftp_data_port=20 ( 기본값 : 20 )
  Port 모드로 동작시 데이터 전송에 사용할 포트 번호를 지정합니다. 이 옵션은 connect_from_port_20 옵션이 활성화되어 있어야 정상적으로 작동합니다.

port_promiscuous=NO ( 기본값 : NO )
  Port 모드에서의 보안 체크 기능을 해제합니다. FXP(서버대 서버전송) 기능 사용시 활성화시켜줍니다.

pasv_enable=YES ( 기본값 : YES )
  Pasv 모드로 동작할 것인지를 결정합니다.

pasv_promiscuous=NO ( 기본값 : NO )
  동일한 IP에서 접속이 이루어질때 PASV 보안체크를 해제시켜 줍니다? 영어가 딸려서 해석이 꼬이네요. FXP (서버 대 서버 전송) 기능을 사용할 때나 SSH를 이용한 터널링 기능을 이용할 때 활성화시켜주는 옵션입니다.

pasv_min_port=0 ( 기본값 : 0 )
pasv_max_port=0 ( 기본값 : 0 )
  Pasv 모드로 접속시 할당할 최저(min) 포트번호와 최고(max) 포트번호를 지정합니다. 기본값인 0을 설정하게 되면 1024 이상 무작위로 할당합니다. 1024 이하의 포트번호는 일반적으로 well kown port 번호라고 하여 부르며 root 권한만 해당 포트를 제어할 수 있도록 되어있습니다. ( /etc/services 파일 참고 )

ascii_download_enable=NO ( 기본값 : NO )
ascii_upload_enable=NO ( 기본값 : NO )
  ASCII 모드로 전송을 허용할 것인지를 결정합니다. 일반적으로 UNIX 모드의 텍스트 파일과 PC(or Windows) 모드의 텍스트 파일은 LF/CR 처리부분에서 다르므로 이 옵션을 활성화(YES)시켜주면 전송시 자동으로 변환이 됩니다. 하지만 요즘 텍스트 에디터들은 자동으로 변환해주므로 크게 문제되지 않는다면 보안문제상 기본값으로 설정된 NO로 해주심을 권장합니다.

local_umask=022 ( 기본값 : 077 )
  파일 생성 umask 값을 지정합니다. 이 값을 보면 vsftpd가 보안에 까칠하다는게 확실히 알 수 있겠군요. 기본적으로 파일 생성시 할당되는 퍼미션은 최대퍼미션 - umask 의 값을 가집니다. 최대퍼미션은 디렉토리의 경우 0777, 파일인 경우 0666 으로 결정됩니다. 그러므로 디렉토리의 경우 vsftpd의 기본 umask를 적용하면 0700 ( 0777 - 077 = 0700 ) 으로 설정됩니다. 즉 올린 사람외에는 손대지마!!! 라는 것이 되죠. 다만 이렇게 된다면 웹서버를 운영할 경우 웹상에서 접근을 못하게 되는 사태가 벌어집니다. 일반적인 umask 옵션인 022 로 정해줍시다.

file_open_mode=0644 ( 기본값 : 0666 )
  업로드되는 파일의 기본 퍼미션을 지정합니다. 이 옵션은 반드시 local_umask 옵션보다 뒤에서 지정되어야 하며, 기본값을 주게 되면 업로드된 파일이 아무나 읽기쓰기로 되어버리기 떄문에 가능하면 0644 로 설정하는 것이 좋습니다.

dirlist_enable=YES ( 기본값 : YES )
  디렉토리 목록을 볼 수 있게 합니다. NO로 할 경우 목록을 볼 수가 없게 됩니다.

force_dot_files=NO ( 기본값 : NO )
  .(dot)로 시작하는 파일들의 표시 여부를 결정합니다. 보안관계상 기본 값은 NO로 되어있습니다.

tilde_user_enable=NO ( 기본값 : NO )
  일반적으로 사용하는 ~crhis/pics 와 같은 지정을 해석할 수 있도록 합니다. 사용자 계정명앞에 ~(틸드)가 오게 되면 해당 사용자 계정의 홈디렉토리를 의미하게 되는데 이것을 해석할 수 있도록 해주는 것입니다. 다만 이 옵션은 /etc/passwd 파일을 찾을 수 있을 경우에 정상적으로 작동합니다.

hide_ids=NO ( 기본값 : NO )
  이 옵션이 활성화되면 모든 파일의 사용자는 FTP로 표시됩니다. 보안에 도움이 될 수도 있는 옵션입니다.

write_enable=YES ( 기본값 : NO )
  사용자가 기록을 할 수 있도록 합니다. (STOR, DELE, RNFR, RNTO, MKD, RMD, APE, SITE 등의 명령이 실행가능해 집니다.)

download_enable=YES ( 기본값 : YES )
  파일을 다운로드할 수 있게 합니다.

chmod_enable=YES ( 기본값 : YES )
  로컬 사용자가 퍼미션을 변경할 수 있도록 합니다. 익명 접속 사용자는 불가능합니다.

use_sendfile=YES ( 기본값 : YES )
  서버 운영체제의플랫폼에서 sendfile() 시스템 호출을 허용합니다. 내부 세팅인것 같은데 그냥 YES~~~

cmds_allowed=none ( 기본값 : none )
  사용자에게 허용할 명령어를 지정합니다. 이 명령은 지정한 명령만 사용할 수 있도록 만드는 것입니다. 적용하지 않으면 모든 명령을 사용할 수 있으며 지정하게 되면 지정한 명령어만 사용가능합니다. 단 로그인 전의 명령어나 로그아웃 등의 명령어는 해당되지 않습니다. ( USER, PASS, QUIT 등 )

deny_file=none ( 기본값 : none )
  업로드를 거부할 파일명을 지정합니다. { 와 } 으로 묶으며, 와일드 카드 ( ? , * )를 사용할 수 있습니다. 각각의 파일은 ,(comma)로 구분하도록 되어있습니다. 예) deny_file={*.mp3,*.mov,.private}

hide_file=none ( 기본값 : none )
  숨길 파일명을 지정합니다. 즉 존재는 하되 파일목록에서는 보이지 않습니다. deny_file 옵션과 동일한 형식으로 지정가능합니다.

async_abor_enable=NO ( 기본값 : NO )
  특정 클라이언트가 파일 전송중 취소했을 때 정상적으로 취소되지 않는 경우가 발생하는데 이때 이 옵션을 enable 하게 되면 이런 증상을 막을 수 있습니다. 제작자는 오직 ill adviced FTP clients가 이런 증상을 발생시킨다고 하며 보안관계상 NO를 권장하고 있습니다.

ls_recurse_enable=NO ( 기본값 : NO )
  ls 명령의 옵션중 하위 디렉토리의 구조까지 모두 읽어올 수 있는 -R 옵션 사용 여부를 결정합니다. 서버에 대한 부하가 크므로 기본적으로 NO 로 설정되어 있습니다.

chroot_local_user=YES ( 기본값 : NO )
  로컬 사용자가 접속하면 자신의 상위 디렉토리로 접근할 수 없도록 설정합니다.

passwd_chroot_enable=YES ( 기본값 : NO )
  If enabled, along with chroot_local_user,  then a chroot() jail location may be specified on a per-user basis. Each user's jail is derived from their home directory  string in /etc/passwd. The occurrence of /./ in the home directory string denotes that the jail is at that particular location in the path. (해석불가 -.-;;)

chroot_list_enable=NO ( 기본값 : NO )
  이 옵션을 활성화하면 명시된 사용자만이 자신의 홈상위 디렉토리에 접근할 수 없게 되어 있습니다. 단 chroot_local_user 옵션이 비활성화되어 있어야 작동합니다.

chroot_list_file=/etc/vsftpd.chroot_list ( 기본값 : /etc/vsftpd.chroot_list )
  chroot_list_enable 옵션이 활성화되어 있다면 chroot() 기능을 적용시킬 사용자 목록을 가지게 되며, chroot_local_user 옵션이 활성화되어 있다면 chroot() 기능에서 제외할 사용자 목록을 가지게 됩니다.

secure_chroot_dir=/usr/share/empty ( 기본값 : /usr/share/empty )
  secure chroot()에서 사용될 디렉토리를 지정하며 반드시 비어있어야 합니다. 또한 ftp user에 대한 쓰기 권한이 없어야 합니다. (이게 왜 있는건지......) 참고로, 저 디렉토리는 반드시 생성되어 있어야 하며 조건에 맞지 않게 되어 있다면 vsftpd 실행시 에러가 발생합니다. 그냥 /usr/share/empty 디렉토리를 만들고 root:root 로 권한을 주고 755로 퍼미션 주시면 됩니다.

check_shell=YES ( 기본값 : YES )
  이 옵션은 non-PAM 시스템에서만 정상적으로 동작하며, 접속자의 Shell 체크 여부를 결정합니다.

delay_failed_logins=5 ( 기본값 : 1 초 )
  로그인이 실패하고 난 뒤 다음 로그인 시도까지의 딜레이 시간을 지정합니다.

delay_successful_logins=0 ( 기본값 : 0 초 )
  로그인이 성공하고 난 뒤 다음 과정으로 넘어가기 전까지의 딜레이 시간을 지정합니다.

max_login_fails=3 ( 기본값 : 3 회)
  지정한 횟수만큼 연속적으로 로그인을 실패하면 연결을 끊어버립니다.

local_root=none ( 기본값 : none )
  로컬 사용자(익명 사용자가 아닌) 로그인을 하게 되면 해당 디렉토리로 이동시킵니다. 로그인을 실패한 경우에는 아무런 동작을 하지 않습니다.

lock_upload_files=NO ( 기본값 : NO )
  이 옵션을 활성화하면 모든 업로드되는 파일들은 기록 lock이 설정됩니다. 단 모든 다운로드 파일들은 공유 읽기 lock이 설정되는데 이 옵션을 활성화화면 악의적인 목적으로 업로드를 방해할 수 있으므로 주의해서 사용해야 합니다.

mdtm_write=YES ( 기본값 : YES )
  mdtm 기능을 사용할 수 있게 합니다. mdtm은 업로드되는 파일의 시간과 날짜를 변경할 수 있게 하는 기능힙니다.

pasv_addr_resolv=NO ( 기본값 : NO )
  이 옵션을 사용하게 되면 IP 주소가 아닌 호스트 네임을 pasv_address에서 사용할 수 있게 합니다. 

vsftpd_log_file=/var/log/vsftpd.log ( 기본값 : /var/log/vsftpd.log )
  vsftpd의 로그파일을 지정합니다. 단 xferlog_enable 옵션이 활성화되고 xferlog_std_format 옵션이 비활성화되어야 동작합니다. 또는 dual_log_enable 옵션아 활성화될 경우에도 동작합니다. 주의할 점은 syslog_enable 옵션이 활성화되면 모든 로그들은 system log로 보내어지므로 vsftpd_log_file 옵션에 기록된 파일에는 로그가 기록되지 않습니다.

dual_log_enable=YES ( 기본값 : NO )
  이 옵션이 활성화되면 /var/log/xferlog 와 /var/log/vsftpd.log 파일 둘다 로그 기록에 사용합니다.

syslog_enable=NO ( 기본값 : NO )
  이 옵션이 활성화되면 모든 로그들은 system log(syslogd 데몬을 이용한)에 기록되며 /var/log/vsftpd.log 파일은 사용되지 않습니다.

xferlog_file=/var/log/xferlog ( 기본값 : /var/log/xferlog )
  이 옵션 wu-ftpd 형식의 로그들을 기록할 파일을 지정하는 것입니다. 반드시 xferlog_enable 옵션이 활성화되어야 정상적으로 동작하며 xferlog_std_format 옵션과 연관성이 있습니다. 또는 dual_log_enable 옵션이 활성화되어도 본 옵션이 동작합니다.

xferlog_enable=YES ( 기본값 : NO )
  상세한 파일의 전송상황을 로그파일에 기록할 것인지를 결정합니다. 기본값은 /var/log/vsftpd.log 에 기록하며, 이 파일의 위치는 xferlog_file 옵션에서 변경가능합니다.

xferlog_std_format=NO ( 기본값 : NO )
  xferlog_enable 옵션으로 기록되는 로그 형식을 표준으로 할 것인지를 결정합니다.

log_ftp_protocol=YES ( 기본값 : NO )
  아주 상세한 FTP 이용 상황을 로그에 기록할 지를 결정합니다.

no_log_lock=NO ( 기본값 : NO )
  로그 파일을 기록할 때 로그 파일에 lock 을 걸 것인지를 결정합니다. 일반적으로 걸지 않아도 되지만, 솔라리스 OS에서 베리타스(Veritas) 파일 시스템을 사용할 경우 문제점이 발생할 수 있으므로 해당 OS와 파일시스템을 사용하고 있을 경우 YES로 설정하시기 바랍니다.

session_support=YES ( 기본값 : NO )
  세션 기록을 wtmp 또는 utmp 에 남길것인지를 결정합니다. wtmp/utmp를 이용하게 되면 last 명령으로 접속여부를 확인할 수 있으므로 YES를 권장합니다.

one_process_model=NO ( 기본값 : NO )
  하나의 접속자에 하나의 프로세스 모델을 생성하여 할당합니다. 효율면에서는 좋으나 보안면에서는 조금 떨어질 수 있다고 제작자는 밝히고 있습니다. 단 리눅스 커널이 2.4 이상일때만 권장하는 것 같군요. 솔라리스10에서 서비스로 등록을 해 놓았으므로 이 옵션과는 무관하게 접속자별로 2개씩의 프로세스가 생성됩니다. OTL;;;;;;

기타 설명하지 않은 옵션들
  가상 사용자나 익명사용자에 대한 설정은 본인이 사용하지 않으므로 설명을 생략합니다. 인터넷상에 많이 알려져 있으므로 해당 문서를 검색하시거나 아래 참고사이트를 이용하시면 상세하게 설명되어 있습니다.
guest_enable=NO
guest_username=ftp
virtual_use_local_privs=NO
user_sub_token=none
allow_anon_ssl=NO
deny_email_enable=NO
banned_email_file=/etc/vsftpd.banned_emails
secure_email_list_enable=NO
email_password_file=/etc/vsftpd.email_passwords
ftp_username=ftp
no_anon_password=NO
anon_root=none
anon_max_rate=0
anon_upload_enable=NO
anon_world_readable_only=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chown_uploads=NO
chown_username=root
anon_umask=077
force_anon_data_ssl=NO
force_anon_logins_ssl=NO


참고용 설정파일
제가 사용하고 있는 옵션들을 간단하게 옮겨봅니다. Solaris10에서 익명과 SSL을 사용하지 않으며, 웹서버 운영 용도로 사용하고 있는 서버입니다. 이중 로그파일을 한 이유는 xferlog.log 에서 전송량을 체크하기 위함이며, vsftpd.log 에서는 접속현황 및 계정 관리를 위해서 세팅하였습니다.

anonymous_enable=no
max_clients=50
max_per_ip=10
use_localtime=YES
setproctitle_enable=YES
local_enable=YES
ftpd_banner=Welcome to KYUNGSUNG University Web server......
port_enable=YES
max_login_fails=1
write_enable=YES
local_umask=022
file_open_mode=0644
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog.log
session_support=YES
xferlog_std_format=NO
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
text_userdb_names=YES
tcp_wrappers=YES


참고사이트
기존 vsftpd 관련 자료들이 많긴 합니다만, 대부분 티니님의 자료를 옮겨 놓은 듯 하더군요. 다만 티니님의 자료는 1.0.1 버젼을 기준으로 하여 없는 옵션이나 내용이 조금 바뀐 옵션들이 있어서 따로 정리를 해봤습니다. 정말 항상 글을 쓸때마다 느끼는 것이지만, 글 제대로 쓰시는 분들 존경스럽네요. ;;;;;

- VsFTPD FTP 서버 설치 by 티니님 ( http://coffeenix.net/board_view.php?bd_code=1470 )
- FTP 설정하기 by 아햏햏님 ( http://blog.naver.com/ssanzing2?Redirect=Log&logNo=140025729151 )


Error 수정

vsftp를 설치하고 난 뒤 아래의 메세지가 표시되면서 접속이 안되는 경우가 있다.

500 OOPS: tcp_wrappers is set to YES but no tcp wrapper support compiled in
: 위의 메세지는 sunfreeware.com 에서 다운받아서 pkgadd 로 설치했을 경우 tcp_wrapper가 지원되지 않도록 컴파일되어 있기 때문입니다. 결론은, 소스 받아서 컴파일 하세요~

500 OOPS: vsftpd: cannot locate user specified in 'ftp_username':ftp
: 위의 메세지는 ftp라는 그룹과 유저가 생성되어 있어야 합니다. 아래 명령으로 유저와 그룹을 생성하세요.
: groupadd -g 199 ftp
: useradd -u 199 -g 199 -s /bin/false -m ftp

500 OOPS: could not bind listening IPv4 socket

SMF(Service Management Facility) 사용시에 /etc/vsftp.conf 파일에서  listen=YES 로 설정시에 NO로 변경
listen=NO


포트 변경 하는 방범

/etc/services 파일 포트 수정

 

수정 전

ftp-data        20/tcp
ftp-data        20/udp
# 21 is registered to ftp, but also used by fsp
ftp             21/tcp
ftp             21/udp                fsp fspd

 

수정 후

ftp-data        6500/tcp
ftp-data        6500/udp
# 21 is registered to ftp, but also used by fsp
ftp             6500/tcp
ftp             6500/udp                fsp fspd

 

 

/etc/vsftpd/vsftpd.conf

 

수정 전

# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES

 

수정 후

# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=NO

 

추가

listen_port=6500

 


 

변경 작업 후 리스타트

svcadm disable /network/ftp/tcp

svcadm enable /network/ftp/tcp

포트 변경 완료

반응형

'OS > SOLARIS' 카테고리의 다른 글

solaris cd-rom mount 하기  (0) 2010.03.05
solaris root 패스워드 복구  (0) 2009.10.28
SWAT SVM RAID  (0) 2009.05.25
미러 디스크 장애시 디스크 교체하기  (0) 2009.05.07
samba  (0) 2008.02.28
Posted by [PineTree]