How to build Internet Server with Linux

last update: 29 Sep 2004

home |index |previous |next |contents

ftpのセキュリティ



ftpに関しては、前述のxinetd関連とPAMの他に、 大きく分けて2箇所のチェックポイントがあります。
5.1 ftpのホームディレクトリ
ftpのホームディレクトリ(例えば/var/ftp)以下にはpub、etc、binなどの ディレクトリがあります。

注: なお、RedHat6.x系とSlackwareのFTPのホームディレクトリは"/home/ftp"です。適宜ご自分の環境に合わせ、読み換えてください。

    5.1.1 パーミッション

    外部から直接アクセスされるディレクトリなので、パーミッションの設定には十分注意を払いましょう。

    5.1.2 /var/ftp/etc/passwd + /var/ftp/etc/group

    このファイルにはディレクトリ/etcにあるpasswdファイルとgroupファイルと同じ情報が書かれている場合があり、非常に危険です。

    必ず、ftp以外のユーザを削除し、anonymous以外のグループも削除しましょう。

    ftp:*:404:15::/var/ftp:/bin/sh
    

    /var/ftp/etc/passwdの例


    anonymous:*:15:
    

    /var/ftp/etc/groupの例


    注意: 上の例は、Shadowパスワードを使ったシステムのものです。

    当然ながら両ファイルのパーミッションは"read only = 444"です。

    5.1.3 welcome.msg

    ファイルwelcome.msgから"welcome to ..."の文を削除しましょう。 "welcome to ..."の文があると、万が一、ftpを経由して侵入された場合でも文句をいえなくなってしまいます。
5.2 /etc/ftp* ファイル群
ディレクトリ/etc以下にはftpのアクセス制御を行なうためのファイルがいくつかあります。

    5.2.1 /etc/ftpaccess

    このファイルでftpのアクセス制御を行ないます。
    たくさんの項目がありますが、最低限チェックが必要なものを説明します。
    1. loginfails
      1回のftpセッションで、ログインできる上限を設定します。

      ログインする回数があまりに多い場合、当てずっぽうにパスワードを入力して 侵入を試みている可能性もあるので、 loginfailsは少なめに設定した方がよいでしょう。

    2. passwd-check
      これは"rfc822"を設定しましょう。
    3. delete, overwrite, rename, chmod, umask
      これらの設定はすべて"no"にしたほうが、安全です。
      # all the following default to "yes" for everybody
      delete          no      guest,anonymous         # delete permission?
      overwrite       no      guest,anonymous         # overwrite permission?
      rename		no	guest,anonymous		# rename permission?
      chmod           no      anonymous               # chmod permission?
      umask           no      anonymous               # umask permission?
      

      enum delete, overwrite, rename, chmod, umaskの設定例

    4. upload
      外部からの"書き込み"は禁止したほうが良いでしょう。
      1	upload  /var/ftp  *             no
      2	upload  /var/ftp  /bin          no
      3	upload  /var/ftp  /etc          no
      4	upload  /var/ftp  /pub          no
      5
      6	# ユーザのホームディレクトリへの書き込みも禁止
      7	upload  /home/*	*		no
      

      uploadの設定例


      詳細はmanコマンドで見ることができます。
        % man ftpaccess

      上記設定の場合、外部からデータを一切アップロードできませんので、 セキュリティ上は安全ですが、 制約が厳しすぎてFTPサービスを提供する利点があまりありません。 一般ユーザが自身のホームディレクトリにデータをアップロードするには、 2つの方法があります。

      1. uploadコマンドを追加する
        上のリストについて、7行目以降にユーザ毎のuploadコマンドを追加することで、 ユーザのホームディレクトリにアップロードできるようになります。 例えば、ユーザ"user01"が自身のホームディレクトリ :/home/user01にデータをアップロード可能とするには、下リストの8行目に示すようなuploadコマンドを追加します。
        7	upload	/home/*		* 	no
        8	upload /home/user01	* yes user01
        

        /etc/ftpaccess: user01のホームディレクトリへのuploadを許可


      2. SSHのsftpコマンドを利用する
        SSHをインストールし、sftpコマンドを使うと、 SSHはユーザ認証とホスト認証を行うため、 第三者が一般ユーザになりすまして危険なデータをサーバにアップロードする、 などの危険を避けることができます。

      ここでは、外部向けのFTPサービスはダウンロードのみ許可し、 データのアップロードには、SSHのsftpを利用するという運用を勧めます。

    5.2.2 /etc/ftpusers

    このファイルはftpアクセスを"拒否する"ユーザを書きます。

    少なくとも"root"は書いておきましょう。
    出来ればftpを除くすべてのユーザを書き込みましょう。

    5.2.3 /etc/ftphosts

    /etc/ftphostsファイルを使って、アクセスできるクライアントを制限することができます。
    /etc/ftphostsファイルは、以下の書式でクライアントからのアクセスの許可/拒否を指定します。
    	allow <ユーザ名> <host>[<host>,]
    	deny <ユーザ名> <host>[<host>,]
    

    /etc/ftphostsの書式


    具体的な例を使って、/etc/ftphostsファイルの書き方を説明します。

    ここで注意しなければならないのは、/etc/ftphostsファイルに記述する順番です。 もしも上記の例で許可と拒否の順番を逆にした場合、 wu.ftpdデーモンはユーザ:"anonymous"に関して、 はじめに全てのアクセスを拒否するよう解釈しますので、 次行の許可が無効(結果、誰もアクセスできない)となります。


home |index |previous |next |contents


since 04/Oct/2004