Amazon Cloud Server에서 FTP 설정 [닫기]


257

Amazon Cloud Server에서 FTP를 설정하려고하지만 운이 없습니다. 나는 그물을 검색하고 그것을 수행하는 구체적인 단계가 없습니다.

실행할 명령을 찾았습니다.

$ yum install vsftpd
$ ec2-authorize default -p 20-21
$ ec2-authorize default -p 1024-1048
$ vi /etc/vsftpd/vsftpd.conf
#<em>---Add following lines at the end of file---</em>
    pasv_enable=YES
    pasv_min_port=1024
    pasv_max_port=1048
    pasv_address=<Public IP of your instance>
$ /etc/init.d/vsftpd restart

그러나 나는 그들을 어디에 쓸지 모른다.


10
이 질문은 serverfault.com으로 마이그레이션해야합니다.
Jérôme Verstrynge

답변:


570

Jaminto는이 질문에 대답하는 데 큰 도움이되었지만 최근에이 과정을 직접 진행하여 Jaminto의 답변을 넓히고 싶었습니다.

EC2 인스턴스가 이미 생성되어 있고 탄력적 IP 주소가 연결되어 있다고 가정합니다.


1 단계 : vsftpd 설치

EC2 서버에 대한 SSH. 유형:

> sudo yum install vsftpd

vsftpd를 설치해야합니다.

2 단계 : EC2 인스턴스에서 FTP 포트를 엽니 다

다음으로 EC2 서버에서 FTP 포트를 열어야합니다. AWS EC2 관리 콘솔에 로그인하고 왼쪽의 탐색 트리에서 보안 그룹을 선택하십시오. EC2 인스턴스에 할당 된 보안 그룹을 선택하십시오. 그런 다음 인바운드 탭을 선택한 다음 편집을 클릭하십시오.

여기에 이미지 설명을 입력하십시오

포트 범위가 20-21 및 1024-1048 인 두 개의 사용자 지정 TCP 규칙을 추가하십시오. 소스의 경우 'Anywhere'를 선택할 수 있습니다. 소스를 고유 한 IP 주소로 설정하기로 결정한 경우 DHCP를 통해 할당 된 경우 IP 주소가 변경 될 수 있습니다.

여기에 이미지 설명을 입력하십시오



3 단계 : vsftpd.conf 파일을 업데이트합니다

다음을 입력하여 vsftpd conf 파일을 편집하십시오.

> sudo vi /etc/vsftpd/vsftpd.conf

이 줄을 변경하여 익명 FTP를 비활성화하십시오.

anonymous_enable=YES

anonymous_enable=NO

그런 다음 vsftpd.conf 파일의 맨 아래에 다음 줄을 추가하십시오.

pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=<Public IP of your instance> 

vsftpd.conf 파일은 다음과 같아야합니다. pasv_address를 공개 IP 주소로 바꿔야합니다.

여기에 이미지 설명을 입력하십시오

변경 사항을 저장하려면 escape를 누른 다음을 입력하고 Enter 키를 누르십시오 :wq.



4 단계 : vsftpd 재시작

다음을 입력하여 vsftpd를 다시 시작하십시오.

> sudo /etc/init.d/vsftpd restart

다음과 같은 메시지가 나타납니다.

여기에 이미지 설명을 입력하십시오


그래도 문제가 해결되지 않으면 다음을 시도하십시오.

> sudo /sbin/service vsftpd restart



5 단계 : FTP 사용자 생성

/ etc / vsftpd / user_list를 살펴보면 다음을 볼 수 있습니다.

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

기본적으로 "이러한 사용자는 FTP 액세스를 허용하지 마십시오." vsftpd는이 목록에없는 모든 사용자에게 FTP 액세스를 허용합니다.

따라서 새 FTP 계정을 만들려면 서버에서 새 사용자를 만들어야합니다. 또는 / etc / vsftpd / user_list에없는 사용자 계정이 이미있는 경우 다음 단계로 건너 뛸 수 있습니다.

EC2 인스턴스에서 새 사용자를 만드는 것은 매우 간단합니다. 예를 들어, 사용자 'bret'을 작성하려면 다음을 입력하십시오.

