본문으로 바로가기

Day-35 VSFTP (미완)

category Linux 2017. 1. 30. 21:34

Server-A                    Master DNS
Server-B                    Slave  DNS  forwarder { 8.8.8.8; 8.8.4.4; }
Client-Linux                Slave  DNS  forward only;
Client-Window            Slave  DNS

 

 

Server-A, Server-B, Client-Linux

 

#chkconfig iptables off

#vi /etc/sysconfig/selinux
enforcing --> disabled

 

#vi /etc/resolv.conf
 nameserver 100.100.100.110                                              

nameserver 100.100.100.120                                             
#vi /etc/sysconfig/network-scripts/ifcfg-eth0                       

 DNS1=100.100.100.110
 DNS2=100.100.100.120


Server-A
#vi /etc/named.conf
             dnssec -enable no          

             dnssec-validation no 

#service named restart
#service network restart

 

#dig @ns.taehoon.com google.com

 

 


PAM을 이용한 로그인 제한
PAM( Pluggable Authentication Module )
서비스 접속 및 각종 인증에 사용되는 모듈

 

ftpuser 파일을 이용한 FTP 사용자 접근 제어는 사용자 인증에 사용되는 모듈 PAM의 pam_listfile.so 모듈을 이용해 가능하다.

 

#cat /etc/pam.d/vsftpd
- 인증을 담당하는 2번째 줄 auth에서 해당 설정 확인

 

 

 

auth required pam_listfile.so
item=user sense=deny                   // (sense=deny)하며, 해당 파일이 없거나 파일명이 다르면 접속을 허용
file=etc/vsftpd/ftpusers             // 해당파일(file=etc/vsftpd/ftpusers)에 등록되어 있는 사용자는 접근 금지
onerr=succeed                             // (onerr=succeed) 하라는 의미.

 

vsftp에서 PAM을 사용하기 위해 설정파일에 명시가 되어 있다.

 

#vi /etc/vsftpd/vsftpd.conf

pam_service_name=vsftpd


VSFTP 인증 절차
(1) 클라이언트가 FTP서버에 서비스 요청 (로그인)

 

(2) VSFTP서비스가 PAM 에게 인증을 요청(위임)
- /etc/vsftpd/vsftpd.conf 설정 중
pam_service_name=vsftpd옵션 확인 후 PAM 설정 확인

 

(3) PAM 설정 파일 확인
- /etc/pam.d/vsftpd 파일의 모듈 및 설정 내용 확인(pam_listfile.so)

 

(4) 인증 결과를 서버에게 전달
- sense=deny, onerr=succeed

 

(5)FTP 서버는 PAM인증 결과로 VSFTP서비스 승인/거부를 진행

     

     Client-Linux
               ↑
              ㅣ
              ㅣ
               ↓

                                  FTP Server
      


            
                             인증
                      ---------------->
  VSFTPD                                    PAM

                      <----------------
                            YES/NO
     

     
     
-/etc/vsftpd/vsftpd.conf 설정 변경 후 진행
userlist_enable=NO
#userlist_deny=NO

 

(1) /etc/vsftpd/ftpusers 파일에 ftp-user3을 추가한 후 접속을 시도한 뒤에 /var/log/secure 파일을
 tail로 확인하여 PAM에 의하여 인증이 실패해서 서비스 접근이 거부되엇다는 메세지를 확인(실패)
 

#useradd ftp-user3

   userpasswd ftp-user3 : 123

#vi /etc/vsftpd/ftpusers

   ftp-user3

 

 

 

 

 

(2) /etc/vsftpd/ftpusers 파일에 ftp-user3을 추가한 후 접속이 가능 하도록 vsftpd PAM설정 파일을 수정 (성공)

#vi /etc/pam.d/vsftpd
sense=allow

 

 

 

(3) ftp-user3 접속을 성공 했다면,

/etc/vsftpd/vsftpd.conf에서
userlist_enable=NO 옵션을
userlist_enable=YES 로 변경하여 user_list 파일을 활성화 및 데몬 재시작 후 로그인 시작(성공)

 

 

 

(4) userlist_deny=YES 옵션을 추가하여 로그인 시도(성공)

 

 

 

(5) userlist_deny=NO 옵션을 변경하여 로그인 시도(실패)

 

 

-PAM 승인/거부 및 user_list 사용 여부에 따라 다양한 설정이 가능하므로 옵션 변경을 통해 테스트 하기

 

 

chroot 적용하기

 

(1)vim /etc/vsftpd/vsftpd.conf
vsftpd.conf 파일을 수정하여 chroot를 적용한다.
(사용자가 접근 가능한 최상위 디렉토리가 자신의 홈디렉토리로 제한된다는 의미)

 

(2)chroot_local_user=YES
로컬 유저에게 chroot 적용을 한다

 

