TLS(전송 계층 보안)를 지원하는 FTP 서버를 설정하여 데이터 전송 중 보안을 강화할 수 있습니다. 여기서는 vsftpd를 예로 들어 TLS 지원을 추가하는 방법을 설명하겠습니다. TLS를 활성화하면 FTPS(File Transfer Protocol Secure)를 통해 데이터를 암호화하여 전송할 수 있습니다.

1. SSL 인증서 생성

FTPS 연결을 위해서는 SSL 인증서가 필요합니다. 자체 서명된(셀프 사인드) 인증서를 생성하거나, 인증 기관(CA)으로부터 인증서를 구입할 수 있습니다. 빠른 설정을 위해 여기서는 자체 서명된 인증서를 생성하는 방법을 안내합니다.

sudo mkdir /etc/ssl/private
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

이 명령은 365일 동안 유효한 새 RSA 키 쌍과 자체 서명된 인증서를 생성합니다. 생성 과정에서 몇 가지 정보(예: 국가, 조직 이름 등)를 입력해야 합니다.

2. vsftpd 설정 파일 수정

다음으로, vsftpd 설정 파일(/etc/vsftpd.conf)을 수정하여 TLS 지원을 활성화합니다. 텍스트 에디터로 파일을 열고 다음 줄을 추가 또는 수정합니다.

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem

이 설정은 TLS를 활성화하고, 익명의 SSL 연결은 허용하지 않으며, 모든 로컬 데이터 전송과 로그인을 SSL을 통해 강제로 실행하도록 합니다. 또한, SSLv2와 SSLv3는 보안상의 이유로 비활성화하고, TLSv1은 활성화합니다.

3. vsftpd 재시작

설정을 변경한 후, vsftpd를 재시작하여 변경 사항을 적용합니다.

sudo systemctl restart vsftpd

4. 방화벽 설정 (필요한 경우)

TLS를 사용하는 FTP 서버는 일반적으로 제어 연결에 21번 포트를 사용하며, 데이터 전송을 위해 추가 포트를 동적으로 할당합니다. vsftpd 설정에서 pasv_min_port와 pasv_max_port를 설정하여 패시브 모드에서 사용할 포트 범위를 지정할 수 있습니다. 이 포트 범위도 방화벽을 통해 열어야 합니다.

예를 들어, 40000에서 50000 사이의 포트를 열려면:

sudo ufw allow 40000:50000/tcp
sudo ufw reload

주의사항

  • 자체 서명된 인증서를 사용할 경우, 클라이언트는 서버의 인증서를 신뢰할지 여부를 확인할 수 있어야 합니다. 인증 기관에서 발급받은 인증서를 사용하는 것이 보다 안전하고 신뢰성이 높습니다.
  • FTPS와 SFTP는 서로 다릅니다. FTPS는 FTP에 SSL/TLS 보안을 추가한 것이고, SFTP는 SSH(File Transfer Protocol over SSH)를 기반으로 합니다. 용도에 맞게 적절한 프로토콜을 선택하세요.

특정 사용자가 FTP로만 접속할 수 있고 SSH로는 접속할 수 없도록 설정하는 것은 보안을 강화하는 데 도움이 될 수 있습니다. 이를 구현하는 방법은 여러 가지가 있지만, 여기서는 가장 일반적인 두 가지 방법을 소개하겠습니다.

1. 사용자 쉘을 변경하여 SSH 접속 차단

사용자의 로그인 쉘을 /bin/false나 /usr/sbin/nologin으로 변경하면 해당 사용자의 SSH 접속을 차단할 수 있습니다. 이 방법은 사용자가 시스템에 로그인할 수 없게 하지만, 사용자가 FTP를 통해 파일 전송은 가능하게 합니다. 이를 위해 다음 명령어를 사용할 수 있습니다:

sudo usermod -s /usr/sbin/nologin username

여기서 username은 해당 설정을 적용하고자 하는 사용자의 이름입니다. 이 변경 후에는 사용자가 SSH로 접속을 시도하면 접속이 거부됩니다.

2. SSH 서버 설정 변경