> sudo adduser bret
> sudo passwd bret

그 모습은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오



6 단계 : 사용자를 홈 디렉토리로 제한

이 시점에서 FTP 사용자는 홈 디렉토리로 제한되지 않습니다. 그다지 안전하지는 않지만 쉽게 해결할 수 있습니다.

다음을 입력하여 vsftpd conf 파일을 다시 편집하십시오.

> sudo vi /etc/vsftpd/vsftpd.conf

주석 처리를 제거하십시오.

chroot_local_user=YES

완료되면 다음과 같이 표시됩니다.

여기에 이미지 설명을 입력하십시오

다음과 같이 vsftpd 서버를 다시 시작하십시오.

> sudo /etc/init.d/vsftpd restart

다 했어요!


부록 A : 재부팅 생존

서버가 부팅 될 때 vsftpd가 자동으로 시작되지 않습니다. 나와 같다면 EC2 인스턴스를 재부팅 한 후 FTP가 고장난 것처럼 보이는 순간을 두려워하게되지만 실제로는 작동하지 않습니다!. 이를 해결하는 편리한 방법은 다음과 같습니다.

> sudo chkconfig --level 345 vsftpd on

또는 redhat을 사용하는 경우 서비스를 관리하는 또 다른 방법은이 멋진 그래픽 사용자 인터페이스를 사용하여 자동으로 시작할 서비스를 제어하는 ​​것입니다.

>  sudo ntsysv

여기에 이미지 설명을 입력하십시오

이제 서버가 부팅 될 때 vsftpd가 자동으로 시작됩니다.


부록 B : 사용자의 FTP 홈 디렉토리 변경

* 참고 : Iman Sedighi는 특정 디렉토리에 대한 사용자 액세스를 제한하기위한보다 세련된 솔루션을 게시했습니다. 답변으로 게시 된 그의 훌륭한 솔루션을 참조하십시오 *

사용자를 만들고 FTP 액세스를 / var / www와 같은 특정 폴더로 제한 할 수 있습니다. 이렇게하려면 사용자의 기본 홈 디렉토리를 변경해야합니다.

> sudo usermod -d /var/www/ username

이 특정 예에서는 일반적으로 / var / www 폴더와 관련된 'www'그룹에 사용자 권한을 부여하는 것이 일반적입니다.

> sudo usermod -a -G www username

3
에서 step 3어떻게 저장할 수, 파일의 행을 추가 한 후?
Sumit Bijvani

2
좋아, 이제 FTP에 어떻게 연결할 수 있습니까?
Sumit Bijvani

7
안녕 서밋 Vi는 까다로운 편집자입니다. 작업을 저장하려면 escape를 입력하고 ": wq"(따옴표없이)를 입력 한 다음 Enter 키를 누르십시오. FTP의 경우 FTP 클라이언트를 기반으로하기 때문에 대답하기가 어렵습니다. 시간이 있으면 인기있는 FTP 클라이언트를 설정하는 방법에 대한 지침을 추가하려고합니다. 개인적으로 저는 Aptana Studio를 사용합니다. Aptana에서는 SFTP 사이트를 만들고 EC2 인스턴스를 만들 때 얻은 공개 키 인증 파일을 Aptana에 제공합니다. filezilla를 사용하는 경우 pageant.exe를 사용해보십시오. 건배!
clone45

6
이것은 우수하다. 매우 명확한. 대단히 감사합니다.
AC Patrice

11
실제로 그는 아마 나에게 신용을 줄 수 있습니다. 그는 1 월 13 일에 내 대답을
철회했다.

27

EC2 서버에서 수동 ftp를 활성화하려면 ftp 서버가 인바운드 연결에 사용해야하는 포트를 구성한 다음 ftp 클라이언트 데이터 연결에 사용 가능한 포트 목록을 열어야합니다.

나는 리눅스에 익숙하지 않지만 게시 한 명령은 ftp 서버를 설치하고 ec2 방화벽 규칙을 구성하고 (AWS API를 통해) ec2 방화벽에 허용 된 포트를 사용하도록 ftp 서버를 구성하는 단계입니다 .