(3)allow_writeable_chroot=YES
사용자에게 chroot가 적용된 자신의 홈 디렉토리로의 접근을 허용한다.

 

(4)chroot_list_enable=YES
chroot 예외 설정을 위한 기능을 활성화 한다.

 

(5)chroot_list_file=/etc/vsftpd/chroot_list
모든 계정 사용자에게 chroot를 적용했지만 예외로 chroot기능을 적용하지 않을 사용자를 정의하기 위해 사용하는 옵션이다.

 

즉, /etc/vsftpd/chroot-list 파일에 등록된 사용자는 chroot가 적용되지 않고 시스템 최상위 디렉토리(/)로의 접근을 허용한다는 의미

 

chroot
(1)ftp-user1, ftp-user2 계정의 홈디렉토리 임의의 파일을 생성한다
ex) ftp-user1_file, ftp-user2_file

 

(2) vim /etc/vsftpd/chroot_list

 

(3) ftp-user1 계정을 chroot_list 파일에 포함

 

(4) ftp-user2 계정은 포함하지 않는다.

 

Client-Linux
(5) ftp-user1 계정으로 FTP서버에 접속하여 현재 경로 및 리스트를 출력한다.

 

(6) ftp-user2 계정으로 FTP서버에 접속하여 현재 경로 및 리스트를 출력한다.

 

 

 

 

- 기본적으로 사용자가 시스템에 접근 가능한 최상위 디렉토리는 (/)루트 이다.
- chroot가 적용되면 이 최상위 디렉토리가 일반적인 경우 /home/username으로 변경되어 사용자의 홈디렉토리 이상의 경로로 이동이 불가능하게 된다.
- 이 기능은 기본으로 사용되지 않고 있는데, 이 경우는 사용자가 FTP서버 접속 시 자신의 홈 디렉토리 이사으이 경로로 변경이 가능하게 된다.
- FTP 서버의 보안을 고려한다면 반드시 사용할 것을 추천한다.

 

 

접근과 연결제한


TCP_WRAPPER
- Xinetd 데몬에 의해 수행되는 서비스들의 접근제어 프로그램

 

(1) vim /etc/vsftpd/vsftpd.conf
tcp_wrappers=YES

 

VSFTP 서버의 주 설정 파일을 열어서 TCP_WRAPPER를 사용하기 위해 설정한다.

 

(2) vim /etc/hosts.deny
vsftpd:ALL

 

TCP_WRAPPER가 접근 금지를 위해 사용하는 /etc/hosts.deny 파일을 열어서 모든(ALL)
네트워크로부터 VSFTP 서버로의 접근을 금지한다는 규칙을 생성한다.

 

(3) vim /etc/hosts.allow
vsftpd:*.taehoon.com 100.100.100.0/255.255.255.0

 

접근을 허용할 네트워크 주소를 정의하기 위해 /etc/host.allow 파일을 수정한다.
도메인 taehoon.com의 모든 호스트에 접근을 허용하고 100.100.100.0/24 대역의 네트워크의 접근도 모두 허용한다.

 

(4)tcpdmatch vsftpd 100.100.100.130
테스트를 위해 명령어 tcpdmatch를 이용해 vsftpd 서비스에 대해 클라이언트를 조회하면 접속이 허용되어(granted) 있음을 알 수 있다.

 

 

(5) vim /etc/hosts.allow 파일의 설정을 잠시 주석 처리 한 후, tcpdmatch와 클라이언트 접속 테스트 결과 확인

 

 

TCP_WRAPPER는 서비스 접근 제어시 규칙을 이용해 기능을 한다.

 

- 두 파일 중 /etc/host.allow 파일은 /etc/hosts.deny 파일보다 우선순위에 있어서 hosts.allow에 규칙이 먼저 해석 된다.

 

- 그러므로 hosts.deny에 있는 규칙에 겹친다면 이 규칙들은 무시되고 적용되지 않는다.

 

- 한 파일 내에 존재하는 규칙들은 탑다운(top_down)방식에 의해 해석된다.

  그러므로 제공하는 서비스에 대해 겹치는 규칙이 존재한다면 첫 번째 규칙만 적용되고 나머지는 적용되지 않는다.
 
- 즉 규칙의 순서가 아주 중요하다는 의미이다.

 

- 이 두 개의 파일에 어떤 규칙도 존재하지 않는다면 기본적으로 이 프로그램을 사용하는 모든 서비스는 접근을 허용하게 된다.

 

- host.allow나 hosts.deny 파일에 어떤 변경을 하게 되면 네트워크 서비스를 다시 시작하지 않더라도 바로 적용된다. 

 

연결 제한

 

