ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [리눅스] FTP보안설정
    서버/리눅스 2017. 4. 25. 19:21

    보안설정 목적

    사용자별로 데이터 공개범위를 두어 서버의 데이터를 보호한다.


    목차


    /etc/vsftpd/vsftpd.conf

    12 anonymous_enable=                 익명 계정 연결 허용 여부( anonymous )

    16 local_enable=                          로컬 사용자 계정 연결 허용 여부( server user ) >>(12, 16)둘다 NO하면 서버 차단

    19 write_enable=                            쓰기권한 허용 여부( local사용자 대상)

    23 local_umask=022                      어느권한으로 설정할건가요?? ( 쓰기권한 차단 )

    29 #anon_upload_enable=YES         익명사용자 쓰기권한 = 주석이걸려있으므로 풀면 anonymous계정의 업로드가 허용된다.

    33 #anon_mkdir_write_enable=YES   익명사용자 디렉터리 생성 여부

    37 dirmessage_enable=                 접속시 메세지

    40 xferlog_enable=YES                  xferlog 사용 여부

    43 connect_from_port_20=YES        20번 포트로 연결

    53 #xferlog_file=/var/log/xferlog     log저장경로 이게 기본값이니 바꾸고싶으면 주석풀고 바꿔서 사용한다

    60 #idle_session_timeout=600        세션의 접속시간을 제한한다. 이것도 기본값이니 바꾸고 싶으면 주석풀고 바꿔서 사용한다.

    63 #data_connection_timeout=120  데이터 전송시간을 제한한다 이것도 기본값이니 바꾸고 싶으면 주석풀고 바꿔서 사용한다.

    67 #nopriv_user=ftpsecure             anonymous 사용자를 ftpsecure사용자로 처리한다.

    100 #chroot_local_user=                상위 디렉터리 접근 거부 여부

    101 #chroot_list_enable=                상위 디렉터리 예외 리스트 사용 여부

    103 #chroot_list_file=/etc/vsftpd/chroot_list    위의 설정에서 제외될 사용자 계정 리스트 파일( 관리자만들어주는것 같다 )

    114 listen=NO                            (ftp동작상태) init 상태 (다른 데몬에의해 ftp데몬이 동작할때 변경)

    123 listen_ipv6=YES                     (ftp동작상태) Standalone 상태  (ftp데몬이 혼자 동작하는상태)

    125 pam_service_name=vsftpd        PAM 인증시 파일 이름 지정

    126 userlist_enable=Yes                사용자 계정 접근제어 목록 사용여부

    127 tcp_wrappers=Yes                    tcp_wrapper 접근제어 사용여부( 호스트 ip를 가지고 접근하는 것 )


    상위 디렉터리 이동 막기

    local사용자로로 접속하게 되면 시작디렉터리는 홈디렉터리이다.

    홈디렉터리의 상위디렉터리는 모든유저들의 홈디렉터리가 보관된 디렉터리이므로 어떤유저가 있는지 노출된다.


    #모든 사용자의의 상위 디렉터리 이동막기 (쓰기권한해제)

    #>vi /etc/vsftpd/vsftpd.conf

    100 #chroot_local_user=YES >> 주석해제(#제거)

    #>systemctl restart vsftpd

    >> ftp의 버전이 높아지면서 보안이 강화되었다.

    >> 이 옵션을 실행히시키면 쓰기권한도 같이 막혀버린다.

    >> 따라서 유저의 홈디렉터리의 쓰기권한(O)과 FTP쓰기권한(X)가 충돌을 일으켜 login failed발생한 것이다.

    >> 로그인하려는 사용자의 홈디렉터리에서 쓰기권한을 해제하자.

    #>chmod 500 ~admin01 (로그인하려는 사용자)

    >>로그인 하면 성공적으로 로그인되었다.

    >>홈디렉터리에서 시작하지만 작업공간은 "/"은 이렇게 뜬다.

    >>하지만 이상황은 다운로드만 가능한 상황이다. 다시 쓰기 권한을 주고 ftp설정파일에서 옵션하나를 추가한다.


    #모든 사용자의의 상위 디렉터리 이동막기 (쓰기권한설정)

    #>chmod 700 ~admin01

    #>vi /etc/vsftpd/vsftpd.conf

    104 allow_writeable_chroot=YES    : 104 번에 옆과 같이 쓰기권한을 작성해준다. 다시로그인

    :wq

    #>systemctl restart vsftpd


    특정 사용자만 거부

    /etc/vsftpd/vsftpd.conf

    #>vi /etc/vsftpd/vsftpd.conf

    100 #chroot_local_user=YES

    101 chroot_list_enable=YES

    103 chroot_list_file=/etc/vsftpd/chroot_list

    104 allow_writeable_chroot=YES

    :wq

    #>systemctl restart vsftpd

    >> 101, 103 주석을 해제후 104번에 쓰기권한 추가한다.

    >> 데몬 재시작


    /etc/vsftpd/chroot_list

    #>/etc/vsftpd/chroot_list

    1 admin01

    :wq

    >> 허용할 계정을 입력하고 나온다.

    >>다른 계정은 상위디렉터리로 이동이 가능하다.


    특정 사용자만 허용

    /etc/vsftpd/vsftpd.conf

    #>vi /etc/vsftpd/vsftpd.conf

    100 chroot_local_user=YES

    101 chroot_list_enable=YES

    103 chroot_list_file=/etc/vsftpd/chroot_list

    104 allow_writeable_chroot=YES

    :wq

    #>systemctl restart vsftpd

    >> 100, 101, 103 주석을 해제후 104번에 쓰기권한 추가한다.

    >> 데몬 재시작



    /etc/vsftpd/chroot_list

    #>/etc/vsftpd/chroot_list

    1 admin01

    :wq

    >> 허용할 계정을 입력하고 나온다.


    접근제어

    TCP_WRAPPERS (TCP접근제어)

    1) tcp_wrappers=YES : TCP( 로컬 ip로 이용하는 접근에 대한 설정, 기본값이 YES이다. )

    /etc/hosts.allow    :    허용 할 ip

    /etc/hosts.deny    :    거부 할 ip

    ip에는 네트워크 대역이 올수도 있다.


    /etc/hosts.allow : [데몬] : [허용할 ip]

    vsftpd : 100.100.100.    #100.100.100 대역전체 허용

    :wq

    ALL : ALL     >> 모든 서비스에 대한 전체허용


    /etc/hosts.deny: [데몬] : [거부할 ip]

    vsftpd : ALL                #vsftpd데몬에 대한 전체허용

    :wq


    우선순쉬 : allow > deny ( allow에서 ALL로 다 열어놓으면 deny파일이 쓸모가 없어지는것이다. )


    #deny만 설정하고 allow 설정안했을때

    421 Service not available : 서비스를 하지 않습니다.라고 뜨면서 호스트가 막혀있는것을 확인 할 수 있었다.



    VSFTPD ( userlist 접근제어 )

    126 userlist_enable=YES

    /etc/vsftpd/user_list : 리스트에 있는 사용자를 전부 접근거부한다.

    >> 그래서 root로 로그인을 했을때 권한없음이 발생한 것이다.

    #>vi /etc/vsftpd//user_list

    ~~~

    ~~~

    ~~

    admin01         : 로그인할 계정 추가

    :wq

    이렇게 되면 root계정에서 접속하려던 것처럼 530 Permission denied에러가 발생한다.


    #user_list에 적힌 사용자만 허용하고 싶을때.

    #>vi /etc/vsftpd/vsftpd.conf

    127 userlist_deny=NO        :    한줄 추가

    :wq

    #>systemctl restart vsftpd

    다시 로그인

    >> userlist_deny=NO 한줄 추가하므로써 user_list에 있는 목록들은 전부 허용가능한 계정으로 바뀐것이다. 

    그래도 아직 root계정은 로그인 되지않는다.


    PAM모듈

    PAM : Plugablle Athorization Module

    어떤것에 대한 인증을 하는 모듈로써 이 모듈로 접근제어를 시도한다.


    125 pam_service_name=vsftpd

    #>vi /etc/pam.d/vsftpd

    :q

    다른것들은 잠시 접어두고 이 부분을 보면 된다.

    deny file=/etc/vsftpd/ftpusers  : 권한거부에 해당하는 유저들을 모아둔 파일이다.

    #>vi /etc/vsftpd/ftpusers

    root    (dd)

    :wq

    user_list에 있던 사용자들은 여기에 다있었다. 여기에서도 2중으로 제어를 하고있었기에 root계정은 로그인이 되지않았던것이다.

    여기서 root를 지워주면 root 계정으로 로그인이 가능하다.

    client#>ftp ip

    원래 관리자같은경우는 잘 안열어주기에 2중으로 제어했던것 같다.


    Active / Passive

    [Active] : 고유의 20번 21번 포트로 서버가 클라리언트한테 데이터포트접속에 대한 접속여부를 물어본다.

     이때 방화벽을 해제해야하며 노출되는 순간 보안에 위협을 받는다.


    #passive Mode 해제

    #>vi /etc/vsftpd/vsftpd.conf
    pasv_enable=NO            #맨아래에 추가

    :wq

    #>systemctl restart vsftpd

    >>맨아래에 pasv_enable=NO 라인을 추가한다.


    #client 접속 ( 옵션 -A 사용 )

    client#>ftp -A ip

      #>dir        : 그냥 명령어를 보내기 위함

    option -A : active mode


    연결된 포트를 확인한다.

    server#>ss -ant


    active모드로써 20번포트와 21번포트가 열려있는것을 확인할 수 있다.


    [Passive] : 서버가 클라이언트에게 묻는 고유의 포트를 여는것을 방지하기 위해 

      클라이언트측에서 21번 포트로 랜덤의 포트번호를 전송하므로써 서버가 클라이언트에게 묻는상황을 만들지않는다.


    MIN~MAX 포트번호를 지정해서 열어놓는다. ( 데이터통신포트 ) 

    이때 최소 포트번호는 1024이상이며 높은 번호의 포트를 열어야한다. ( 아래포트는 이미 다사용중이므로 충돌방지 )

    #passive Mode 설정

    #>vi /etc/vsftpd/vsftpd.conf
    pasv_enable=YES           #맨아래에 추가

    pasv_min_port=4000

    pasv_max_port=4100


    :wq

    #>systemctl restart vsftpd


    #client접속

    client#>ftp ip

      #>dir        : 그냥 명령어를 보내기 위함

    default가 passive 모드


    연결된 포트를 확인한다.

    server#>ss -ant


    20번의 고정포트가 풀리면서 설정했던 포트중 하나가 사용되었다.


    네트워크 대역대 설정방법

    100.100.100.                                :  100.100.100.1 ~ 100.100.100.254 까지의 ip (0과 255는 예약ip)

    100.100.100. EXCEPT 100.100.100.3   :  100.100.100.1 ~ 100.100.100.254 에서 100.100.100.3을 제외한 모든 ip

    100.100.100.1/255.255.255.0            : netmask사용법

    100.100.100.1/24                          : prefix 사용법



    '서버 > 리눅스' 카테고리의 다른 글

    [리눅스] Telnet  (0) 2017.04.26
    [리눅스] xinetd ( 서비스관리 데몬 )  (0) 2017.04.26
    [리눅스] FTP  (0) 2017.04.24
    [리눅스]Quota  (0) 2017.04.20
    [리눅스] 오토마운트  (0) 2017.04.20

    댓글

Designed by Tistory.