이 단계에서는 FTP 클라이언트 (VSFTP)를 설치합니다.

> yum install vsftpd

이 단계는 ftp 클라이언트를 구성합니다

> vi /etc/vsftpd/vsftpd.conf
--    Add following lines at the end of file --
     pasv_enable=YES
     pasv_min_port=1024
     pasv_max_port=1048
     pasv_address=<Public IP of your instance> 
> /etc/init.d/vsftpd restart

다른 두 단계는 EC2 보안 그룹의 Amazon Console을 통해보다 쉽게 ​​수행 할 수 있습니다. 포트 20, 21 및 1024-1048의 연결을 허용하도록 서버에 지정된 보안 그룹을 구성해야합니다.


나는 그 줄의 의미를 알고 있지만 어디에 입력해야할지 모르겠습니다 ... 문제입니다 ...
SharkTheDark

1
ftp 서버를 설치하려는 서버의 명령 줄에서?
jaminto

2
SSH를 통해 서버에 연결하십시오 : blog.taggesell.de/index.php?/archives/…
jaminto

여전히 오류가 발생하는 경우 (500 OOPS : vsftpd : chroot () 내에서 쓰기 가능한 루트로 실행 거부)이 문제가 해결되었습니다. benscobie.com/…
kaore

익명 FTP가 기본적으로 켜져 있다는 것에 놀랐습니다!
jeffkee

16

좋은 해결책을 주신 @ clone45에게 감사드립니다. 그러나 나는 그의 해결책의 부록 b와 관련하여 중요한 문제가 하나 있었다. 홈 디렉토리를 var / www / html로 변경 한 직후 ssh와 sftp를 통해 서버에 연결할 수 없었습니다. 항상 다음과 같은 오류가 표시됩니다.

permission denied (public key)

또는 FileZilla 에서이 오류가 발생했습니다.

No supported authentication methods available (server: public key)

그러나 정상적인 FTP 연결을 통해 서버에 액세스 할 수 있습니다.

동일한 오류가 발생하면 사용자의 기본 홈 디렉토리를 설정하여 @ clone45 솔루션의 부록 b를 실행 취소하십시오.

sudo usermod -d /home/username/ username

그러나 사용자의 기본 홈 디렉토리를 설정하면 사용자는 / var / www / http 외부의 다른 많은 폴더에 액세스 할 수 있습니다. 따라서 서버를 보호하려면 다음 단계를 수행하십시오.

1- sftponly 그룹 만들기 ftp로만 액세스를 제한하려는 모든 사용자와 var / www / html에 대한 sftp 액세스로 그룹을 만듭니다. 그룹을 만들려면 :

sudo groupadd sftponly

2- chroot 탈옥 sftp를 통해이 그룹의 서버에 대한 액세스를 제한하려면 그룹 사용자가 홈 디렉토리 내의 html 폴더를 제외한 모든 폴더에 액세스 할 수 없도록 chroot를 탈옥해야합니다. 이 작업을 수행하려면 sudo를 사용하여 vim에서 /etc/ssh/sshd.config를여십시오. 파일 끝에서 다음 줄을 주석으로 처리하십시오.

Subsystem sftp /usr/libexec/openssh/sftp-server

그런 다음 아래에이 줄을 추가하십시오.

Subsystem sftp internal-sftp

그래서 우리는 서브 시스템을 internal-sftp로 교체했습니다. 그런 다음 아래에 다음 줄을 추가하십시오.

 Match Group sftponly
        ChrootDirectory /var/www
        ForceCommand internal-sftp
        AllowTcpForwarding no

이 줄을 추가 한 후 변경 사항을 저장 한 후 ssh 서비스를 다시 시작하십시오.

sudo service sshd restart

3- sftponly 그룹에 사용자 추가 액세스를 제한하려는 모든 사용자는 sftponly 그룹의 구성원이어야합니다. 따라서 다음과 같이 sftponly에 가입합니다. sudo usermod -G sftponly username

4- var / www / html에 대한 사용자 액세스 제한 var / www / html 폴더에 대한 사용자 액세스를 제한하려면 해당 사용자의 홈 디렉토리 ( 'html'이름)에 디렉토리를 만든 다음 / var을 마운트해야합니다. / www를 / home / username / html에 다음과 같이 입력하십시오.