vim /etc/vsftpd/vsftpd.conf
(1) max_clients=50                            // 동시에 VSFTP 서버에 접속 가능한 사용자 수 의미
(2) max_per_ip=10                            // 한 개의 IP주소에서 연결 가능한 수를 의미한다.
(3) anon_max-rate=10000                 // 임의의 사용자들이 초당 전송 가능한 최대 데이터 속도를 의미한다.
(4) local_max_rate=40000               // 계정 사용자들이 초당 전송 가능한 최대 데이터 속도를 의미한다.
(5) max_login_fail=3                        // 설정된 횟수만큼 로그인에 실패하면 세션이 끊기게 된다.
(6) idle_session_timeout=300          // 단위는 초이며, 이 시간 동안 클라이언트로부터 FTP 명령이 없으면 세션이 끊긴다.

 

Passive 모드 설정

 

vim /etc/vsftpd/vsftpd.conf

 

(1)pasv_enable=YES                        //Passive 모드 설정을 사용하겠다고 정의한다.
(2)pasv_max=port=61010                //FTP 클라이언트에게 Passive 모드 이용시 최대로 사용 가능한 포트 번호를 정의한다.
                                                       //기본값은 0인데, 이것은 최대 사용 포트에 대한 제한이 없다는 의미로서 값은 65535를 초과해서는 안 된다.
(3)pasv_min=port=61000                //FTP 클라이언트에게 Passive 모드 이용 시 최소로 사용 가능한 포트 번호를 정의한다.
                                                       //기본 값은 0인데, 이것은 최소 사용 포트에 대한 제한이 없다는 의미로서 이 값은 1024보다 낮게 설정할 수 없다.
        
        
VSFTP 보안 기능 설정 : SFTP와 FTPS

 

- 일반적으로 FTP 서버를 이용한 파일전송은 보안 기능이 적용되지 않는다.
- 안전한 파일 전송을 위해 사용하는 가장 일반적인 방법은 SFTP와 FTPS를 사용하는 방법이다.

 

Server-A
(1) yum -y install openssh-server openssh          

     

(2) vim /etc/ssh/sshd_config

 

 

SSH 서버에서 외부 프로그램을 사용하기 위해 설정하는 키워드 Subsystem에 이름 sftp와 internal-sftp를 지정한다.

 

internal-sftp는 ChrootDirectory옵션을 사용해 각 사용자 별로 chroot를 적용하기 위해 새롭게 만든 이름이다.

 

정의된 sftp를 사용할 그룹 이름과 그 옵션이 정의 됐는데, 이 그룹에 속한 사용자들은 ssh및 scp를 사용할 수 없고 오직
sftp만 사용 가능하며, 또한 chroot가 적용되어 자신의 홈 디렉토리를 루트(/) 디렉토리로 인식한다.

 

TEST

 

Server-A

(1) service network restart

 

(2) groupadd sftp-users
         useradd -G sftp-users sftp-user1
         useradd -G sftp-users sftp-user2
         passwd sftp-user1
         passwd sftp-user2
         id sftp-user1

         id sftp-user2

 

(3) mkdir /home/sftp-user1/test_dir

 

(4)chmod -R 755 /home/sftp-user1
    chown -R root:sftp-users /home/sftp-user1

 

chroot를 적용하기 위해서 소유자(root)외에 쓰기 권한을 제거하며, 디렉토리의 소유자를 변경하여야 한다.


Client-Linux

sftp 접속 테스트 (3번만 접속 허용) 2,4번은 접속 불가

(1) yum -y install openssh-clients

 

(2) ssh sftp-user1@ftp.taehoon.com
         This service allows sftp connections only
 
         sftp-user 그룹에 속한 사용자 sftp-user1이 FTP서버로 ssh 접속을 시도하면, 이 사용자는 오직 sftp 서비스만
         사용할 수 있다는 메시지와 함께 연결이 끊기게 된다.

 

(3) sftp sftp-user1@ftp.taehoon.com
 다시 사용자가 sftp-user1이 sftp로 접속을 시도하면 정상적으로 접속이 이루어지고 현재 경로가 사용자의 홈 디렉토리이며,
 sftp-user1이 사용할 수 있는 최상위 디렉토리가 된다.

 

(4) sftp sftp-user2@ftp.taehoon.com


 sftp-user1 계정은 접속은 가능하나, 디렉토리에 권한이 없어 명령어 사용에 제한이 되어 있다.

 

 

 

 

Client-Window


FileZilla 접속
 
sftp 업로드 o 다운로드 x
vi /etc/vsftpd/vsftpd.conf

wirte_enable=YES
 

 

'Linux' 카테고리의 다른 글

Day-37 Samba & NFS  (0) 2017.01.31
Day-36 FTPS & Samba(미완)  (0) 2017.01.31
Day-34 FTP  (0) 2017.01.27
Day-33 DNS  (0) 2017.01.26
Day-32 DNS  (0) 2017.01.25