vsFTP 3.0.3 のコンパイルとインストールの詳細な分析

vsFTP 3.0.3 のコンパイルとインストールの詳細な分析

脆弱性の詳細

VSFTP は、GPL に基づいてリリースされた Unix ライクなシステムで使用される FTP サーバー ソフトウェアのセットです。このソフトウェアは、仮想ユーザー、2 つの認証方法 (PAP または xinetd/tcp_wrappers)、帯域幅制限などをサポートします。

プログラムが「deny_file」オプションを適切に処理しないため、VSFTP にセキュリティ上の脆弱性が存在します。リモートの攻撃者がこの脆弱性を悪用してアクセス制限を回避する可能性があります。

影響を受ける製品とバージョン: VSFTP 3.0.2 以前のバージョン、OpenSUSE 13.1 および 13.2 バージョン。

影響を受ける製品

VSFTPD VSFTPD 3.0.2

  • FTP にログインするには、一般的に次の 3 つの方法があります。
  • 匿名ユーザー モード: デフォルトのインストールでは、システムは匿名ユーザー アクセスのみを提供します。ログインするには、ユーザー anonymous/ftp を入力し、パスワードとしてメール アドレスを使用するだけです。
  • ローカル ユーザー モード: 認証方法として /etc/passwd 内のユーザー名が使用されます。
  • 仮想ユーザー モード: ユーザー名とパスワードをファイルまたはデータベースに保存し、ログインしたユーザーを指定されたシステム アカウント (/sbin/nologin) にマッピングしてリソースにアクセスできるようにします。これらの仮想ユーザーは FTP ユーザーです。
  • 実験環境: CentOS 7.5 192.168.2.3
  • Firewalld、iptables、SElinuxはすべて無効になっています
  • 次の実験では、PAM に基づく仮想ユーザーを使用します。まず、yum を使用して PAM コンポーネントをインストールする必要があります。
  • epelソースを使用する必要がある
  • yum -y インストール epel-release && yum -y インストール pam pam-devel db4-utils
  • デフォルト設定では、vsftpd は nobody ユーザーを使用する必要があります。
  • 公式サイト https://www.linuxfromscratch.org/blfs/view/svn/server/vsftpd.html からダウンロードしてください。
  • https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz をダウンロードしてください
  • tar xf vsftpd-3.0.3.tar.gz
  • vsftpd-3.0.3/をCDに追加します

  • vsftpdのソースパッケージにはconfigureファイルがないので、直接コンパイルしてインストールします。
  • クリーンにする && -j 4 にする && インストールする
  • コンパイル中にエラーが発生した場合
  • /usr/bin/ld: -lcap が見つかりません
  • .soファイルを見つける
  • 検索 / -name "*libcap.so*"
  • libcap.so.2.22 は、次のディレクトリにあります。
  • libcap.so.2 は、以下のいずれかの形式で保存されます。
  • ln -sv /usr/lib64/libcap.so.2 /usr/lib64/libcap.so

  • デフォルト設定:
  • デフォルト設定:
  • メインプログラムファイル: /usr/local/sbin/vsftpd
  • メイン設定ファイル: /etc/vsfptd.conf
  • PAM 認証ファイル: /etc/pam.d/vsftpd
  • 匿名ユーザーのホームディレクトリ: /var/ftp
  • 匿名ユーザーのダウンロードディレクトリ: /var/ftp/pub
  • vsftpd には 2 つの主要なセキュリティ原則があります。
  • 仮想ユーザーのみログインが許可され、ローカル ユーザーと匿名ユーザーは無効になります。
  • ルート権限で実行することは許可されていません。
  • 設定ファイルを保存するディレクトリを作成する
  • /etc/vsftpd に移動します
  • 新しい設定ファイルを/etc/vsftpdディレクトリにコピーします。

