web-dev-qa-db-ja.com

Amazon Cloud ServerでFTPをセットアップする

私は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

しかし、私はそれらをどこに書くべきかわかりません。

249
SharkTheDark

Jamintoはその質問に答えるというすばらしい仕事をしましたが、私は最近自分自身でこのプロセスを経験し、Jamintoの答えをさらに拡大したいと思いました。

EC2インスタンスがすでに作成されており、それにElastic IPアドレスが関連付けられていると仮定します。


ステップ1:vsftpdをインストールする

EC2サーバーにSSHで接続します。タイプ:

> Sudo yum install vsftpd

これでvsftpdがインストールされます。

ステップ#2:EC2インスタンスのFTPポートを開く

次に、EC2サーバーのFTPポートを開く必要があります。 AWS EC2管理コンソールにログインし、左側のナビゲーションツリーから[Security Groups]を選択します。 EC2インスタンスに割り当てられているセキュリティグループを選択します。次に[受信]タブを選択し、[編集]をクリックします。

enter image description here

ポート範囲20〜21および1024〜1048のカスタムTCPルールを2つ追加します。 Sourceには 'Anywhere'を選択できます。 Sourceを自分のIPアドレスに設定する場合は、DHCPを介してIPアドレスが割り当てられていると、自分のIPアドレスが変わる可能性があることに注意してください。

enter image description here



ステップ3:vsftpd.confファイルを更新する

次のように入力してvsftpd設定ファイルを編集します。

> 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アドレスに置き換えてください。

enter image description here

変更を保存するには、エスケープキーを押してから:wqと入力し、Enterキーを押します。



ステップ4:vsftpdを再起動する

次のように入力してvsftpdを再起動します。

> Sudo /etc/init.d/vsftpd restart

次のようなメッセージが表示されるはずです。

enter image description here


これでうまくいかない場合は、次のことを試してください。

> 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

これは次のようになります。

enter image description here



ステップ#6:ユーザーを自分のホームディレクトリに制限する

この時点で、あなたのFTPユーザは彼らのホームディレクトリに制限されていません。それはそれほど安全ではありませんが、我々はそれをかなり簡単に修正することができます。

次のように入力して、vsftpd設定ファイルをもう一度編集します。

> Sudo vi /etc/vsftpd/vsftpd.conf

行のコメントを外します:

chroot_local_user=YES

完了したら、このようになります。

enter image description here

Vsftpdサーバーを再起動します。

> Sudo /etc/init.d/vsftpd restart

全部できた!


付録A:再起動を乗り切る

サーバーが起動してもvsftpdは自動的には起動しません。あなたが私のようであれば、それはあなたのEC2インスタンスを再起動した後に、FTPが壊れているように見えるときに恐怖の瞬間を感じることを意味します - しかし実際には、それはただ実行されていません!これを修正する便利な方法は次のとおりです。

> Sudo chkconfig --level 345 vsftpd on

あるいは、redhatを使用している場合、サービスを管理するもう1つの方法は、この気の利いたグラフィックユーザーインターフェースを使用して、どのサービスを自動的に開始するかを制御することです。

>  Sudo ntsysv

enter image description here

サーバーが起動するとvsftpdが自動的に起動するようになりました。


付録B:ユーザーのFTPホームディレクトリを変更する

*注:Iman Sedighiは、特定のディレクトリへのユーザーアクセスを制限するためのより洗練されたソリューションを投稿しました。答えとして投稿された彼の優れた解決策を参照してください。*

ユーザーを作成して、そのFTPアクセスを/ var/wwwなどの特定のフォルダーに制限することができます。これを行うには、ユーザーのデフォルトのホームディレクトリを変更する必要があります。

> Sudo usermod -d /var/www/ username

この具体的な例では、多くの場合/ var/wwwフォルダに関連付けられている「www」グループにユーザー権限を付与します。

> Sudo usermod -a -G www username
557
clone45

