16.2. FTP
FTP
( File Transfer Protocol )는 오늘날 인터넷에서 발견된 가장 오래되고 가장 일반적으로 사용되는 프로토콜 중 하나입니다. 그 목적은 사용자가 원격 호스트에 직접 로그인하거나 원격 시스템을 사용하는 방법에 대한 지식이 없어도 네트워크의 컴퓨터 호스트 간에 안정적으로 파일을 전송하는 것입니다. 사용자는 표준 간단한 명령 세트를 사용하여 원격 시스템의 파일에 액세스할 수 있습니다.
이 섹션에서는 FTP
프로토콜의 기본 설정에 대해 간단히 설명하고 Red Hat Enterprise Linux에서 권장되는 FTP
서버인 series 를 소개합니다.
16.2.1. 파일 전송 프로토콜
FTP는 클라이언트-서버 아키텍처를 사용하여 TCP
네트워크 프로토콜을 사용하여 파일을 전송합니다. FTP
는 다소 오래된 프로토콜이므로 암호화되지 않은 사용자 이름 및 암호 인증을 사용합니다. 이러한 이유로, 이는 안전하지 않은 프로토콜로 간주되며 반드시 필요한 경우를 제외하고 사용해서는 안 됩니다. 그러나 FTP
는 인터넷에서 매우 유용하기 때문에 파일을 공용으로 공유하는 데 필요한 경우가 많습니다. 따라서 시스템 관리자는 FTP
의 고유한 특성을 알고 있어야 합니다.
이 섹션에서는 TLS
가 보안한 연결을 설정하도록 SMCP를 구성하는 방법과 SELinux 의 도움말을 사용하여 FTP
서버를 보호하는 방법에 대해 설명합니다. FTP
를 올바르게 대체하는 것은 OpenSSH 도구 제품군에서 sftp 입니다. OpenSSH 구성 및 일반적인 SSH
프로토콜에 대한 자세한 내용은 12장. OpenSSH 을 참조하십시오.
인터넷에서 사용되는 대부분의 프로토콜과 달리 FTP
는 제대로 작동하기 위해 여러 네트워크 포트가 필요합니다.
클라이언트 애플리케이션이 FTP 서버에 대한 연결을 시작할 때 서버에서 포트 21을 엽니다( 명령 포트 라고도 함). 이 포트는 서버에 모든 명령을 실행하는 데 사용됩니다. 서버에서 요청한 모든 데이터는 데이터 포트를 통해 클라이언트로 반환됩니다. 데이터 연결에 대한 포트 번호 및 데이터 연결이 초기화되는 방법은 클라이언트가 활성 모드 또는 패시브 모드로 데이터를 요청하는지 여부에 따라 달라집니다.
FTP
다음은 이러한 모드를 정의합니다.
- 활성 모드
-
활성 모드는
FTP
프로토콜에서 클라이언트 애플리케이션으로 데이터를 전송하기 위해 사용하는 원래 방법입니다.FTP
클라이언트에 의해 활성 모드 데이터 전송이 시작되면 서버는 서버에서 IP 주소로 포트 20에서IP
주소로의 연결을 열고 클라이언트가 지정한 임의의 권한이 없는 포트(24개 이상)로 연결합니다. 이 배열은 클라이언트 시스템이 1024 이상의 모든 포트에서 연결을 수락할 수 있어야 함을 의미합니다. 인터넷과 같은 안전하지 않은 네트워크가 증가함에 따라 클라이언트 머신 보호용 방화벽 사용이 이제 널리 사용되고 있습니다. 이러한 클라이언트 측 방화벽은 종종 활성 모드FTP
서버에서 들어오는 연결을 거부하기 때문에 패시브 모드가 고안되었습니다. - Passive 모드
활성 모드와 같은 패시브 모드는
FTP
클라이언트 애플리케이션에 의해 시작됩니다. 서버에서 데이터를 요청할 때FTP
클라이언트는 패시브 모드에서 데이터에 액세스하기를 원하는 것을 나타내며 서버는 서버에서IP
주소와 권한이 없는 임의의 포트 (greater than 1024)를 제공합니다. 그런 다음 클라이언트는 서버의 해당 포트에 연결하여 요청된 정보를 다운로드합니다.패시브 모드는 데이터 연결과의 클라이언트 측 방화벽 간섭에 대한 문제를 해결하지만 서버 측 방화벽의 관리를 어렵게 관리할 수 있습니다.
FTP
서버에서 권한이 없는 포트 범위를 제한하여 서버에서 열려 있는 포트 수를 줄일 수 있습니다. 이를 통해 서버에 대한 방화벽 규칙 설정 프로세스도 간소화됩니다.
16.2.2. vsftpd 서버
Very Secure FTP Daemon (keepalived )은 처음부터 빠르고 안정적이며, 가장 중요한 것은 안전한 것으로 설계됩니다. AWS는 Red Hat Enterprise Linux와 함께 배포되는 유일한 독립형 FTP
서버이며, 이는 많은 수의 연결을 효율적이고 안전하게 처리할 수 있기 때문입니다.
vsftpd
에서 사용하는 보안 모델에는 다음 세 가지 주요 요소가 있습니다.
- 권한 있는 및 권한이 없는 프로세스를 강력하게 분리 - 프로세스 분리는 서로 다른 작업을 처리하고 이러한 각 프로세스는 작업에 필요한 최소한의 권한으로 실행됩니다.
-
높은 권한이 필요한 작업은 필요한 최소한의 권한을 가진 프로세스에서 처리됩니다.
libcap
라이브러리에서 발견되는 compatibilities를 활용함으로써 전체 루트 권한이 필요한 작업을 보다 안전하게 실행할 수 있습니다. -
대부분의 프로세스는
chroot
environment - 가능한 경우 프로세스가 공유 중인 디렉터리로 변경-루트가 됩니다. 이 디렉터리는chroot
environment로 간주됩니다. 예를 들어/var/ftp/
디렉터리가 기본 공유 디렉터리인 경우 SMCP는/var/ftp/
를/
라고 하는 새 루트 디렉터리에 다시 할당합니다.이렇게 하면 새 루트 디렉토리에 포함되지 않은 디렉터리에 대한 잠재적인 악의적인 해커 활동을 허용하지 않습니다.
이러한 보안 관행을 사용하는 것은 SMCP가 요청을 처리하는 방식에 다음과 같은 영향을 미칩니다.
-
상위 프로세스는 필요한 최소한의 권한으로 실행됩니다. 상위 프로세스는 위험 수준을 최소화하기 위해 필요한 권한 수준을 동적으로 계산합니다. 하위 프로세스는
FTP
클라이언트와 직접 상호 작용을 처리하고 가능한 한 권한 없이 를 실행합니다. -
상위 권한이 필요한 모든 작업은 소규모 상위 프로세스에서 처리합니다. - Apache
HTTP
Server 와 마찬가지로 Much는 들어오는 연결을 처리하기 위해 권한이 없는 하위 프로세스를 시작합니다.이를 통해 권한 있는 상위 프로세스가 가능한 한 작게 되고 비교적 적은 작업을 처리할 수 있습니다.
- 권한이 없는 하위 프로세스의 모든 요청은 상위 프로세스에 의해 신뢰되지 않습니다 - 하위 프로세스와의 통신은 소켓을 통해 수신되고, 하위 프로세스의 모든 정보의 유효성이 작업을 수행하기 전에 확인됩니다.
-
chroot
환경의 권한이 없는 하위 프로세스에서FTP
클라이언트와의 대부분의 상호 작용 은 권한이 없으며 공유 중인 디렉터리에만 액세스할 수 있기 때문에 충돌된 프로세스는 공격자가 공유 파일에 대한 액세스 권한만 허용합니다.
16.2.2.1. 시작 및 중지 member
현재 세션에서
SMCP 서비스를 시작하려면 쉘 프롬프트에 root
로 다음을 입력합니다.
~]# systemctl start vsftpd.service
현재 세션에서 서비스를 중지하려면 root
로 다음을 입력합니다.
~]# systemctl stop vsftpd.service
member 서비스를 다시
시작하려면 root
로 다음 명령을 실행합니다.
~]# systemctl restart vsftpd.service
이 명령은 iLO 서비스를 중지하고 즉시 시작합니다. 이 서비스는 이 FTP
서버의 구성 파일을 편집한 후 구성 변경을 수행하는 가장 효율적인 방법입니다. 또는 다음 명령을 사용하여 이미 실행 중인 경우에만
SMCP
서비스를 다시 시작할 수 있습니다.
~]# systemctl try-restart vsftpd.service
기본적으로 member 서비스는
부팅 시 자동으로 시작되지 않습니다. 부팅 시 시작되도록 member 서비스를 구성하려면 root
로 쉘 프롬프트에 다음을 입력합니다.
~]# systemctl enable vsftpd.service Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
Red Hat Enterprise Linux 7에서 시스템 서비스를 관리하는 방법에 대한 자세한 내용은 10장. systemd를 사용하여 서비스 관리 를 참조하십시오.
16.2.2.2. 이름이 여러 개의 Copie를 시작
한 컴퓨터가 여러 FTP
도메인을 제공하는 데 사용되는 경우가 있습니다. 이 기술은 Multihoming 이라고 합니다. SMCP를 사용하여 다중 홈을 사용하는
한 가지 방법은 각각 자체 구성 파일을 사용하여 데몬의 여러 사본을 실행하는 것입니다.
이렇게 하려면 먼저 시스템의 네트워크 장치 또는 별칭 네트워크 장치에 모든 관련 IP
주소를 할당합니다. 네트워크 장치, 장치 별칭 및 네트워크 구성 스크립트에 대한 추가 정보를 구성하는 방법에 대한 자세한 내용은 Red Hat Enterprise Linux 7 네트워킹 가이드 를 참조하십시오.
다음으로 FTP
도메인의 DNS 서버는 올바른 시스템을 참조하도록 구성해야 합니다. BIND 에 대한 자세한 내용은 Red Hat Enterprise Linux에서 사용되는 DNS
프로토콜 구현 및 구성 파일을 보려면 Red Hat Enterprise Linux 7 네트워킹 가이드 를 참조하십시오.
member 가
서로 다른 IP
주소의 요청에 응답하려면 데몬의 여러 사본이 실행 중이어야 합니다.
데몬의 여러 인스턴스를 쉽게 시작할 수 있도록 인스턴스화된 서비스를 시작하기 위한 특수 systemd 서비스 단위(666vsftpd
@.service
)가 NetNamespace 패키지에 제공됩니다.
이 서비스 유닛을 사용하려면 FTP
서버의 필요한 각 인스턴스에 대해 별도의 vsftpd
구성 파일을 생성하여 /etc/htpasswd/
디렉터리에 배치해야 합니다. 이러한 각 설정 파일은 고유한 이름(예: /etc/htpasswd/octets-site-2.conf
)을 사용해야 하며 root
사용자만 읽고 쓸 수 있어야 합니다.
IPv4
네트워크에서 수신 대기하는 각 FTP
서버에 대한 각 구성 파일 내에서 다음 지시문이 고유해야 합니다.
listen_address=N.N.N.N
N.N.N 을 제공되는 FTP
사이트의 고유한 IP
주소로 바꿉니다. 사이트에서 IPv6
을 사용하는 경우 대신 listen_address6
지시문을 사용합니다.
/etc/tekton/
디렉토리에 여러 구성 파일이 있는 경우, root
로 다음 명령을 실행하여 RuntimeClass 데몬의 개별 인스턴스를 시작할 수 있습니다.
~]# systemctl start vsftpd@configuration-file-name.service
위의 명령에서 configuration-file-name 을 요구되는 서버 구성 파일의 고유 이름으로, (예:666 -site-2)
로 바꿉니다. 구성 파일의 .conf
확장자는 명령에 포함되어서는 안 됩니다.
engine 데몬의 여러 인스턴스를 한 번에 시작하려는 경우 RuntimeClass 패키지에 제공된 systemd 대상 단위 파일(True.target
)을 사용할 수 있습니다. 이 systemd 대상은
/etc/tekton/ 디렉토리에 있는 사용 가능한 각
시작하게 됩니다. 다음 명령을 vsftpd
구성 파일에 대해 독립 vsftpd
데몬을root
로 실행하여 대상을 활성화합니다.
~]# systemctl enable vsftpd.target Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.target to /usr/lib/systemd/system/vsftpd.target.
위의 명령은 부팅 시 구성된 RuntimeClass 서버 인스턴스(구성된
서버 인스턴스와 함께)를 시작하도록 systemd 서비스 관리자를 구성합니다. 시스템을 재부팅하지 않고 즉시 서비스를 시작하려면 vsftpd
root
로 다음 명령을 실행합니다.
~]# systemctl start vsftpd.target
systemd 대상을 사용하여 서비스 관리에 대한 자세한 내용은 10.3절. “systemd 대상 작업” 를 참조하십시오.
서버 단위로 변경하는 것을 고려해야 하는 기타 지시문은 다음과 같습니다.
-
anon_root
-
local_root
-
vsftpd_log_file
-
xferlog_file
16.2.2.3. TLS를 사용하여 rootfs 연결 암호화
기본적으로 사용자 이름, 암호, 데이터 없이 암호화 없이 데이터를 전송하는 FTP
의 본질적으로 안전하지 않은 특성을 대응하기 위해 SMCP 데몬을 구성하여 연결을 인증하고 모든 전송을 암호화할 수 있습니다.
TLS
가 활성화된 TLS와 통신하려면 TLS
를 지원하는 FTP
클라이언트가 필요합니다.
SSL
(Secure Sockets Layer)은 이전 보안 프로토콜 구현의 이름입니다. 새 버전은 TLS
(Transport Layer Security)라고 합니다. SSL
로 인해 심각한 보안 취약점이 발생하므로 최신 버전(TLS
)만 사용해야 합니다. ssl_enable
지시문이 YES
로 설정되어 있을 때 기본적으로 TLS
가 지원되고 있는 경우 vsftpd.conf
파일에 사용된 구성 지시문과 함께 SSL
이름을 사용하는 문서도 포함되어 있습니다.
TLS
지원을 사용하도록 ssl_enable
구성 지시문의 vsftpd.conf
파일을 YES
로 설정합니다. ssl_enable
옵션이 활성화된 경우 적절하게 구성된 TLS
설정에 대해 제공되는 기타 TLS
- 관련 지시문의 기본 설정입니다. 여기에는 모든 연결에 TLS
v1 프로토콜만 사용해야 하거나( insecure SSL
프로토콜 버전 사용은 기본적으로 비활성화되어 있음) 암호 및 데이터 전송에 TLS
를 사용하기 위해 모든 비익명 로그인을 사용하도록 강제하는 것이 포함됩니다.
예 16.14. TLS를 사용하도록 rootfs 구성
이 예에서 구성 지시문에서는 vsftpd.conf
파일에서 이전 SSL
버전의 보안 프로토콜을 명시적으로 비활성화합니다.
ssl_enable=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
설정을 수정한 후 SMCP 서비스를 다시 시작합니다.
~]# systemctl restart vsftpd.service
iLO에서 TLS사용을 세부 조정하려면 다른
(5) 매뉴얼 페이지를 참조하십시오. TLS
- 관련 구성 지시문의 경우 SMCP.conf
16.2.2.4. SMCP의 SELinux 정책
iLO 데몬(다른 ftpd
프로세스)을 관리하는 SELinux 정책은 필수 액세스 제어(기본적으로 최소 액세스 권한을 기반으로 함)를 정의합니다.
FTP
데몬이 특정 파일 또는 디렉터리에 액세스할 수 있도록 하려면 적절한 레이블을 할당해야 합니다.
예를 들어 익명으로 파일을 공유하려면 공개_content_t
레이블을 공유할 파일과 디렉토리에 할당해야 합니다. chcon
명령을 root
로 사용하여 이 작업을 수행할 수 있습니다.
~]# chcon -R -t public_content_t /path/to/directory
위의 명령에서 /path/to/directory 를 레이블을 할당하려는 디렉터리의 경로로 바꿉니다. 마찬가지로 파일 업로드 디렉터리를 설정하려면 해당 특정 디렉터리에 public_content_rw_t
레이블을 할당해야 합니다. 그 외에도 allow_ftpd_anon_write
SELinux 부울 옵션을 1
로 설정해야 합니다. setsebool
명령을 root
로 사용하여 다음을 수행합니다.
~]# setsebool -P allow_ftpd_anon_write=1
로컬 사용자가 Red Hat Enterprise Linux 7의 기본 설정인 FTP
를 통해 홈 디렉토리에 액세스할 수 있도록 하려면 ftp_home_dir
부울 옵션을 1
로 설정해야 합니다. enterprise
가 Red Hat Enterprise Linux 7에서 기본적으로 활성화되어 있는 독립형 모드에서 실행되도록 허용된 경우 ftpd_is_daemon
옵션도 1
로 설정해야 합니다.
FTP
와 관련된 SELinux 정책을 구성하는 방법에 대한 다른 유용한 레이블 및 부울 옵션의 예를 포함하여 자세한 내용은 ftpd_selinux(8) 매뉴얼 페이지를 참조하십시오. 또한 일반적으로 SELinux에 대한 자세한 내용은 Red Hat Enterprise Linux 7 SELinux 사용자 및 관리자 가이드 를 참조하십시오.
16.2.3. 추가 리소스
SMCP에 대한 자세한 내용은 다음 리소스를 참조하십시오.
16.2.3.1. 설치된 문서
-
/usr/share/doc/htpasswd-version-number/
directory - version-number 가 설치된 버전의 member 패키지로 교체 됩니다. 이 디렉터리에는 소프트웨어에 대한 기본 정보가 포함된README
파일이 포함되어 있습니다.TUNING
파일에는 기본 성능 튜닝 팁이 포함되어 있으며SEC/
디렉터리에는vsftpd
에서 사용하는 보안 모델에 대한 정보가 포함되어 있습니다. RuntimeClass
- 관련 도움말 페이지 - 데몬과 구성 파일에 대한 여러 도움말 페이지가 있습니다. 다음은 몇 가지 중요한 매뉴얼 페이지를 나열합니다.- 서버 애플리케이션
{blank}
-
RuntimeClass(8) - vsftpd에 사용할 수 있는 명령줄 옵션에 대해 설명합니다.
-
RuntimeClass(8) - vsftpd에 사용할 수 있는 명령줄 옵션에 대해 설명합니다.
- 구성 파일
{blank}
-
vsftpd.conf
(5) - SMCP의 구성 파일 내에서 사용할 수 있는 자세한 옵션 목록이 포함되어 있습니다. -
hosts_access(5) -
TCP
래퍼 구성 파일인hosts.allow
및hosts.deny
에서 사용할 수 있는 형식과 옵션에 대해 설명합니다.
-
- SELinux와의 상호 작용
{blank}
-
ftpd_selinux(8) -
ftpd
프로세스를 관리하는 SELinux 정책과 SELinux 레이블을 할당하는 방법에 대한 설명 및 부울 설정 방법에 대한 설명이 포함되어 있습니다.
-
ftpd_selinux(8) -
16.2.3.2. 온라인 문서
- General의 vsftpd 및 FTP 정보
{blank}
-
http://vsftpd.beasts.org/ -
vsftpd
프로젝트 페이지는 최신 문서를 찾고 소프트웨어 작성자에게 연락할 수 있는 좋은 위치입니다. -
http://slacksite.com/other/ftp.html - 이 웹 사이트는 활성 모드 FTP와 수동 모드
FTP
의 차이점에 대한 간결한 설명을 제공합니다.
-
http://vsftpd.beasts.org/ -
- Red Hat Enterprise Linux 문서
{blank}
-
Red Hat Enterprise Linux 7 네트워킹 가이드 - 이 시스템의 네트워크 인터페이스, 네트워크 및 네트워크 서비스의 구성 및 관리와 관련된 Red Hat Enterprise Linux 7의 네트워킹 가이드.
hostnamectl
유틸리티를 소개하고 이를 사용하여 로컬 및 원격으로 명령줄에서 호스트 이름을 보고 설정하는 방법을 설명합니다. -
Red Hat Enterprise Linux 7 SELinux 사용자 및 관리자 가이드 - Red Hat Enterprise Linux 7 의 SELinux 사용자 및 관리자 안내서는 SELinux 및 문서의 기본 원칙을 설명합니다. Apache HTTP Server, Postgres , PostgreSQL 또는 OpenShift 와 같은 다양한 서비스로 SELinux 를 구성하고 사용하는 방법에 대해 자세히 설명합니다.
systemd
에서 관리하는 시스템 서비스에 대한 SELinux 액세스 권한을 구성하는 방법에 대해 설명합니다. - Red Hat Enterprise Linux 7 보안 가이드 - Red Hat Enterprise Linux 7의 보안 가이드는 로컬 및 원격 침입, 악용 및 악의적인 활동을 위해 워크스테이션 및 서버를 보호하는 프로세스와 관행을 학습하는 데 도움이 됩니다. 또한 중요한 시스템 서비스를 보호하는 방법도 설명합니다.
-
Red Hat Enterprise Linux 7 네트워킹 가이드 - 이 시스템의 네트워크 인터페이스, 네트워크 및 네트워크 서비스의 구성 및 관리와 관련된 Red Hat Enterprise Linux 7의 네트워킹 가이드.
- 관련 RFC 문서
{blank}