Vsftpdは、Very Secure FTP Daemonの頭文字です。これは、Linuxおよびその他のUnixライクなオペレーティングシステムで最も使用されているftpサーバーの1つです。これはオープンソースであり、GPLライセンスの下でリリースされており、データ暗号化用の仮想ユーザーとSSLをサポートしています。
このチュートリアルでは、Linuxにインストールして構成する方法を説明します。
このチュートリアルでは、学習します :
- Debian10にvsftpdをインストールする方法
- vsftpdを構成する方法
- 匿名使用を設定する方法
- ローカルユーザーとのログインを設定する方法
- 仮想ユーザーを設定する方法
- 着信トラフィックを許可するようにufwを設定する方法
Debianでvsftpdをセットアップする方法
使用されるソフトウェア要件と規則
カテゴリ | 使用する要件、規則、またはソフトウェアバージョン |
---|---|
Debian 10(バスター) | |
vsftpd、openssl、libpam-pwdfile | |
vsftpdをインストールおよび構成するためのルート権限 | |
#–指定されたlinux-commandを、rootユーザーとして直接、またはsudo を使用してroot権限で実行する必要があります。 command $ –指定されたlinux-commandsを通常の非特権ユーザーとして実行する必要があります |
インストール
Vsftpdは公式のDebianリポジトリで利用できるため、インストールするには、お気に入りのパッケージマネージャーを使用できます。リポジトリを同期してパッケージをインストールするだけです。両方のことは、
次のコマンドを実行することで実行できます。
$ sudo apt-get update && sudo apt-get install vsftpd
数秒で、パッケージがDebianシステムにインストールされます。パッケージに含まれているインストールスクリプトは、 vsftpdの起動にも注意を払います。 サービスは自動的に行われますが、構成ファイルを変更するたびにサービスを再起動またはリロードすることを忘れないでください。 仮想ユーザーを使用できるようにするため vsftpdによって提供される機能は、別のパッケージもインストールする必要があります:
$ sudo apt-get install libpam-pwdfile
このチュートリアルの専用セクションでその使用法を確認します。
必要なパッケージがインストールされたら、さらに進んでvsftpdを構成できます。このチュートリアルの次のセクションでその方法を説明します。
Vsftpdのセットアップ
vsftpd構成ファイルは/etc/vsftpd.conf
です。 。それを開くと、すでにそこに含まれているさまざまなディレクティブを見ることができます。最も一般的なケースに最も関連するものを見てみましょう。
匿名ログインを有効にする
匿名ユーザーとしてのサーバーへの認証されていないアクセスは、デフォルトで無効になっています。有効にするには、anonymous_enable
を使用する必要があります ディレクティブ。構成ファイルの25
行に配置されます。 。 YES
に設定するだけです :
命令を次のように変更する必要があります:
anonymous_enable=YES
変更したいもう1つのディレクティブは、vsftpdが匿名アクセス後にナビゲートしようとするディレクトリを設定できるようにするディレクティブです。この設定を制御できるようにするディレクティブはanon_root
です。 。匿名ユーザーに/srv/ftp
へのアクセスを許可するとします。 デフォルトでは、ディレクトリは次のように記述されます。
anon_root=/srv/ftp
すべての匿名ログインは、設計されたユーザーに内部的にマップされます。デフォルトでは、ftp
です。 。このマッピングを変更するには、ftp_username
を使用する必要があります オプションを選択し、匿名ユーザーをマップするユーザーの名前に設定します。
デフォルトでは、明らかなセキュリティ上の理由から、匿名ユーザーはサーバーに何も書き込むことができません。この動作を変更したい場合(非推奨)、変更する必要のあるオプションがいくつかあります。まず、一般的なwrite_enable
ディレクティブはYES
に設定する必要があります 。このディレクティブは31
行にコメントされています 構成ファイルのので、あなたがしなければならないのはコメントを削除することだけです。
# Uncomment this to enable any form of FTP write command. write_enable=YES
このディレクティブを有効にしたら、次の2つのオプションで作業するだけです。anon_upload_enable
およびanon_mkdir_write_enable
。前者がYES
に設定されている場合 匿名ユーザーはアップロードできるようになります ファイル。ただし、マップ先のユーザー(前述のように、デフォルトではftp)が宛先ディレクトリへの書き込み権限を持っている場合に限ります。このオプションを有効にするには、40
の行からコメントを削除するだけです。 構成ファイルの:
# Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. anon_upload_enable=YES
anon_mkdir_write_enable
代わりに、YES
に設定されている場合はディレクティブ 上記と同じ条件で、匿名ユーザーがサーバー上に新しいディレクトリを作成できるようにします(サーバー上の基になるユーザーは、親ディレクトリに対する書き込み権限を持っている必要があります)。ディレクティブは44
行にあります 構成ファイルの:
# Uncomment this if you want the anonymous FTP user to be able to create # new directories. anon_mkdir_write_enable=YES
繰り返しになりますが、変数はすでにYES
に設定されているためです 、関連性を持たせるために必要なのは、コメントを削除することだけです。
匿名ユーザーが他の種類の書き込み操作も実行できるようにするため。たとえば、名前の変更 または削除 ディレクトリの場合、構成ファイルに存在しない別のディレクティブanon_other_write_enable
を使用する必要があります YES
に設定します 上記の動作が目的の動作である場合:
anon_other_write_enable=YES
認証されたログイン
ローカルシステムユーザーがシステムパスワードでftpサーバーにアクセスできるようにするには、local_enable
ディレクティブはYES
に設定する必要があります :これはDebianシステムのデフォルトです。ディレクティブは28
行にあります。 デーモンの
構成ファイル:
# Uncomment this to allow local users to log in. local_enable=YES
デフォルトでは、ローカルユーザーが正常に認証されると、rootとして独自のホームディレクトリが作成されます。ただし、local_root
を使用して、別の開始点を指定することは可能です。 指令。このディレクティブは構成ファイルに存在しないため、使用する場合は追加する必要があります。 /srv/ftp
を設定するには たとえば、ローカルルートとしてのディレクトリは次のように記述します。
local_root=/srv/ftp
Chrootローカルユーザー
セキュリティ対策として、 chrootすることが可能です。 独自のホームディレクトリ内の各認証済みユーザー。このタスクを実行するには、chroot_local_user
を使用する必要があります ディレクティブ:
chroot_local_user=YES
この機能を有効にすると、次のディレクティブを使用して、除外のリスト(chrootしてはならないユーザーのリスト)を指定できます。
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
最初のディレクティブは機能をアクティブ化するために必要であり、もう1つは除外リストを含むファイルの場所を指定するために必要です。 。ファイルがまだ存在しない場合は作成する必要があります。作成しないと、ログインに失敗します。
セキュリティ対策として、ユーザーがchrootされた場合、chrootの最上位ディレクトリに書き込めないようにする必要があります。その場合、vsftpdの最新バージョンでは、ユーザーはログインできず、サーバーは次のメッセージで応答します。
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
この問題は、基本的に2つの方法で解決できます。この最初のものは明らかに権限の修正で構成されています 、chrootのトップレベルディレクトリへの書き込みアクセスをユーザーに拒否し、サブディレクトリにのみ書き込みを許可します。
セキュリティへの影響を気にしない場合、問題を解決する2番目の方法は次のとおりです。 この制限をバイパスする 、次のディレクティブを使用します:
allow_writeable_chroot=YES
権限について言えば、ローカルユーザーのデフォルトのumaskが077
に設定されていることに注意することが重要です。 。この設定が制限的すぎると考えられる場合は、local_umask
を使用して設定を変更できます。 指令。このディレクティブは、35
行でコメント化されています。 構成ファイルの:
# Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) #local_umask=022を期待している場合は、これを022に変更することをお勧めします。
仮想ユーザーでログイン
vsftpdが提供する優れた機能の1つは、仮想ユーザーを使用してログインできることです。 。仮想ユーザーとは、システム上には実際には存在しないが、sftpdアプリケーションのコンテキスト内にのみ存在するユーザーです。この機能を有効にするには、次のディレクティブを使用する必要があります。
guest_enable=YES
この機能がアクティブな場合、すべての非匿名ログイン(実際の/ローカルユーザーも含む)は、guest_username
で指定されたユーザーにマップされます。 ディレクティブ。デフォルトでは、すでに見たように ftp 。
次のステップは、仮想ユーザーのユーザー名とパスワードを含むファイルを作成することです。ハッシュ化されたパスワードを生成するには、openssl
を使用できます 次のコマンドを発行します:
$ openssl passwd -1 Password: Verifying - Password: $1$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.
passwd opensslのコマンド ハッシュ化されたパスワード(md5)を生成するために使用されます。上記の例では、ハッシュするパスワードとその確認を求められました。最後に、ハッシュされたパスワードが生成され、画面に表示されます。
ユーザー名とパスワードをファイルに入れる必要があります。たとえば、/etc/virtual_users.pwd
、次の形式で:
username:hashed_password
したがって、仮想ユーザーが「linuxconfig」と呼ばれるとすると、次のように記述します。
linuxconfig:$1$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.
構成する仮想ユーザーごとに操作を繰り返す必要があります。
次に、 pamを作成する必要があります 仮想ユーザーを認証するためにvsftpdによって使用されるサービス。ファイルにvsftpd_virtual
という名前を付けます /etc/pam.d
に配置します ディレクトリ。その内容は次のとおりです。
#%PAM-1.0 auth required pam_pwdfile.so pwdfile /etc/vsftpd/virtual_users.pwd account required pam_permit.so
ご覧のとおり、最初の行に仮想ユーザーのユーザー名とパスワードを含むファイルのパスを指定しました。今、私たちがする必要があるのは、このpam「サービス」を使用するようにvsftpdに指示することです。 pam_service_name
でそれを行うことができます ディレクティブ:
pam_service_name=vsftpd_virtual
この時点で、構成ファイルを保存し、デーモンを再起動して、作成した仮想ユーザーでログインできることを確認できます。
データ暗号化のSSLサポートを有効にする
デフォルトでは、vsftpdではSSLサポートが無効になっているため、転送されるデータは暗号化されません。 SSLサポートを有効にするには、149
行にある次のディレクティブを使用する必要があります。 151
へ 構成ファイルの:
# This option specifies the location of the RSA certificate to use for SSL # encrypted connections. rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=YES
最初のディレクティブ、rsa_cert_file
SSL暗号化接続に使用するRSA証明書のパスを示すために使用されます。 2つ目は、rsa_private_key
代わりに、RSA秘密鍵の場所を指定するために使用されます。最後に、ssl_enable
ディレクティブは、SSL暗号化の使用を有効にするために使用されます。
この例では、/etc/ssl/certs/ssl-cert-snakeoil.pem
を使用しています。 および/etc/ssl/private/ssl-cert-snakeoil.key
ファイルですが、ほぼ確実に専用のファイルを使用する必要があります。
パッシブモードのポート範囲の指定
FTPパッシブモードはvsftpdの新規インストールのデフォルトですが、明示的に有効にする場合は、次のディレクティブを使用できます。
# Set to NO if you want to disallow the PASV method of obtaining a data connection # (passive mode). Default: YES pasv_enable=YES
サーバーがパッシブモードで動作している場合 、接続のためにリッスンする必要があるIPアドレスとポートをクライアントに送信します。このポートはデフォルトでランダムに選択されますが、サーバーでファイアウォールを使用する必要があるため、トラフィックを完全に許可するポートを知っている必要があります。使用するポートの範囲は、pasv_min_port
で指定できます。 およびpasv_max_port
ディレクティブ、例:
# The minimum port to allocate for PASV style data connections. Can be used to # specify a narrow port range to assist firewalling. pasv_min_port=10090 # The maximum port to allocate for PASV style data connections. Can be used to # specify a narrow port range to assist firewalling. Default: 0 (use any port) pasv_max_port=10100
次の構成では、サーバーは10090
からのポートの範囲を使用します 10100
へ 。
ファイアウォールの設定
vsftpdサーバーが正しく機能するには、必要なポートを通過するトラフィックを許可する必要があります。ファイアウォールに適切なルールを設定する必要がある場合もあります。このチュートリアルでは、 ufwの使用を想定しています。 ファイアウォールマネージャー(複雑でないファイアウォール)。
トラフィックを許可する最初のポートは、ポート21
です。 、FTPプロトコルで使用される標準ポートです:
$ sudo ufw allow in 21/tcp
次に、前のセクションで設定した指定のポート範囲を介した着信トラフィックを許可する必要があります。実行できるポートの範囲を指定するには:
$ sudo ufw allow in 10090:10100/tcp
結論
この記事では、Debian10Busterにvsftpdをインストールして設定する方法を見ました。匿名の使用法とローカルユーザーの使用法を設定する方法と、仮想ユーザーを活用する方法を見てきました。 サービスによって提供される機能。 FTPはデータ暗号化を提供しないため、SSLサポートを有効にする方法、そして最後に、必要なポートを通過する着信トラフィックを許可するようにファイアウォールを設定する方法を確認しました。 vsftpd構成ファイルで使用できる可能なディレクティブの完全なリストについては、 vsftpd.confを参照してください。 マンページ(VSFTPD.CONF(5))。 FTPサーバーをプログラムで操作する方法を知りたいですか? Pythonを使用してFTPサーバーに接続する方法に関する記事をご覧ください。