私は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
しかし、私はそれらをどこに書くべきかわかりません。
Jamintoはその質問に答えるというすばらしい仕事をしましたが、私は最近自分自身でこのプロセスを経験し、Jamintoの答えをさらに拡大したいと思いました。
EC2インスタンスがすでに作成されており、それにElastic IPアドレスが関連付けられていると仮定します。
EC2サーバーにSSHで接続します。タイプ:
> Sudo yum install vsftpd
これでvsftpdがインストールされます。
次に、EC2サーバーのFTPポートを開く必要があります。 AWS EC2管理コンソールにログインし、左側のナビゲーションツリーから[Security Groups]を選択します。 EC2インスタンスに割り当てられているセキュリティグループを選択します。次に[受信]タブを選択し、[編集]をクリックします。
ポート範囲20〜21および1024〜1048のカスタムTCPルールを2つ追加します。 Sourceには 'Anywhere'を選択できます。 Sourceを自分のIPアドレスに設定する場合は、DHCPを介してIPアドレスが割り当てられていると、自分のIPアドレスが変わる可能性があることに注意してください。
次のように入力して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アドレスに置き換えてください。
変更を保存するには、エスケープキーを押してから:wq
と入力し、Enterキーを押します。
次のように入力してvsftpdを再起動します。
> Sudo /etc/init.d/vsftpd restart
次のようなメッセージが表示されるはずです。
これでうまくいかない場合は、次のことを試してください。
> Sudo /sbin/service vsftpd restart
/ 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
これは次のようになります。
この時点で、あなたのFTPユーザは彼らのホームディレクトリに制限されていません。それはそれほど安全ではありませんが、我々はそれをかなり簡単に修正することができます。
次のように入力して、vsftpd設定ファイルをもう一度編集します。
> Sudo vi /etc/vsftpd/vsftpd.conf
行のコメントを外します:
chroot_local_user=YES
完了したら、このようになります。
Vsftpdサーバーを再起動します。
> Sudo /etc/init.d/vsftpd restart
全部できた!
サーバーが起動してもvsftpdは自動的には起動しません。あなたが私のようであれば、それはあなたのEC2インスタンスを再起動した後に、FTPが壊れているように見えるときに恐怖の瞬間を感じることを意味します - しかし実際には、それはただ実行されていません!これを修正する便利な方法は次のとおりです。
> Sudo chkconfig --level 345 vsftpd on
あるいは、redhatを使用している場合、サービスを管理するもう1つの方法は、この気の利いたグラフィックユーザーインターフェースを使用して、どのサービスを自動的に開始するかを制御することです。
> Sudo ntsysv
サーバーが起動するとvsftpdが自動的に起動するようになりました。
*注:Iman Sedighiは、特定のディレクトリへのユーザーアクセスを制限するためのより洗練されたソリューションを投稿しました。答えとして投稿された彼の優れた解決策を参照してください。*
ユーザーを作成して、そのFTPアクセスを/ var/wwwなどの特定のフォルダーに制限することができます。これを行うには、ユーザーのデフォルトのホームディレクトリを変更する必要があります。
> Sudo usermod -d /var/www/ username
この具体的な例では、多くの場合/ var/wwwフォルダに関連付けられている「www」グループにユーザー権限を付与します。
> Sudo usermod -a -G www username
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での接続を許可するように、サーバーに割り当てられているセキュリティグループを構成する必要があります。
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
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 {} \;
Ufwが有効になっている場合は、忘れずにftpを追加してください。
> Sudo ufw allow ftp
Ufwが有効になったことに気付くまでに2日かかりました。
次のコマンドでユーザをグループwwwに追加するまでは問題ありません。
Sudo usermod -a -G www <USER>
これは許可の問題を解決します。
これを追加してデフォルトパスを設定します。
local_root=/var/www/html
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再起動
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
私は最後まで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プラグインは正常にインストールされました。
あなたが正しくない530パスワードを取得している場合
もう1ステップ必要
/ etc/shellsファイル内
次の行を追加
/ bin/false
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が更新後に動作を停止しました