sudo mkdir /home/username/html
sudo mount --bind /var/www /home/username/html

5- 쓰기 액세스 설정 사용자에게 / var / www / html에 대한 쓰기 액세스 권한이 필요한 경우 / var / www에서 루트 : 루트 소유권 및 755 권한을 가진 사용자를 감옥에 가두어 야합니다. 그런 다음 / var /를 제공해야합니다. 다음 줄을 추가하여 www : html root : sftponly의 소유권 및 775의 권한

sudo chmod 755 /var/www
sudo chown root:root /var/www
sudo chmod 775 /var/www/html
sudo chown root:www /var/www/html

쉘 액세스 차단 쉘에 대한 액세스를 제한하여 액세스를보다 안전하게하려면 다음과 같이 기본 쉘을 bin / false로 변경하십시오.

sudo usermod -s /bin/false username

귀하의 sudo mount --bind /var/www /home/username/htmlwww 폴더가 없다고 들었습니다. 나는 이것이 루트 (/ home 폴더가있는 곳)에서 이루어 졌다고 가정합니까?
elliotrock 2018 년

1
sudo chown root:www /var/www/html상태는 chown하지 : 유효하지 않은 그룹 '루트 : www가'
elliotrock

2
6 sudo usermod -s /sbin/nologin username장은 vsftpd의 pam 모듈의 기본 쉘 제한 때문에 더 좋을 것입니다 (제 경우에는 더 잘 작동하는 것 같습니다). 그리고 mount재부팅 할 때마다 파트 4 를 수행해야하므로 rc.local에 배치하는 것이 좋습니다.
phy25

11

Great Article ...은 Amazon Linux AMI에서 산들 바람처럼 작동했습니다.

두 가지 더 유용한 명령 :

기본 FTP 업로드 폴더를 변경하려면

1 단계:

edit /etc/vsftpd/vsftpd.conf

2 단계 : 페이지 하단에 새 항목을 만듭니다.

local_root=/var/www/html

FTP 장치를 사용하여 관리 할 수 ​​있도록 폴더 아래의 파일에 대한 읽기, 쓰기, 삭제 권한을 적용하려면

find /var/www/html -type d -exec chmod 777 {} \;

11
모든 파일과 폴더를 777로 chmod합니다. 777은 웹 사이트에 안전하지 않습니다
sergiogx

확인. 그래서 이것에 대해 어떤 변화를 제안합니까?
Ravi Shanker

3
필요한 권한을 할당해야합니다. 모든 권한을 모두 열어 두거나 문제를 요구하는 것은 아닙니다. 예를 들어 chmod -R ug + rw / var / www / html을 사용하면 불필요한 실행 권한 및 다른 권한을 부여하지 않고 모든 파일에 사용자 및 그룹에 대한 읽기 및 쓰기 권한을 부여합니다. 그런 다음 다른 사용자를 수정할 필요가 없도록 사용자와 그룹을 적절하게 설정하십시오. ftp 사용자가 모든 파일을 읽고 쓸 수 있고 웹 서버가 설정 한 것을 읽을 수있는 경우입니다. 두 사용자를 모두 같은 그룹에 넣고 rw를 사용자에 추가하고 r을 그룹에 추가하십시오.
AaronM

/ var / www / html에 775를 적용해야합니다. 나머지 하위 폴더 및 파일은 필요에 따라 권한을 얻을 수 있습니다. 777은 매우 안전하지 않습니다.
Iman Sedighi

6

ufw를 활성화 한 경우 ftp를 추가하십시오.

> sudo ufw allow ftp

ufw를 사용하도록 설정하는 데 2 ​​일이 걸렸습니다.


또는 iptables, 또는 ... 그렇습니다 나는 항상 너무 잊어 버립니다!
jsh

6

다음 명령으로 사용자를 www 그룹에 추가 할 때까지 확인되지 않습니다.

sudo usermod -a -G www <USER>

이것은 권한 문제를 해결합니다.

다음을 추가하여 기본 경로를 설정하십시오.

