RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'Linux/FTP'에 해당되는 글 4
2006/09/08  FTP명령어  
2006/09/08  vsftpd passive mode 끄기  
Linux/FTP  2006/09/08 14:43
### ftp 명령어 모음 ###

ascii : 전송모드를 ASCII모드로 설정한다.(ascii또는 as)

binary : 전송모드를 BINARY모드로 설정한다.( binary또는 bi)

bell : 명령어 완료시에 벨소리를 나게한다.(bell)

bye : ftp접속을 종료하고 빠져나간다.(bye)

cd : remote시스템의 디렉토리를 변경한다.(cd 디렉토리명)

cdup : remote시스템에서 한단계 상위디렉토리로 이동한다.(cdup)

chmod : remote시스템의 파일퍼미션을 변경한다.(chmod 755 index.html)

close : ftp접속을 종료한다. (close)

delete : remote시스템의 파일을 삭제한다.(delete index.old)

dir : remote시스템의 디렉토리 내용을 디스플레이한다.(dir)

disconnect : ftp접속을 종료한다.(disconnect)

exit : ftp접속을 종료하고 빠져나간다.(exit)

get : 지정된 파일하나를 가져온다.(get index.html)

hash : 파일전송 도중에 "#"표시를 하여 전송중임을 나타낸다.(hash)

help : ftp명령어 도움말을 볼 수 있다.(help또는 help 명령어)

lcd : local시스템의 디렉토리를 변경한다.(lcd 디렉토리명)

ls : remote시스템의 디렉토리 내용을 디스플레이한다. (ls 또는 ls -l)

mdelete : 여러개의 파일을 한꺼번에 지울 때 사용한다.( mdelete *.old)

mget : 여러개의 파일을 한꺼번에 가져오려할 때 사용한다. ( mget *.gz)

mput : 한꺼번에 여러개의 파일을 remote시스템에 올린다.(mput *.html)

open : ftp접속을 시도한다.(open 168.126.72.51또는 open ftp.kornet.net)

prompt : 파일전송시에 확인과정을 거친다. on/off 토글 (prompt)

put : 하나의 파일을 remote시스템에 올린다.(put index.html)

pwd : remote시스템의 현재 작업디렉토리를 표시한다.(pwd)

quit : ftp접속을 종료하고 빠져나간다.(quit)

rstatus : remote시스템의 상황(version, 어디서, 접속ID등)을 표시한다.(rstatus)

rename : remote시스템의 파일명을 바꾼다.(remote 현재파일명 바꿀파일명)

rmdir : remote시스템의 디렉토리을 삭제한다.(rmdir 디렉토리명)

size :remote시스템에 있는 파일의 크기를 byte단위로 표시한다.(size index.html)

status : 현재 연결된 ftp세션모드에 대한 설정을 보여준다.(status)

type : 전송모드를 설정한다.(type 또는 type ascii 또는 type binary)
2006/09/08 14:43 2006/09/08 14:43
이 글에는 트랙백을 보낼 수 없습니다
출처 카페 > 사일런트밥 / art4linux
원본 http://cafe.naver.com/art4linux/3

작성자 : 좋은진호(truefeel, http://coffeenix.net/)
작성일 : 2003.10.01(수)
수정일 : 2004.01.08(목), chroot_list_enable 글 추가

이 글은 7월에 썼던 'vsftpd에서 한글파일로그와 lastlog 로긴확인하기'를 기초로 작성하였다.

1. vsftpd FTP 서버에 대해

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와 함께 사용할 때)
- ...

2. vsftpd 설치

※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다.

http://vsftpd.beasts.org/ 에서 최신버전(현재 1.2.0)의 소스를 받아온다.

-------------------------------------------------------------
# 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/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.

pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

즉, /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
-------------------------------------------------------------

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

필요한 설정이 끝났으면 xinetd를 재실행한다.

-------------------------------------------------------------
# /etc/rc.d/init.d/xinetd restart
-------------------------------------------------------------

4. 문제 해결

1) ftpwho 같은 명령은 있나?
  또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나?

 ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다.

 # ps -ef|grep vsftpd
 # fuser -v ftp/tcp

 vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다.

2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은?

 vsftpd는 출력할 수 없다고 판단하는
 ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다.
 따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다.

3) 사용자가 홈디렉토리를 못 벗어나게 하고 싶는데?

/etc/vsftpd.conf에 다음을 추가하면, 모든 사용자는 자신의 홈디렉토리만 접근할 수 있다.

chroot_local_user=YES

또한 특정 사용자로만 제한을 하고 싶다면 다음과 같이 한다. /etc/vsftpd.chroot_list에는 제한할
사용자 ID를 한줄에 하나씩 나열하면 된다.

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