/etc/ssh/sshd_config 파일을 편집하여 특정 사용자 또는 사용자 그룹의 SSH 접속을 차단할 수 있습니다. 이 파일에서 DenyUsers 또는 AllowUsers 지시어를 사용하여 특정 사용자의 접속을 제어할 수 있습니다.

예를 들어, 특정 사용자 username의 SSH 접속을 차단하려면, /etc/ssh/sshd_config 파일을 열고 다음 줄을 추가합니다:

DenyUsers username

또는, 특정 사용자만 SSH 접속을 허용하고 나머지는 모두 차단하려면, AllowUsers 지시어를 사용할 수 있습니다. 이 경우, AllowUsers에 지정되지 않은 모든 사용자는 SSH 접속이 거부됩니다.

변경 후에는 SSH 서비스를 재시작하여 변경 사항을 적용해야 합니다:

sudo systemctl restart sshd

주의사항

  • FTP 접속만 허용하려는 경우, 보안을 위해 가능하다면 FTP 대신 SFTP(SSH File Transfer Protocol) 사용을 고려해 보세요. SFTP는 SSH를 기반으로 하므로 데이터 전송 중 암호화를 제공합니다. 위에서 설명한 방법으로 사용자의 SSH 쉘 접근을 차단하면서도, 적절히 설정된 SFTP를 통해 안전하게 파일 전송을 허용할 수 있습니다.
  • 사용자가 시스템에 접속할 수 없도록 하면서도 FTP 또는 SFTP 접속을 허용하려면, FTP 서버나 SFTP 서버 설정에 따라 다를 수 있으므로 해당 서버의 문서나 설정 가이드를 참고하는 것이 좋습니다. FTP 서비스를 제공하는 서버 소프트웨어(예: vsftpd, ProFTPD 등)마다 설정 방법이 다를 수 있습니다.

vsftpd를 사용할 때 nologin 쉘을 가진 사용자가 FTP를 통해 로그인할 수 있도록 하기 위해 PAM 설정을 수정하는 방법을 설명하겠습니다. 기본적으로 vsftpd는 /etc/pam.d/vsftpd 파일을 통해 PAM 인증을 관리합니다. 이 파일을 수정하여 nologin 쉘을 가진 사용자도 FTP 접속을 허용할 수 있습니다.

PAM 설정 수정하기

  1. PAM 설정 파일 열기
    sudo nano /etc/pam.d/vsftpd
  2. /etc/pam.d/vsftpd 파일을 텍스트 에디터로 엽니다. sudo 권한이 필요할 수 있습니다.
  3. nologin 사용자 허용 설정 추가
    auth required pam_shells.so
    이 라인을 주석 처리하거나 삭제하여, pam_shells.so 모듈이 로그인을 시도하는 사용자의 쉘을 체크하지 않도록 할 수 있습니다. 대신, 다음과 같은 설정을 사용할 수 있습니다.pam_permit.so 모듈은 모든 인증 요청을 허용합니다. 이 설정을 사용하면 쉘 로그인이 제한된 사용자도 FTP를 통해 로그인할 수 있습니다.
  4. auth required pam_permit.so
     
  5. 파일 내에서, 인증 절차를 관리하는 부분을 찾습니다. 그리고 다음 라인을 파일에 추가하거나 기존 라인을 이 내용으로 대체합니다.
  6. 파일 저장 및 종료
  7. 변경사항을 저장하고 텍스트 에디터를 종료합니다. nano를 사용하는 경우, Ctrl + O, Enter를 눌러 저장하고, Ctrl + X로 종료합니다.
  8. vsftpd 재시작
    sudo systemctl restart vsftpd
  9. 변경사항을 적용하기 위해 vsftpd를 재시작합니다.

이제 nologin 쉘을 가진 사용자도 FTP를 통해 로그인할 수 있게 됩니다. 하지만, 보안상의 이유로 이 방법을 사용할 때는 주의가 필요합니다. pam_permit.so를 사용하면 인증 과정에서 보안이 약화될 수 있으므로, 가능하다면 보다 안전한 방법을 모색하는 것이 좋습니다.

+ Recent posts