EC2サーバーでパッシブFTPを有効にするには、FTPサーバーがインバウンド接続に使用するポートを設定してから、FTPクライアントデータ接続に使用できるポートのリストを開く必要があります。

私はlinuxにはあまり馴染みがありませんが、あなたが投稿したコマンドはftpサーバーをインストールし、(AWS APIを通して)ec2ファイアウォールルールを設定し、そしてec2ファイアウォールで許可されたポートを使用する。

したがって、このステップでは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

しかし、他の2つのステップは、EC2セキュリティグループの下のAmazonコンソールを介してより簡単に行われます。そこで、ポート20、21、および1024-1048での接続を許可するように、サーバーに割り当てられているセキュリティグループを構成する必要があります。

26
jaminto

Niceソリューションをありがとう@ 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グループを作るvar/www/htmlへのアクセスをftpとsftpのみに制限したいすべてのユーザーのためにグループを作ります。グループを作る:

Sudo groupadd sftponly

2- chrootを投獄するこのグループへのアクセスをsftpでサーバに制限するには、グループのユーザが他のフォルダにアクセスできないようにchrootを投獄する必要がありますホームディレクトリ内のhtmlフォルダこれを行うには、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で投獄する必要があります。次の行を追加して、root:sftponlyの所有権および775の許可を/ var/www/htmlに付与する必要があります。

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

6-ブロックシェルアクセスより安全にするためにアクセスをシェルへのアクセスではなくに制限したい場合は、次のようにデフォルトのシェルをbin/falseに変更してください。 :

Sudo usermod -s /bin/false username
16
Iman Sedighi

Great Article ... Amazon Linux AMIでは非常に簡単です。

さらに2つの便利なコマンド

デフォルトのFTPアップロードフォルダを変更する

ステップ1:

edit /etc/vsftpd/vsftpd.conf

ステップ2:ページの下部に新しいエントリを作成します。

local_root=/var/www/html

FTPデバイスを使って管理できるように、フォルダの下のファイルに読み取り、書き込み、削除の許可を適用する

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

Ufwが有効になっている場合は、忘れずにftpを追加してください。

> Sudo ufw allow ftp

Ufwが有効になったことに気付くまでに2日かかりました。

6
chbong

次のコマンドでユーザをグループwwwに追加するまでは問題ありません。

Sudo usermod -a -G www <USER>

これは許可の問題を解決します。

これを追加してデフォルトパスを設定します。

local_root=/var/www/html
6
user1802434

20-21と1024-1048の範囲を許可するものがある場合は、iptablesファイアウォールを更新することを忘れないでください。

/ etc/sysconfig/iptablesからこれを行います。

このような行を追加する:

-A入力-m state - 状態NEW -m tcp -p tcp --dport 20:21 -j ACCEPT

-A入力-m状態 - 状態NEW -m tcp -p tcp --dport 1024:1048 -j ACCEPT

次のコマンドでiptablesを再起動します。

Sudoサービスのiptables再起動

4
Kevin Meek

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
4
Willem Bressers

私は最後までclone45の答えに従った。素晴らしい記事です。私のワードプレスサイトの1つにプラグインをインストールするにはFTPアクセスが必要だったので、ホームディレクトリを/ var/www/mysitenameに変更しました。それから私はこのように私のftpユーザーをApache(またはwww)グループに追加し続けました:

Sudo usermod -a -G Apache myftpuser

この後、私はまだWPのプラグインインストールページでこのエラーを見ました:「WordPressコンテンツディレクトリを見つけることができません(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プラグインは正常にインストールされました。

2
CodeBrew

あなたが正しくない530パスワードを取得している場合

もう1ステップ必要

/ etc/shellsファイル内

次の行を追加

/ bin/false

0
Varun Bhatia

clone45 の答えに加えて、言及する価値があるかもしれません。

Vsftpdでchrootされた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 でchrootされたFTPユーザーの書き込み権限を修正する
VSFTPdが更新後に動作を停止しました

0
Hartmut