vsftp 설치 및 속성설명

리눅스/FTP|2015. 1. 16. 11:46
반응형

vsftpd 설치

리눅스의 ftp는 vsftpd 와 proftp가 있으나 vsftp가 보안성이 우수하며 사용하기 좋다.
vsftp는 인증용으로 21번 포트를 사용하며 인증이 확인 되었을때 서버용으로 20번 포트를 사용한다. 이때 클라이언트의 임시 포트는 1024 이다.

# wget ftp://ftp.superuser.co.kr/fedora/core4/i386/RPMS/vsftp* -P /usr/local/src
   -> 슈퍼유저 ftp서버에서 vsftp로 시작하는 모든파일 /tmp 디렉터리로 다운로드

# cd /usr/local/src

# rpm -ivh vsftpd-2.0.3-1.i386.rpm
   -> 설치

# rpm -ql vsftpd
   -> 설치 후 vsftpd패키지가 설치한 파일및 디렉터리를 볼수있다.



vsftpd 설정

/etc/rc.d/init.d/vsftpd
서버실행스크립트로서 모든 rpm패키지는 /etc/rc.d/init.d 에 패키지명으로 생성된다.
이 것을 실행하게되면 스크립트가 읽혀지면서 /usr/sbin/vsftp를 실행하게된다.

# /etc/rc.d/init.d/vsftp restart 로 실행시키는 방법과 
# service vsftpd restart 이런 방법이있다.
# service 는 rpm 패키지를 실행시킬때 사용하는 명령어이다.


/etc/vsftpd/ftpusers
ftp 로그인을 허락하지 않은 유저들의 정보가 들어있다.
/etc/passwd 파일의 uid 0~100에 해당하는 유저들이다.
root, bin, daemon, adm, lp, sync, shutdown, halt, mail, news, uucp, operator, games, nobody
이사용자는 기본적으로 ftp의 유저로 등록된사용자이다.

설정파일에서
userlist_enable=YES // 유저리스트( /etc/vsftpd/user_list )를 활성화시키고
userlist_deny=NO   // 거부자목록으로 쓰지 않으면 유저리스트에 등록된 사용자는 ftp 사용이 가능하다. 
                                          유저리스트에 등록되있더라도 /etc/vsftpd/ftpusers에 등록된사용자는 접속이 불가능 하다. 
                                          위와 같이 설정을 해주고 ftpusers에서 root를 삭제하면 root로도 ftp 접속 할 수 있다.

/etc/vsftpd/user_list 에 등록된 사용자는 접속 거부/승인 목록이 될수있고,
/etc/vsftpd/ftpuser 에 등록된 사용자는 user_list에 상관 없이 접속 할 수 없다. 
root등의 사용자는 보안을 위해 접속을 허용하지 않은 것이다.


/etc/vsftpd/vsftpd.conf
설정파일이다.