ユーザーと共有ディレクトリとディレクトリ権限を作成する

  • 仮想ユーザーのパスワード用のプレーンテキスト ファイルを作成し、先ほどインストールした db4-utils コンポーネントを使用してパスワード認証ファイルを生成します。
  • vim /etc/vsftpd/access.txt

zhangsan #ユーザー名
123456 #パスワード
リシ
123456 使用回数

  • 先ほどインストールした db4-utils コンポーネントは、パスワード認証ファイルを生成します。
  • db_load -T -t ハッシュ -f /etc/vsftpd/access.txt /etc/vsftpd/access.db

  • vsftpd の PAM 認証ファイルを編集します。
  • vim /etc/pam.d/vsftpd

認証が必要 /lib64/security/pam_userdb.so db=/etc/vsftpd/access
必要なアカウント /lib64/security/pam_userdb.so db=/etc/vsftpd/access

  • メイン設定ファイル /etc/vsftpd/vsftpd.conf を編集します。
  • /etc/vsftpd/vsftpd.conf{,.bak} をコピーします。
  • vim /etc/vsftpd/vsftpd.conf
  • #匿名ユーザーを許可しない
匿名を有効にする=いいえ
ローカル有効=はい
書き込み有効=はい

# ユーザーリストのロックを開始しません。すべてのユーザーがロックされ、親ディレクトリにアクセスできなくなります。ホームディレクトリにのみアクセスできます。chroot_local_user=YES
chroot_list_enable=いいえ

#ログを開始
xferlog_enable=はい
xferlog_std_format=はい
xferlog_file=/etc/vsftpd/vsftpd.log

# 仮想ユーザーを有効にする guest_enable=YES
#システムユーザーに対応するFTP仮想ユーザー guest_username = vsftpd
#PAM 認証ファイル /etc/pam.d/vsftpd
pam_service_name=vsftpd

仮想ローカル権限使用=はい

vsftpdの起動スクリプトを記述します: /etc/init.d/vsftpd

#!/bin/bash
#
# vsftpd このシェルスクリプトは起動と停止を行います
# スタンドアロン vsftpd。
#
# chkconfig: -60 50
# 説明: VsftpdはFTPデーモンであり、プログラムです
# 着信 FTP サービス要求に応答します。
# プロセス名: vsftpd
# 設定: /etc/vsftpd/vsftpd.conf
# ソース関数ライブラリ。
. /etc/rc.d/init.d/functions
# ソースネットワーク構成。
. /etc/sysconfig/ネットワーク
# ネットワークが稼働していることを確認します。
[ ${NETWORKING} = "no" ] && 終了 0
[ -x /usr/local/sbin/vsftpd ] || 終了 0
戻り値=0
プログラム="vsftpd"
始める() {
        # デーモンを起動します。
        [ -d /etc/vsftpd ] の場合;
                `ls /etc/vsftpd/*.conf` の i に対して、
                        サイト=`ベース名 $i .conf`
                        echo -n $"$site の $prog を開始しています: "
                        /usr/local/sbin/vsftpd $i &
                        RETVAL=$?
                        [ $RETVAL -eq 0 ] && {
                           /var/lock/subsys/$prog をタッチします
                           成功 $"$prog $site"
                        }
                        エコー
                終わり
        それ以外
                戻り値=1
        フィ
        $RETVALを返す
}
停止() {
        # デーモンを停止します。
        echo -n $"$prog をシャットダウンしています: "
        プロセス $prog を強制終了する
        RETVAL=$?
        エコー
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
        $RETVALを返す
}
# 私たちがどのように呼ばれたか見てみましょう。
ケース「$1」
  始める)
        始める
        ;;
  停止)
        停止
        ;;
  再起動|リロード)
        停止
        始める
        RETVAL=$?
        ;;
  再起動)
        [ -f /var/lock/subsys/$prog ]の場合;
            停止
            始める
            RETVAL=$?
        フィ
        ;;
  状態)
        ステータス $prog
        RETVAL=$?
        ;;
  *)
        echo $"使用法: $0 {start|stop|restart|condrestart|status}"
        出口1
