토이 프로젝트/서버갖고 놀기 for DevOps

FTP 설치 및 보안을 위한 Jail & FTPS 설정 - (2)

TerianP 2021. 4. 4.
728x90

2021.04.04 - [토이 프로젝트 - 라즈베리파이로 이것저것] - FTP 설치 및 보안을 위한 Jail & FTPS 설정 - (1)

지난 글에서는 FTP 설치 및 PASSIVE FTP 로 전환하는 내용을 썼는데요 이번에는 보안을 위한 FTP Jail 설정과 SSL 적용을 통한 FTPS 설정 방법을 작성 하도록 하겠습니다.

 

1. FTP Jail 설정하기(chroot 설정하기)

일단 지난 시간까지해서 FTP에 제대로 접속이 되는것을 확인했습니다. 하지만 여기서 문제가 발생합니다. 바로 FTP 를 사용하여 접속하면 그대로 /(root쪽) 폴더/파일들이 모두 보여지는 보안적인 이슈가 발생하게 됩니다. 즉, 아무 계정이나 해당 장비의 ftp로 접속하게 되면 /(root)로 들어가서 이것저것 수정할 수 있게 됩니다. 만약 수정은 못하더라도 확인이라도 할 수 있죠. 이런 점은 보안에 아주! 중요한! 문제가 됩니다.

 

이 문제를 해결하기 위해서 FTP Jail, FTP 감옥 설정을 하면 됩니다. 이 방법을 통해 특정 계정은은 ftp로 로그인했을때 일정한 구역만 돌아다니도록 즉 감옥에 갖혀버리도록 하고, 특정 계정은 정상적으로 작업을 할 수 있게 만들 수 있습니다. chroot 설정을 통해서 말이죠.

여기서 chroot 란 change root directory 의 약자로 임시로 루트 디렉토리를 서정하는 명령어 입니다. 이걸 사용해서 특정 사용자 특정 그룹의 홈 폴더를 루트 폴더인것처럼 지정해서 상위 폴더로의 접근을 제한 할 수 있습니다.

 

저는 jsj 계정만 FTP Jail 설정을 벗어나 돌아다닐 수 있도로개 할 것입니다. 

1. /etc/vsftpd.conf 파일을 수정해야 합니다. 이때 vsftpd 가 실행되고 있다면 지난번과 마찬가지로

sudo service vsftpd stop 명령어를 사용해 vsftpd 를 종료(stop)해주셔야 합니다.

2. /etc/vsftpd.conf 를 열어 내용을 쭉~~ 내리다보면 다음 내용이 보이실 겁니다. 아래와 같이 설정합니다.

- chroot_local_user = YES 로 해두면 특정 사용자가 아닌 전체 사용자를 대상으로 자신의 홈 디렉토리의 상위 디렉토리로 이동하지 못하게 합니다.

- chroot_list_enable = YES 로 해두면 chroot_list 에 있는 사용자들만 상위 디렉토리로 접근이 제한됩니다.

 

위 두가지 옵션을 추가적으로 설명드리자면, 

1) 단순히 모든 사용자를 감옥(Jail)에 가둘? 경우 : chroot_local_user = YES 설정

2) 특정 사용자만 감옥에 가둘 경우 : chroot_list_enable=YES & chroot_list_file 에 chroot_list 파일을 설정

3) 특정 사용자를 제외한 나머지 사용자들만 감옥에 가둘 경우 : chroot_local_user 와 chroot_list_enable모두 YES 설정& chroot_list_file 에 chroot_list 설정(제가 하는 설정입니다)

 

- chroot_list_file : chroot_list_enable 와 연동되는 chroot_list 파일이 있는 위치를 지정하는 곳입니다. 제 파일의 위치는 etc/vsftpd/chroot_list 입니다. 처음에 파일이 없어서 /vsftpd/chroot_list 에 생성해서 만들어두었고, 위치랑 파일명도 살짝 조정해두었습니다.

단! chroot_local_user 와 chroot_list_enable 모두 YES 로 설정해두면 chroot_list 에 있는 계정만!! 상위 디렉토리로 전환이 됩니다! 따라서 저는 모두 YES로 해두어서 특정 사용자만 상위 디렉토리로 이동 할 수 있게 만들겠습니다.

- allow_writeable_chroot = YES 얘는 chroot 파일을 읽기 권한을 주도록 만든 것 입니다. 이걸 설정안해두면 ftp 접속시에 문제가 발생하더군요ㅠ

이렇게 설정하시면 됩니다.