local_root=/var/www/html

4

20-21 및 1024-1048 범위를 허용하는 방화벽이있는 경우 iptables 방화벽을 업데이트하는 것을 잊지 마십시오.

/ etc / sysconfig / iptables에서이를 수행하십시오.

다음과 같은 줄 추가하기 :

-A INPUT -m state --state NEW -m tcp -p tcp --dport 20:21 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1024 : 1048 -j ACCEPT

그리고 다음 명령으로 iptables를 다시 시작하십시오.

sudo 서비스 iptables 다시 시작


4

clone45 단계를 단순화했습니다.

그가 언급 한대로 포트를여십시오

sudo su
sudo yum install vsftpd
echo -n "Public IP of your instance: " && read publicip
echo -e "anonymous_enable=NO\npasv_enable=YES\npasv_min_port=1024\npasv_max_port=1048\npasv_address=$publicip\nchroot_local_user=YES" >> /etc/vsftpd/vsftpd.conf
sudo /etc/init.d/vsftpd restart

2

나는 clone45의 대답을 끝까지 따라 갔다. 좋은 기사! 워드 프레스 사이트 중 하나에 플러그인을 설치하려면 FTP 액세스가 필요했기 때문에 홈 디렉토리를 / var / www / mysitename으로 변경했습니다. 그런 다음 ftp 사용자를 다음과 같이 apache (또는 www) 그룹에 계속 추가했습니다.

sudo usermod -a -G apache myftpuser

이 후에도 WP의 플러그인 설치 페이지에서 "WordPress Content 디렉토리 (wp-content)를 찾을 수 없습니다"라는 오류가 계속 표시됩니다. wp.org Q & A 세션에서이 솔루션을 검색하고 발견했습니다 : https://wordpress.org/support/topic/unable-to-locate-wordpress-content-directory-wp-content 다음을 wp- 의 끝에 추가했습니다 config.php :

if(is_admin()) {
    add_filter('filesystem_method', create_function('$a', 'return "direct";' ));
    define( 'FS_CHMOD_DIR', 0751 );
}

이 후 내 WP 플러그인이 성공적으로 설치되었습니다.


0

clone45 의 답변 외에도 언급 할 가치가 있습니다 .

vsftpd에서 Chrooted FTP 사용자의 쓰기 권한 수정

Ubuntu 12.04 Precise와 함께 제공되는 vsftpd 버전은 기본적으로 chroot 된 로컬 사용자의 쓰기를 허용하지 않습니다. 기본적으로 이것을 /etc/vsftpd.conf에 있습니다 :

chroot_local_user=YES
write_enable=YES

로컬 사용자가 쓸 수있게하려면 다음 매개 변수를 추가해야합니다.

allow_writeable_chroot=YES

참고 : 쓰기 권한 문제는 다음 FileZilla 오류 로 표시 될 수 있습니다.

Error: GnuTLS error -15: An unexpected TLS packet was received.
Error: Could not connect to server

참조 :
vsftpd VSFTPd 에서 Chroot 된 FTP 사용자의 쓰기 권한 수정
업데이트 후 작동이 중지되었습니다.


0

530 비밀번호가 틀린 경우

1 단계 더 필요

/ etc / shells 파일에서

다음 줄을 추가하십시오

/ bin / false


-2

FileZila는 Amazon Cloud로 설정하기에 좋은 FTP 도구입니다.

  1. https://filezilla-project.org/ 에서 FileZila 클라이언트를 다운로드 하십시오.
  2. 파일-> 사이트 관리자->를 클릭하십시오.
  3. 새로운 사이트
  4. Amazon 클라우드 위치의 호스트 이름 IP 주소 제공 (있는 경우 포트)
  5. 프로토콜-SFTP (요구 사항에 따라 변경 될 수 있음)
  6. 로그인 유형-정상 (시스템은 매번 비밀번호를 요구하지 않습니다)
  7. 사용자 이름과 비밀번호를 제공하십시오.
  8. 잇다.

이 단계는 한 번만 수행하면 나중에 동일한 IP 주소 및 동일한 사이트에 컨텐츠를 업로드합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.