-----------------------------------------------------------------------------------
anonymous_enable=YES
익명계정(ftp, anonymous) 사용여부를 정한다.
-----------------------------------------------------------------------------------
local_enable=YES
/etc/passwd 에 등록된 사용자 사용여부를 정한다.
-----------------------------------------------------------------------------------
local_umask=022
디렉터리나 파일생성시 권한을 정한다.
파일   rw- r-- r-- (644) =>파일의 최대값(666) - umask(0022)
디렉토리 rwx r-x r-x (755) =>디렉토리의 최대값(777) - umask(0022)
-----------------------------------------------------------------------------------
anon_upload_enable=YES
익명계정으로 업로드 가능여부를 정한다. 일반적으로 업로드권한을 주지않는다(주석처리 또는NO)
-----------------------------------------------------------------------------------
anon_mkdir_write_enable=YES
익명계정으로 디렉터리생성 가능여부를 정한다. 일반적으로 쓰기권한을 주지않는다(주석처리 또는 NO)
-----------------------------------------------------------------------------------
dirmessage_enable=YES
메세지를 보기 기능여부를 정한다.
-----------------------------------------------------------------------------------
xferlog_enable=YES
로그 파일 사용여부
-----------------------------------------------------------------------------------
connect_from_port_20=YES
ftp 인증시 어떤 포트를 쓸 것인지 정함
-----------------------------------------------------------------------------------
xferlog_file=/var/log/vsftpd.log
로그파일 저장 위치
-----------------------------------------------------------------------------------
xferlog_std_format=YES
YES 표준수집방식
NO vsftpd에서 제공하는 자세한 방식
-----------------------------------------------------------------------------------
idle_session_timeout=600
지정한시간(초)동안 아무런 입력이 없을때 접속을 해제시킨다.
-----------------------------------------------------------------------------------
data_connection_timeout=120
다운로드 시작시간부터 지정한시간(초)동안 완료 하지않으면 접속을 해제시킨다.
-----------------------------------------------------------------------------------
ascii_upload_enable=YES
ascii_download_enable=YES
아스키모드는 어떤 파일을 텍스트형식으로 업/다운로드 하는것
바이너리모드는 실행가능한 형태로 업/다운로드
-----------------------------------------------------------------------------------
ftpd_banner=Welcome to blah FTP service.
접속시 뜨는 메세지이다. 보안을 위해서 무조건 활성화 해야한다.
활성화 시키지 않으면 버전 정보(vsFTPd 2.0.3)를 출력한다. os 정보 및 취약점을 알수있으며 포트스캔및 버퍼오버플로우가 가능하다.
-----------------------------------------------------------------------------------
deny_email_enable=YES
banned_email_file=/etc/vsftpd/banned_emails
거부정보를 이메일로 받을건인지를 정하고 이메일주소 설정을 해준다. 메일서버가 구성되어있어야 한다.
-----------------------------------------------------------------------------------
익명계정으로 로그인을 하게되면 디렉터리의 위치는 가상루트  /  ( /var/ftp , chroot) 로 접속하게된다. 
하지만 사용자는 가상루트의 적용을 받지 않고 따로 지정해주어야한다. 
사용자를 가상루트의 경로에 접속시키지 않으면 일반적인 사용자는 모든 디렉터리 및 파일에 대하여 r 권한을 갖고 있기때문에 다운로드가 가능하다. 
( /etc/shadow -r-------- 제외) 보안상 위험하기때문에 가상루트를 적용시켜야한다.
-----------------------------------------------------------------------------------
chroot_local_user=YES
/etc/passwd 에 등록된 사용자가 vsftp접속시 위치를 가상루트 / ( /home/사용자 )로 표시한다.
-----------------------------------------------------------------------------------
chroot_list_enable=YES
가상루트 목록을 활성화 시킬것인지 정한다.

chroot_local_user 에 반대 되는 개념으로

가상루트를 활성화(chroot_local_user=YES)시켰을때, 
chroot_list_enable=YES 리스트를 활성화 목록에서 제외 =>리스트 비활성화
chroot_list_enable=NO ll리스트를 활성화 목록에서 포함 =>리스트 활성화

가상루트를 비활성화(chroot_local_user=NO)시켰을때, 
chroot_list_enable=YES 리스트를 비활성화 목록에서 제외 =>리스트 활성화
chroot_list_enable=NO ll리스트를 비활성화 목록에서 포함 =>리스트 비활성화
-----------------------------------------------------------------------------------
chroot_list_file=/etc/vsftpd/chroot_list
지정한 위치에 파일을 생성하고 편집기를 이용해서 적용시킬 사용자를 입력시킨다.
디렉터리 위치는 임의로 정해도 되나 알기쉽게 설치한 패키지가 위치한 곳에 저장하는것이 좋다.
-----------------------------------------------------------------------------------
userlist_enable=YES 
/etc/vsftpd/user_list 에 등록된 사용자를 활성화 시킬것인가
(NO일 경우 local_enable=YES 이면 /etc/passwd 에 등록된 사용자 활성화)

userlist_deny=NO
/etc/vsftpd/user_list 에 등록된 사용자를 거부목록으로 사용할것인지를 정한다.
NO : 파일에 등록된 사용자의 접속만 허락한다.
YES : 파일에 등록된 사용자의 접속을 거부한다.
이거에 상관없이 /etc/vsftpd/ftpuser 에 등록된사용자는 무조건 접속을 거부 한다.
/etc/vsftpd/user_list는 기본값이고 userlist_file=파일명으로 지정해주어도 된다.
-----------------------------------------------------------------------------------
local_max_rate=5000000 
시스템계정에서 최대 업/다운로드 용량(바이트)
anon_max_rate=500000
익명계정에서 최대 업/다운로드 용량(바이트)
max_clients=3
최대접속가능한수
max_per_ip=2
동일한 아이피에서 서버 접속수를 전부 써버릴수있기때문에 ip의 최대 접속가능한수를 정해준다.



[출처]
 LINUX Service [ vsftp ]|작성자 ryucsion

반응형

댓글()

vsftpd 패시브 모드 설정

리눅스/FTP|2015. 1. 16. 11:45
반응형