2. 다음으로는 chroot_list 을 생성해서 chroot 를 벗어날 수 있는 계정을 설정해봅시다. chroot_list_file 로 지정해두었던 위치( etc/vsftpd/ )에 chroot_list 파일을 만들고 내용은 상위 디렉토리로 이동을 원하는 계정만 적어둡니다.

만약 내가 여러 계정을 적고 싶다면 한줄에 한명씩 적어두어야합니다.

요렇게 계정명만 그냥 적어주시면 됩니다

 

3. sudo service vsftpd start 해서 ftp 를 실행시켜 줍니다.

jsj 계정은 제가 주로 사용하는 계정이여서 상위 디렉토리까지 접근이 가능하도록 해두었습니다(chroot 파일에 적어둠)

jsj 외 다른 계정은 chroot_list 에 적어두지 않았기 때문에 자신의 home 디렉토리에서 나오지 못하게 Jail 설정이 적용되게 됩니다.

 

이제 접속해보면 아래와 같이 제대로 설정이 완료된 것이 보입니다.

ftpuser 의 경우 아래와 같이 / 디렉토리로의 접근이 제한됩니다(눌러도 무반응이에요)

ftpuser 로 들어갔을때 넘어가지지 않아요!

반면 jsj 계정은 / 디렉토리로 제대로 전환이 되는것이 보이네요

jsj 는 / 로 들어가지는게 보이네용

사실 Jail 저도 처음해본 설정인데...보안상 참 맘에 드는 설정이네요. 다른사람에게 혹시나 알려준다고해도 이렇게 설정 후 알려주면 걱정도 덜 되고 혹시나 모를 해킹에 대비해서도 참 좋을 것 같습니다.

 

2. SSL 적용을 통한 FTPS(FTPES) 설정하기

오늘의 메인인 SSL 적용을 통한 FTPS 설정을 시작하겠습니다.

 

그전에! 먼저 SSL에 대한 내용을 한번 짚고 넘어가겠습니다.

HTTP 와 HTTPS 혹시 들어보셨나요?? HTTPS 란 SSL을 사용해서 HTTP 의 강화를 위해 만들어진 서비스입니다. 아래처럼 자물쇠가 걸려서 나오는 사이트들이 HTTPS 를 사용하는 사이트들입니다. 그럼 이 둘의 차이는 뭘까요? 바로 패킷 암호화 입니다.

자물쇠 표시! 요게 SSL 적용된 HTTPS 의 모습입니다

패킷이란 쉽게 이야기하자면 인터넷 상에서 떠도는 데이터 조각? 덩어리? 들입니다. 인터넷 세상에서는 서로 통신하기 위해서 무수히 많은 데이터들을 보냅니다. 카톡하는 것처럼 서로 연결하고 이야기를 하기 위해서는 항상 데이터가 서로 전달되어야 하죠. 이러한 인터넷 세상에서 서로 연결하고 어떤 데이터들을 전달하기 위해서 서로 보내지는 데이터 조각이자 데이터 덩어리 입니다. 이렇게 떠돌아다니는 패킷들을 잡아서 분석 할 수 있는 도구가 바로 wireshark - 와이어 샤크 입니다(요거 말고도 패킷 보는 프로그램은 많습니다) 보통 해킹 대응이나 패킷 분석에 사용되는 도구입니다. 이걸 이용해서 HTTP 와 HTTPS 를 비교해봅시다.

 

위쪽이 HTTPS 아래쪽이 HTTP 입니다. 사진의 빨간색 박스 안을 보시면 위쪽은 암호화되어서 어떤 내용이 있는지 모르는 반면에 아래쪽은 id : 1 로 제가 입력한 아이디가 그대로 들어나고 있습니다.

위 : HTTPS 아래 : HTTP

이렇게 패킷이 보이면 보안상 아주아주 안 좋습니다. 누가 패킷을 살짝 훔쳐서 보면 ID PASSWD 가 금방 알려지니까요. 때문에 우리는 보안을 위해 SSL 을 적용해서 FTPS 를 적용해보도록 하겠습니다.

 

1. FTPS 를 사용하기 위해서는 먼저 SSL인증서를 만들어야 합니다.

인증서를 만드는 명령어는 다음과 같습니다.

sudo openssl req -x509 -days 3650(인증서 만료일입니다. 공인인증서의 그 만료일이라고 생각하시면 됩니다 저는 다시 만들 생각이 없는 관계로 10년의 기간을 잡았습니다) -newkey rsa:4096 -nodes /etc/vsftpd/ssl/vsftpd.pem(원하시는 인증서 생성 위치와 파일명을 적어줍니다) -keyout -out /etc/vsftpd/ssl/vsftpd.pem(원하시는 인증서 생성 위치와 파일명을 적어줍니다)

