FTP (ファイル転送プロトコル)は、従来の広く使用されている標準ツールです。 サーバーとクライアント間でファイルを転送する ネットワーク経由、特に認証が不要な場合(匿名ユーザーがサーバーに接続できるようにします)。 FTPは暗号化せずにユーザーの資格情報とデータを送信するため、デフォルトでは安全ではないことを理解する必要があります。
このガイドでは、FTPサーバーをインストール、構成、および保護する手順について説明します(VSFTPD を意味する "非常に安全なFTPデーモン") NS CentOS/RHEL 7 と Fedora 分布。
このガイドのすべてのコマンドは次のように実行されることに注意してください 根、サーバーを操作していない場合 根 アカウント、使用する sudoコマンド root権限を取得します。
1. インストール vsftpd サーバーは単純明快です。ターミナルで次のコマンドを実行するだけです。
#yum installvsftpd。
2. インストールが完了すると、最初はサービスが無効になるため、当面は手動で開始し、次回のシステム起動からも自動的に開始できるようにする必要があります。
#systemctl startvsftpd。 #systemctl enablevsftpd。
3. 次に、外部システムからFTPサービスへのアクセスを許可するには、ポートを開く必要があります 21、FTPデーモンが次のようにリッスンしている場合:
#firewall-cmd --zone = public --permanent --add-port = 21 / tcp。 #firewall-cmd --zone = public --permanent --add-service = ftp。 #firewall-cmd--reload。
4. 次に、FTPサーバーをセットアップして保護するためのいくつかの構成を実行します。まず、元の構成ファイルのバックアップを作成します。 /etc/vsftpd/vsftpd.conf:
#cp /etc/vsftpd/vsftpd.conf/etc/vsftpd/vsftpd.conf.orig。
次に、上記の構成ファイルを開き、これらの対応する値を使用して次のオプションを設定します。
anonymous_enable = NO#匿名ログインを無効にします。 local_enable = YES#ローカルログインを許可します。 write_enable = YES#ファイルシステムを変更するFTPコマンドを有効にします。 local_umask = 022#ローカルユーザーのファイル作成用のumaskの値。 dirmessage_enable = YES#ユーザーが最初に新しいディレクトリに入ったときのメッセージの表示を有効にします。 xferlog_enable = YES#アップロードとダウンロードの詳細を示すログファイルが維持されます。 connect_from_port_20 = YES#PORTスタイルの接続にはサーバーマシンのポート20(ftp-data)を使用します。 xferlog_std_format = YES#標準のログファイル形式を保持します。 listen = NO#vsftpdがスタンドアロンモードで実行されないようにします。 listen_ipv6 = YES#vsftpdは、IPv4ソケットではなくIPv6ソケットでリッスンします。 pam_service_name = vsftpd#vsftpdが使用するPAMサービスの名前。 userlist_enable = YES#vsftpdがユーザー名のリストをロードできるようにします。 tcp_wrappers = YES#tcpラッパーをオンにします。
5. 次に、ユーザーリストファイルに基づいてユーザーへのFTPアクセスを許可/拒否するようにFTPを構成します /etc/vsftpd.userlist
.
デフォルトでは、 userlist_file = / etc / vsftpd.userlist
でログインアクセスが拒否されます userlist_deny オプションをに設定 はい、 もしも userlist_enable = YES.
でも、 userlist_deny = NO 設定を変更します。つまり、に明示的にリストされているユーザーのみが userlist_file = / etc / vsftpd.userlist ログインが許可されます。
userlist_enable = YES#vsftpdは、userlist_fileで指定されたファイル名からユーザー名のリストをロードします。 userlist_file = / etc / vsftpd.userlist#ユーザー名を保存します。 userlist_deny = NO
それだけではありません。ユーザーがFTPサーバーにログインすると、chrootされたジェイルに配置されます。これは、FTPセッションのホームディレクトリとしてのみ機能するローカルルートディレクトリです。
次に、以下で説明するように、FTPユーザーをFTPユーザーのホームディレクトリ(ローカルルート)ディレクトリにchrootする方法の2つの可能なシナリオを見ていきます。
6. 次に、次の2つのオプションを追加して、FTPユーザーをホームディレクトリに制限します。
chroot_local_user = YES。 allow_writeable_chroot = YES。
chroot_local_user = YES これは、ローカルユーザーが、デフォルト設定でログインした後、ホームディレクトリであるchrootjailに配置されることを意味します。
また、デフォルトでは、vsftpdはセキュリティ上の理由からchroot jailディレクトリを書き込み可能にすることを許可していませんが、オプションを使用できます allow_writeable_chroot = YES この設定を上書きします。
ファイルを保存して閉じます。
7. それでは、 SELinux FTPがユーザーのホームディレクトリ内のファイルを読み取れるようにするには、以下のブール値を使用します。 これは、最初は次のコマンドを使用して行われたことに注意してください。
#setsebool -P ftp_home_diron。
しかし ftp_home_dir
このバグレポートで説明されているように、ディレクティブはデフォルトで無効になっています。 https://bugzilla.redhat.com/show_bug.cgi? id = 1097775.
今、私たちは使用します セマネージ FTPがユーザーのホームディレクトリの読み取り/書き込みを許可するようにSELinuxルールを設定するコマンド。
#semanage boolean -m ftpd_full_access--on。
この時点で、vsftpdを再起動して、これまでに行ったすべての変更を有効にする必要があります。
#systemctl restartvsftpd。
8. 次に、FTPユーザーを作成してFTPサーバーをテストします。 useraddコマンド.
#useradd -m -c“ Ravi Saive、CEO” -s / bin / bashravi。 #passwdravi。
その後、ユーザーを追加する必要があります ラヴィ ファイルに /etc/vsftpd.userlist を使用して エコーコマンド 次のように:
#echo "ravi" | tee -a / etc / vsftpd.userlist。 #cat / etc / vsftpd.userlist。
9. 次に、上記の設定が正しく機能しているかどうかをテストします。 匿名ログインのテストから始めましょう。下のスクリーンショットから、匿名ログインは許可されていないことがわかります。
#ftp 192.168.56.10 192.168.56.10(192.168.56.10)に接続しました。 220 TecMint.comFTPサービスへようこそ。 名前(192.168.56.10:root):匿名。 530許可が拒否されました。 ログインに失敗しました。 ftp>
10. ユーザーがファイルにリストされていないかどうかもテストしてみましょう /etc/vsftpd.userlist ログインの許可が付与されますが、以下のスクリーンショットの場合とは異なります。
#ftp 192.168.56.10 192.168.56.10(192.168.56.10)に接続しました。 220 TecMint.comFTPサービスへようこそ。 名前(192.168.56.10:root):aaronkilik。 530許可が拒否されました。 ログインに失敗しました。 ftp>
11. 次に、ファイルにリストされているユーザーかどうかの最終チェックを行います /etc/vsftpd.userlist、ログイン後、実際にはホームディレクトリに配置されます。
#ftp 192.168.56.10 192.168.56.10(192.168.56.10)に接続しました。 220 TecMint.comFTPサービスへようこそ。 名前(192.168.56.10:root):ravi。 331パスワードを指定してください。 パスワード: 230ログインに成功しました。 リモートシステムタイプはUNIXです。 バイナリモードを使用してファイルを転送します。 ftp> ls警告:使用
allow_writeable_chroot = YES
特にユーザーがアップロード権限またはシェルアクセスを持っている場合、特定のセキュリティ上の影響があります。自分が何をしているかを正確に理解している場合にのみ、このオプションをアクティブにしてください。 これらのセキュリティへの影響はvsftpd固有ではなく、ローカルユーザーをchroot刑務所に入れることを提案するすべてのFTPデーモンに適用されることに注意することが重要です。
したがって、次のセクションでは、書き込み不可能な別のローカルルートディレクトリを設定するためのより安全な方法を検討します。
12. vsftpd構成ファイルを再度開き、以下の安全でないオプションにコメントすることから始めます。
#allow_writeable_chroot = YES。
次に、ユーザーの代替ローカルルートディレクトリを作成します(ラヴィ
、あなたのものはおそらく異なります)そしてこのディレクトリへのすべてのユーザーへの書き込み権限を削除します:
#mkdir / home / ravi / ftp。 #chown nobody:nobody / home / ravi / ftp。 #chmod a-w / home / ravi / ftp。
13. 次に、ユーザーが自分のファイルを保存するローカルルートの下にディレクトリを作成します。
#mkdir / home / ravi / ftp / files。 #chown ravi:ravi / home / ravi / ftp / files。 #chmod 0700 / home / ravi / ftp / files /
次に、vsftpd構成ファイルで次のオプションを次の値で追加/変更します。
user_sub_token = $ USER#ローカルルートディレクトリにユーザー名を挿入しますlocal_root = / home / $ USER / ftp#ユーザーのローカルルートディレクトリを定義します。
ファイルを保存して閉じます。 もう一度、新しい設定でサービスを再起動しましょう。
#systemctl restartvsftpd。
14. ここでもう一度最終テストを実行し、ユーザーのローカルルートディレクトリが彼のホームディレクトリに作成したFTPディレクトリであることを確認します。
#ftp 192.168.56.10 192.168.56.10(192.168.56.10)に接続しました。 220 TecMint.comFTPサービスへようこそ。 名前(192.168.56.10:root):ravi。 331パスワードを指定してください。 パスワード: 230ログインに成功しました。 リモートシステムタイプはUNIXです。 バイナリモードを使用してファイルを転送します。 ftp> ls
それでおしまい! この記事では、CentOS 7でFTPサーバーをインストール、構成、および保護する方法について説明しました。 このガイドに関して私たちに返信する/これに関する有用な情報を共有するために、以下のコメントセクション トピック。
推奨読書:RHEL / CentOS7にProFTPDサーバーをインストールします
次の記事では、その方法も紹介します SSL / TLSを使用してFTPサーバーを保護する CentOS 7での接続は、それまではTecMintへの接続を維持します。