エサック
$RETVALを終了

実行権限を追加する

  • /etc/xinetd.d/vsftpd ファイルを変更して、xinetd デーモンを使用せずに vsftpd を起動します。
  • sed -in 's/disable.*=.*/disable = yes/g' /etc/xinetd.d/vsftpd
  • sed -in 's/disable.*=.*/disable = yes/g' /etc/xinetd.d/vsftpdn

  • vsftpdを起動する
  • servicevsftpd の開始

ログインテスト

  • マシンを起動してテストを再開する
  • chkconfig vsftpd オン

上記は、vsFTP 3.0.3 のコンパイルとインストールの詳細な内容です。vsFTP 3.0.3 のコンパイルとインストールの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Linux 上で vsftpd サーバーをコンパイルしてインストールする (ローカル ユーザー認証方式)
  • vsftp を使用して Linux で FTP サーバーを構築する (パラメータの説明付き)
  • Linux で vsftpd をインストールして設定するための詳細な手順 (推奨)
  • vsftpd 匿名ユーザーのアップロードとダウンロードの設定方法
  • vsftpアップロード553ファイルを作成できませんでしたエラーの解決策

<<:  react-color を使用してフロントエンドのカラーピッカーを実装する方法

>>:  ウェブサイトのビジュアルデザインの重要なポイント

推薦する

JavaScript デザインパターン 責任連鎖パターン

目次概要コードの実装パラメータ定義成し遂げる責任連鎖パターンの実装改善概要責任チェーン パターンは、...

MySQL の current_timestamp の落とし穴とその解決策を共有する

目次MySQL の current_timestamp の落とし穴エラーを報告する私の解決策mysq...

HTMLはテキスト行のインターセプトの実装原理とコードを超えています

複数行を超えるテキストをインターセプトするための HTML コードは次のとおりです。 HTML:コー...

Linux nohup はプログラムをバックグラウンドで実行し、表示します (nohup と &)

1. バックグラウンド実行一般的に、Linux 上のプログラムは .sh ファイル (./sh フ...

Vue 2つのフィールドの共同検証によりパスワード変更機能を実現

目次1. はじめに2. ソリューションの実装2.1 実装コード2.2 コードの説明2.3 検証結果1...

Linux システムで TCP 接続を作成するプロセスの紹介

目次LinuxでTCPを作成する手順サーバクライアントTCP確立プロセスサンプルコードLinuxでT...

プライベートイメージウェアハウスを構築するためのDockerレジストリの実装方法

マイクロサービスのイメージは、保存用に Docker リポジトリにアップロードされます。一般的に使用...

2 つの Linux サーバー間の自動ファイル同期

サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....

MySQL テーブルスペースとは何ですか?

今日皆さんにお伝えしたいトピックは、「皆さんがよく話題にするテーブル スペースとは一体何でしょうか。...

Centos7はMySQLログに基づいてデータを復元するためのサンプルコードを実装します

導入Binlog ログ、つまりバイナリ ログ ファイルは、データベースに対するユーザー操作の SQL...

モバイルデバイス用のメタタグ設定の完全なリスト

序文以前フロントエンドを勉強していたとき、メタタグに対する私の理解はこの一文だけでした。 <メ...

Linux ディスクのマウント、パーティション分割、容量拡張操作を実装する方法

基本概念操作の前に、まずいくつかの基本的な概念を理解する必要がありますディスクLinux システムで...

WeChatアプレットがユーザーの移動軌跡を記録

目次設定を追加json 構成レイヤー構成の表示論理層の構成位置追跡をオンにする録音を開始開始座標を決...

ミニプログラムの基本的な使用方法の知識ポイント(非常に包括的で、お勧めです!)

目次アプリを登録するときに何をすればよいですか?ページを登録するときに通常何をする必要がありますか?...