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 を使用してフロントエンドのカラーピッカーを実装する方法

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

推薦する

MySQL 8.0 に移行する際の注意点 (要約)

パスワードモードPDO::__construct(): サーバーがクライアントに不明な認証方法を要求...

Vue で wangeditor リッチテキスト編集を使用する際の問題

wangEditor は、JavaScript と CSS に基づいて開発された Web リッチ テ...

MySQLレジストリをクリアする方法

具体的な方法: 1. [ win+r ] を押して実行ウィンドウを開き、「regedit」と入力して...

Centos7 の起動プロセスと Systemd での Nginx の起動構成

Centos7 の起動プロセス: 1.post(電源投入時のセルフテスト) 電源投入時のセルフテスト...

Vueは小さなフォーム検証機能を実装します

この記事では、フォーム検証を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は...

Dockerはターミナルで中国語を入力できない問題を解決します

序文:ある日、DockerでMySQLサービスを構築したところ、MySQLのコマンドラインで中国語の...

HTML ドラッグ アンド ドロップ機能の実装コード

Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...

React Router V6 のアップデート

目次ReactRouterV6 の変更1. <Switch> が <Routes&...

MySQL 百万レベルのデータページングクエリ最適化ソリューション

データベースからクエリする必要があるテーブルに数万件のレコードがある場合、すべての結果を一度にクエリ...

(MariaDB) MySQL のデータ型とストレージメカニズムの包括的な説明

1.1 データ型の概要データ型は、各フィールドに保存できるデータの種類、保存できるデータの量、保存で...

Linux でファイルの権限 (所有権) を変更する

Linux と Unix はマルチユーザー オペレーティング システムであるため、ファイルの権限と所...

Centos7 システムでの python2 と python3 の共存

最初のステップは、Python のバージョン番号とインストール パスを確認することです。 上記のビュ...

シンプルなカレンダー効果を実現する JavaScript コード

この記事では、シンプルなカレンダー効果を実現するためのJavaScriptの具体的なコードを参考まで...

CSS3 とテーブルタグを使用して円軌道アニメーションを実装するためのサンプルコード

html: 実際には、テーブルタグに従っていくつかの実線の円 div を正六角形に配置し、div コ...

Linux サーバーでフォルダー、ファイル、解凍コマンドを削除する方法

1. フォルダを削除する例: rm -rf /usr/java /usr/javaディレクトリとその...