/etc/vsftpd/vsftpd.conf 에 아래 세줄 추가, 저장 후 vsftpd restart.

pasv_enable=YES
pasv_min_port=5001
pasv_max_port=5001

반응형

댓글()

vsftp 업로드 용량 제한 해제 방법

리눅스/FTP|2015. 1. 16. 11:45
반응형

quota 설정에 문제가 없다는 가정하에 답변 드리겠습니다. 

# ulimit -a [엔터]하시면
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
max nice                        (-e) 0
file size               (blocks, -f) 10000 <------------ 10M
pending signals                 (-i) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8


위처럼 file size가 10메가로 제한되어 있을 확률이 높으며,
이경우  
# vi /etc/security/limits.conf  명령을 통해 아래의 부분을 주석 처리하면 됩니다.
username       hard  fsize  1048576

반응형

댓글()

[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe Statement:

리눅스/MySQL|2015. 1. 16. 11:43
반응형

[Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE  on a table with more than one UNIQUE KEY is unsafe Statement:  

 

위의 메세지...

 

Set Session binlog_format='MIXED';  를 적용

 

또는

 

my.cnf 에서

binlog_format=mixed 를 설정


[출처] 아이구이런 | 조아 (http://blog.naver.com/i92run2k/50174224969)

반응형

댓글()

데이타를 임의 순서로 검색하되 특정 값만 가져오는 쿼리

리눅스/MySQL|2015. 1. 16. 11:43
반응형

mysql> SELECT * FROM datas WHERE name = '$a' AND type = ( SELECT type FROM datas WHERE name = '$a' AND type IN('A','B','O') ORDER BY type ASC LIMIT 1 )


설명 : datas 테이블에서 name 값이 $a 이며, type 이 A 나 B 나 O 로 된것만 select 하는데

         그중에서도 먼저 type 이 A 인 데이타가 있으면 A 인 데이타 출력,

         없으면 B 데이타 출력,

         없으면 O 데이타를 출력한다.

반응형

댓글()

MySQL 중복 데이터 제거 (NOT IN)

리눅스/MySQL|2015. 1. 16. 11:42
반응형

table_a(A)

 num

va

 1

 2

 3

 4

 5

 6


과 같은 데이터를(B)

 num

va 

 1

 2

 4

와 같이 중복된 값을 삭제하고 싶을때가 생기게 마련이다.


  1. 우선 값을 삭제하지 않고 원하는 결과가 나오는 쿼리를 짜 보는것이다.
    어떻게 하면 (B)와 같은 값을 도출해 낼 수 있을까?어떻게 하면 (B)와 같은 값을 도출해 낼 수 있을까?

    SELECT MIN(num),va FROM table_a GROUP BY va 


     MIN(num)

    va 

     1

     2

     4



  2. 즉 num이 1,2,4를 제외한 나머지를 삭제하는 것이다.

    SELECT MIN(num) FROM table_a GROUP BY va 


     MIN(num)

     1

     2

     4


  3. num 1,2,4를 제외한 나머지를 삭제해 보자.
    이때 사용되는 것이 서브쿼리와 함께 NOT IN이다. 포함된 것이 아닌 이라고 해야 할까? 반대로 포함된것을 지우겠다면 IN을 사용하면 될 것이다.

    DELETE FROM table_a WHERE

    num NOT IN (SELECT MIN(num) FROM table_a GROUP BY va)


    말로 풀어보자면 table_a에 num값이 MIN(num)값을 제외한 나머지를 삭제하라는 것이다.


  4. 하지만 이대로 한다면 에러가 발생할 것이다.
    Yon can't specify target table.... 어쩌구 저쩌구....
    이는 mysql에서는 서브쿼리의 from과, delete 되는 from을 같게 사용할 수 없는 룰 때문이다.
    이를 위한 꼼수는...

    DELETE FROM table_a WHERE

    num NOT IN (SELECT * FROM (SELECT MIN(num) FROM table_a GROUP BY va) AS temp)


    와 같이 서브쿼리로 한번 더 묶어서 별칭으로 지정해 주면 문제 해결...

     

 

[출처] MySQL 중복 데이터 제거 (NOT IN)|작성자 닌자 (http://ninja099.blog.me/60159002192)

반응형

댓글()

select 할때 특정 필드값 우선 순위 정하기

리눅스/MySQL|2015. 1. 16. 11:42
반응형
mysql> select * from sysdocu where user='sawon'
  order by CASE user 
  when 'superman' then 1
  when 'superwoman' then 2
  when 'superbaby' then 3
  else 4
  END;

[설명]
sysdocu 테이블에서 user 필드가 sawon 인것만 검색합니다.
순서는 superman 값이 1순위,
superwoman 값이 2순위,
superbaby 값이 3순위로 출력하고
나머지는 모두 4순위로 아래 출력 되게 합니다.


반응형

댓글()

Warning: Using a password on the command line interface can be insecure. 메세지 안보이게 하기

리눅스/MySQL|2015. 1. 16. 11:41
반응형

MySQL 5.6 버전부터 mysqldump 명령시 패스워드를 같이 명령줄에 입력하면 
패스워드 노출 위험성에 대한 경고 문구가 뜨게 됩니다.

 

# mysqldump -u root -p"1234" sysdocu > sysdocu.sql
Warning: Using a password on the command line interface can be insecure.

 

이 메세지 출력을 원하지 않을 경우 아래와 같이 설정하시면 됩니다.
(사용자 계정 및 비밀번호를 미리 입력해두고 호출하는 방법)

 

# mysql_config_editor set --login-path=autologin --host=localhost --user=root --password
Enter password: (패스워드를 한차례 입력해줍니다.)

 

이제 root 계정과 패스워드가 autologin 이라는 명칭으로 저장되었습니다.

 


[옵션 설명]
--login-path : 구분하기위한 문자를 입력합니다. 여기서는 autologin 이라고 했지만 헷갈리지 않도록 계정명과 동일하게 사용하셔도 됩니다.

--host : 접속하려는 DB서버의 호스트명 또는 IP를 입력합니다.
--user : 저장할 계정을 입력합니다.
--password : 패스워드값은 제외하고 옵션만 지정하여 실행합니다. 패스워드는 엔터를 친 다음에 입력해야 합니다.


* 삭제시

mysql_config_editor remove --login-path=autologin


* 설정 리스트 확인시

mysql_config_editor print --all


 

[사용방법]
# mysqldump --login-path=autologin sysdocu > sysdocu.sql

패스워드 경고 메세지 없이 작업이 완료됩니다.



반응형

댓글()

./mysql_install_db: line 37: use: command not found

리눅스/MySQL|2015. 1. 16. 11:41
반응형

MySQL 설치시 아래와 같은 에러 메세지가 나타났을 경우


# sh ./mysql_install_db
./mysql_install_db: line 37: use: command not found
./mysql_install_db: line 38: use: command not found
./mysql_install_db: line 39: use: command not found
./mysql_install_db: line 40: use: command not found
./mysql_install_db: line 41: use: command not found
./mysql_install_db: line 42: use: command not found
./mysql_install_db: line 43: use: command not found
./mysql_install_db: line 45: syntax error near unexpected token `"pass_through"'
./mysql_install_db: line 45: `Getopt::Long::Configure("pass_through");'


아래와 같이 실행 명령을 바꾸어 해결할 수 있습니다.

# perl ./mysql_install_db



반응형

댓글()

Curses library not found. Please install appropriate package

리눅스/MySQL|2015. 1. 16. 11:41
반응형

mysql 5.6.14 설치시 cmake 할때 아래와 같은 에러메세지가 출력될경우

  
-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:85 (MESSAGE):
  Curses library not found.  Please install appropriate package,
 
      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:128 (FIND_CURSES)
  cmake/readline.cmake:202 (MYSQL_USE_BUNDLED_EDITLINE)
  CMakeLists.txt:325 (MYSQL_CHECK_EDITLINE)
 
 -- Configuring incomplete, errors occurred!
 
 아래와 같이 필요한 패키지를 추가 설치 후 다시 진행하면 됩니다.
 
# yum -y install bison ncurses-devel
# rm -f CMakeCache.txt
# cmake ... (생략)

반응형

댓글()

mysql 바이너리 로그 파일 초기화

리눅스/MySQL|2015. 1. 16. 11:40
반응형
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
....
mysql-bin.005009
 
위와같이 로그파일이 많아 삭제를 하고 000001 번부터 다시 사용하고자 할 경우에는
로그 인덱싱 파일(mysql-bin.index)과 모든 로그 파일(mysql-bin.*)을 삭제한 후
mysql 을 재시작 하면 아래와 같이 새롭게 생성이 됩니다.
 
-rw-rw----  1 mysql mysql      107  9월 13 11:46 mysql-bin.000001
-rw-rw----  1 mysql mysql       19  9월 13 11:46 mysql-bin.index


반응형

댓글()