sudo openssl req -x509 -days 3650 -newkey rsa:4096 -nodes /etc/vsftpd/ssl/vsftpd.pem -keyout -out /etc/vsftpd/ssl/vsftpd.pem

 

저는 인증서 기간을 넉넉히 10년, rsa 로 암호화를 하고 4096 비트로 만들었습니다.

SSL 내용 창

  • Country Name : 이것은 두 자로 된 ISO 형식의 국가 코드입니다.
  • State or Province Name : 시 이름을 입력해야 하며 약어를 사용할 수 없습니다 => 서울
  • Locality Name : 이 필드는 대부분의 경우 생략이 가능하며 업체가 위치한 곳를 나타냅니다 => 서울
  • Organization Name : 사업자 등록증에 있는 회사명과 일치되는 영문 회사명을 입력하시면 됩니다. 회사명 없으면 자신이 원하는 내용을 적어줍시다.
  • Organization Unit Name : "리눅스 관리팀", "윈도우 관리팀" 등과 같이 업체의 부서를 입력할 수 있습니다. 역시나 마찬가지로 그냥 나름 멋지게 적어봅시다.
  • Common Name : 요거는 일단 엔터쳐서 그냥 넘어갑시다

위의 내용을 그냥 엔터만 쳐서 넘어갈 수 있습니다. 하지만 대충이라도 적어두는게 나중에 멋있게 나와요!

 

2. 이후에는 다시 /etc/vsftpd.conf 파일에 설정을 건들여봅시다.

먼저 아래 사진 부분을 찾아서 ssl_enable=YES 로 바꿔줍니다. 또한 rsa 두 가지를 주석처리(#)해줍니다(필수)

SSL_enable=YES

다음으로 파일의 맨 아래쪽에 사진의 내용들을 추가하고 저장합니다.

단 rsa 로 시작하는 두 부분(빨간색 창)에는 본인의 ssl인증서 경로와 파일명을 적어두셔야합니다. 저는 아까 제가 만든 파일들인 vsftpd/ssl/vsftpd.pem 로 설정하였습니다(필수)

그 아래 부분들은 TLS 사용을 위한 추가적인 설정입니다. TLS는 SSL의 발전판이라고 생각하시면 됩니다. 이 부분을 설정해두면 FTP 연결시에 클라이언트가 반드시 TLS를 사용해서 연결을 하도록 만듦니다. 역시나 하셔도 좋고, 안해도 무관합니다.

설정 내용

파일 설정 내용 적용을 위해 sudo service vsftpd restart 잊지 마세요!

 

3. 이제 FTP에 접속해보겠습니다!

FTP 클라이언트는 가장 대표적인 FTP 프로그램인 FileZilla를 사용한다는 가정하에 글을 이어나가도록 하겠습니다.

FileZilla 프로그램상에서 설정해주셔야하는게 몇 가지 있습니다.

 

아래 사진처럼 1번으로 들어가셔서 암호화 부분을 TLS를 통한 명시적 FTP 필요로 바꿔줍니다. 그 다음 전송 설정으로 가셔서 전송 모드를 수동형으로 바꿔주시고, 문자셋에서는 UTF-8 강제설정으로 설정해줍니다.

귀찮아서 대충 수정하다보니 그림이ㅠㅠ

그런 다음 FTP서버에 접속하셔서 연결하시면!!!

와! 보이시나요? 이게 바로 보안인증서 SSL/TLS 적용된 모습입니다

요렇게 멋지게 인증서가 나옵니다.

제가 적어둔 이름, 기관 국가 등등 잘 나오네요. 이렇게보면 되게 뭔가 있는거 같지 않나요?ㅋㅋㅋㅋ

이렇게까지 나와서 정상 접속까지 확인하면, FTPS 설정이 완료된 것입니다.

 

 

사실 중간중간 설명이 부족한 부분이나 이상한 부분이 많습니다. 저도 뭔가 완전히 이해하고 한다기 보다는 따라하면서 제가 글로 쓰면서 이해하는 부분이 더 많아서...뭔가 설명이 부족하다고 생각되는 부분은 구글링하면 아주 다양하고 많은!! 정보가 나오니 이를 활용하시면 더욱 좋을 것 같습니다.

지금까지 긴 글 읽어주셔서 감사합니다.

댓글