주의할 것은 chroot_local_user=YES와 chroot_list_enable=YES를 함께 사용할 경우에는
/etc/vsftpd.chroot_list에 포함된 사용자 ID만 제한없이 홈디렉토리를 벗어날 수 있다.
즉, 반대로 작용한다.

standalone으로 FTP서버가 동작중이면 재실행 필요. standalone에 대해서는 6)번에서.

4) root로 접속할 수는 없나?

 가능하면 root 접속은 허용하지 않기를 바란다.
 /etc/ftpusers 파일에서 root를 빼면 접속이 가능하다.

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(그 이외 유닉스)

8) 업로드 파일 크기를 제한하는 방법은 없나요? 이를테면 5MB이상의 파일은 업로드 못한다든지.

현재 1.2.1버전까지 vsftpd 자체에 설정하는 방법은 없습니다.

5. 참고할만한 문서

* vsftpd 1.2.0 설치 문서
 ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL
* vsftpd.conf man page
* vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=4
* vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호)
 http://coffeenix.net/board_view.php?bd_code=21

2006/09/08 14:35 2006/09/08 14:35
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 『해킹.... 속임수의 예술....』
원본 http://blog.naver.com/zsup1343/60003542397
원문 작성자 : 백선우
-서문-

밑에 팁란에 이미 ProFTPD 와 MySQL을 연동하는 방법이 올라와
있어서 ProFTPD의 Stable 버전인 1.2.4 를 사용해서 그 방법으로
해보았는데 셋팅에 별다른 문제가 없음에도 제대로 동작하지 않았습니다.
디버그 모드로 실행해본결과 Signal 11이 발생하면서 종료가 되더군요.
그래서 이곳 질답란에 문의를 해보았지만 아무도 답변을 안해주시더군요.
어쨌든 그냥 포기할까 하다가 1.2.5rc1 을 설치하고 다시 시도한 결과
성공했습니다. 그런데 1.2.5에서는 1.2.4 까지의 SQL 관련 설정 방법에
차이가 있어서 이곳 팁란에 이렇게 글을 올리게 되었습니다.

-ProFTPD 설치 방법-

일단, MySQL은 설치되었다고 가정하고...저의 경우에는 RedHat 7.2에
기본적으로 들어있는 RPM 으로 설치를 했습니다.

그다음은 ProFTPD 설치를 합니다.
www.proftpd.org 에 가셔서 1.2.5rc1 버전을 다운받습니다.
압축 푸시고
./configure --prefix=/usr --with-modules=mod_sql:mod_sql_mysql \
--with-includes=/usr/include/mysql --with-libraries=/usr/lib/mysql \
--sysconfdir=/etc --localstatedir=/var
make
make install

-설정 방법-

그리고 mysql에 database를 만듭니다.
database 이름은 proftp로 짓습니다.
그리고 아래의 테이블을 만듭니다. 아래 테이블은 아래에 있던
ProFTP + MySQL 팁에서 가져왔습니다. 단 한가지 다른 점이 있다면
group 테이블에서 Field 에 gname 을 groupname으로 변경했습니다.
1.2.5rc1에서 Default로 groupname을 찾습니다.

* 테이블명: users
   +---------+------------------+------+-----+---------+-------+
   | Field   | Type             | Null | Key | Default | Extra |
   +---------+------------------+------+-----+---------+-------+
   | userid  | char(12)         |      | PRI |         |       |
   | uid     | int(10) unsigned | YES  |     | NULL    |       |
   | gid     | int(10) unsigned | YES  |     | NULL    |       |
   | passwd  | char(63)         | YES  |     | NULL    |       |
   | shell   | char(255)        | YES  |     | NULL    |       |
   | homedir | char(255)        | YES  |     | NULL    |       |
   | count   | int(10) unsigned |      |     | 0       |       |
   | valid   | int(10) unsigned | YES  |     | NULL    |       |
   +---------+------------------+------+-----+---------+-------+

* 테이블명: groups
   +-----------+------------------+------+-----+---------+-------+
   | Field     | Type             | Null | Key | Default | Extra |
   +-----------+------------------+------+-----+---------+-------+
   | groupname | char(12)         |      | PRI |         |       |
   | gid       | int(10) unsigned |      |     | 0       |       |
   | members   | text             | YES  |     | NULL    |       |
   +-----------+------------------+------+-----+---------+-------+

그리고 /etc/proftpd.conf 를 아래와 같이 편집합니다.
물론 서버명이나 포트, 디렉토리 같은 부분은 여러분에게
맞게 변경해주시기 바랍니다.

ServerName                      "r2al3ac's FTP server"
ServerType                      standalone
ServerIdent                     on "r2al3ac's FTP server ready..."
ServerAdmin                     "r2al3ac@hananet.net"
DefaultServer                   on

Port                            21

Umask                           022

MaxInstances                    30

User                            nobody
Group                           nobody

#아래 SQLConnectInfo 문에서 proftp는 데이터베이스명이며 아이디와 비밀번
호는
#여러분의 mysql 설정에 맞게 변경해주시면 됩니다.
#보시면 1.2.4 버전때와는 다른점이 있음을 알 수 있습니다.
SQLConnectInfo                  proftp@localhost:3306 아이디 비밀번호
SQLAuthTypes                    Backend
SQLAuthenticate                 on
SQLUserInfo                     users userid passwd uid gid homedir  
shell
SQLLog                          PASS updatecount
SQLNamedQuery                   updatecount UPDATE "count=count+1  
WHERE userid='%u'" users
SQLUserWhereClause              "valid = 1"
SQLDefaultHomeDir               /var/ftp
DisplayLogin                    welcome.msg
DisplayFirstChdir               .message

DefaultRoot                     /var/ftp
MaxClients                      4
MaxClientsPerHost               1
MaxHostsPerUser                 1

RequireValidShell               off

AllowRetrieveRestart            on
AllowStoreRestart               on
AllowOverwrite                  on



AllowAll





DenyAll





AllowAll


DenyAll





DenyAll


AllowAll



-테스트 하기-

1. mysql에서 proftp 데이터베이스에 users 테이블에 사용자를 하나 등록 시
킵니다. 단, 반드시 valid 값을 1로 주셔야 됩니다. 만약 1이 아닐경우에는  
로그인이 되지 않습니다.

2. /usr/sbin/prftpd start 를 쳐서 proftpd 를 실행합니다.

3. ftp 나 ncftp 를 사용해서 1번에서 등록해준 사용자와 비밀번호로 로그인
을 해봅니다.

-만약 안된다면-

proftpd.conf 셋팅에 문제는 없는지 확인해보시고,
포트를 다른 걸로 바꿔보시고,
그래도 안된다면 아래와 같은 방법으로 proftpd를 디버그 모드로 실행해서
어디서 어떻게 잘못되었는지 알아보시기 바랍니다.

/usr/sbin/proftpd -d 5 -n -c /etc/proftpd.conf

이렇게 입력하시면 디버그 모드로 실행이 됩니다.

그리고 터미널 창을 하나 더 열어서 ftp 로 접속을 시도해 보시면
어디서 어떻게 잘못되었는지 알 수 있습니다.

-덧붙이는 말-

위에서 SQLAuthenticate 부분을 on 이라고 해놓았는데, 만약
group 테이블을 사용하지 않으시면 SQLAuthenticate users 로
바꿔서 사용하시면 됩니다.

하지만 on으로 해놓아도 별문제 없이 쓰실수 있습니다.

설정문과 관련해서 자세한 것은 proftpd 문서를 참고하시기
바랍니다. 참고로 proftpd.oops.org 나 www.proftpd.org 문서들은
outdate 되어서 1.2.5rc1 과는 차이가 있으므로 proftpd1.2.5rc1을
다운받으면 안에 첨부된 문서를 참조하셔야됩니다.

그럼 꼭 성공하시길 바랍니다.
2006/09/08 14:04 2006/09/08 14:04
이 글에는 트랙백을 보낼 수 없습니다
출처 카페 > 웹프로그래밍 노하우 / 시연아빠
원본 http://cafe.naver.com/phpinfo/179

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


사무실에서 공유기를 통해서 접속을 하는데  ls 등이 자주 먹통이 되더군요

원인은 passive mode ...

vsftp 의 config 파일은 /etc/vsftpd/vsftpd.conf 파일입니다.

해당 파일을 vi 로 열어


vi /etc/vsftpd/vsftpd.conf

pasv_enable=NO


를 추가해 줍니다.


그런후


/etc/rc.d/init.d/vsftpd restart


해줍시다


[root@localhost flowermall-웹서버]# /etc/rc.d/init.d/vsftpd restart
vsftpd를 종료하고 있습니다: [  확인  ]
vsftpd에 대한 vsftpd을 시작합니다: [  확인  ]
[root@localhost flowermall-웹서버]#

2006/09/08 10:31 2006/09/08 10:31
이 글에는 트랙백을 보낼 수 없습니다
웅쓰:웅자의 상상플러스
웅자의 상상플러스
전체 (379)
게임 (5)
영화 (2)
기타 (23)
맛집 (5)
영어 (2)
대수학 (3)
형태소 (5)
Hacking (9)
Linux (112)
HTML (48)
Application_developing (48)
Web_developing (102)
Window (11)
«   2024/11   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
  1. 2016/01 (1)
  2. 2015/12 (3)
  3. 2015/10 (3)
  4. 2015/03 (2)
  5. 2015/01 (4)