FTP サーバーを Kerberos 用にカスタマイズするステップ

FTP サーバーは、TLS と Kerberos の両方をサポートできるように設定できます。

始める前に

一部の構成ステートメントの設定は、TLS と Kerberos の両方に適用され、両方の動作に影響を及ぼします。

サービス・プリンシパルをどの RACF® ID に関連付けるかを決定します。これは keytab ファイルが必要かどうかを判別するために役立ちます。 このサービス・プリンシパルが FTP 開始プロシージャー ID に関連付けられている場合は、keytab ファイルは不要です。 keytab ファイルが不要でそれを使用する予定がない場合は、環境変数 (ENVAR) KRB5_SERVER_KEYTAB を識別するために、FTP 開始プロシージャーをどのように更新するかを決定します。

手順

FTP サーバーを Kerberos 用にカスタマイズするには、以下のステップを実行します。

  1. サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングし、サーバーを Kerberos 用に使用可能にします。
    EXTENSIONS AUTH_GSSAPI
  2. クライアントに Kerberos プロトコルの使用を義務付けるかどうかを決めます。 デフォルトは、Kerberos を使用するかどうかをクライアントに決めさせることです。

    この設定は、SECURE_FTP 構成ステートメントを使用してカスタマイズされます。 この設定が TLS と Kerberos の両方のセキュリティー動作に影響を及ぼすことを理解しておいてください。

    クライアントが Kerberos を使用するかどうかを決められるようにするために、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングできます。

    SECURE_FTP ALLOWED
    これはデフォルトの設定であり、以下のことを指示します。
    • サーバーが TLS 用にのみ使用可能な場合、クライアントは TLS を使用してログインするか、セキュリティー・メカニズムをまったく使用せずにログインする必要があります。
    • サーバーが Kerberos 用にのみ使用可能な場合、クライアントは Kerberos を使用してログインするか、セキュリティー・メカニズムをまったく使用せずにログインする必要があります。
    • サーバーが TLS と Kerberos のどちらにも使用可能な場合、クライアントは TLS または Kerberos を使用してログインするか、セキュリティー・メカニズムをまったく使用せずにログインできます。
    Kerberos を使用したログインをクライアントに義務付けるには、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングします。
    SECURE_FTP REQUIRED
    この設定は、以下のことを指示します。
    • サーバーが TLS 用にのみ使用可能な場合、クライアントは TLS を使用してログインする必要があります。
    • サーバーが Kerberos 用にのみ使用可能な場合、クライアントは Kerberos を使用してログインする必要があります。
    • サーバーが TLS と Kerberos のどちらにも使用可能な場合、クライアントは TLS か Kerberos を使用してログインする必要があります。
  3. クライアントがログイン・ユーザー ID を提供するだけでセッションを確立するように、クライアント認証プロセスを使用してクライアント・ログイン・パスワード・プロンプトを除去するかどうかを決定します。 クライアントから受信される Kerberos プリンシパルを使用することにより、セキュリティー製品 (RACF または別の SAF 準拠のセキュリティー製品) を照会して、その Kerberos プリンシパルが、システムの認識するユーザー ID にマップされているかどうかを判別します。Kerberos プリンシパルがユーザー ID にマップされており、そのユーザー ID が、USER コマンドでクライアントから渡されるユーザー名と一致している場合は、パスワード・プロンプトを除去することができます。

    クライアント・プリンシパルが FTP サーバーと同じレルム用である場合、そのプリンシパルは ADDUSER または ALTUSER コマンドの KERBNAME オプションを使用してユーザー ID に相互に関連付けられます。クライアント・プリンシパルがクロス・レルム・プリンシパルの場合は、RDEFINE KERBLINK コマンドを使用してユーザー ID に相互に関連付けられます。

    クライアント認証プロセスで必要とされない場合であっても、クライアントにパスワードまたはパスワード・フレーズの提供を求める場合は、サーバーの FTP.DATA 構成ファイルで次のステートメントをコーディングします。これはデフォルトです。

    SECURE_PASSWORD_KERBEROS REQUIRED

    クライアント認証プロセスを使用してクライアント・パスワード・プロンプトを除去したい場合は、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングします。

    SECURE_PASSWORD_KERBEROS OPTIONAL
  4. データ接続のためのセキュリティー・レベルを決めます。 暗号化データ転送を義務付けることを選択するか、データ転送のセキュリティー・レベルをクライアントが決定できるようにすることを選択できます。 デフォルトは、セキュリティー・レベルをクライアントが決定できるようにすることです。

    この設定は、SECURE_DATACONN 構成ステートメントを使用してカスタマイズされます。 この設定が TLS と Kerberos の両方のセキュリティー動作に影響を及ぼすことを理解しておいてください。

    データに暗号アルゴリズムを適用せず、データを未加工で転送することをサーバーが必要とするようにしたい場合、また、暗号を使用しようとするクライアントがリジェクトされるようにしたい場合は、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングします。

    SECURE_DATACONN NEVER

    データを未加工で転送するか暗号化するかをクライアントが決めるようにしたい場合は、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングできます。

    SECURE_DATACONN CLEAR
    これはデフォルトです。

    TLS の場合は、データを暗号化するかどうかをクライアントが決めます。 クライアントがデータの暗号化を指示した場合は、サーバーとクライアントの間で TLS プロトコルを使用して暗号アルゴリズムがネゴシエーションされます。 Kerberos の場合、クライアントはデータの転送を未加工で行うか、保全性のみを保護して行うか、保全性とプライバシーの両方を保護して行うかを指定できます。

    保全性とプライバシーの両方を保護したデータ転送をサーバーが必要とするようにしたい場合は、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングします。

    SECURE_DATACONN PRIVATE

    TLS の場合は、サーバーとクライアントの間で TLS プロトコルを使用して暗号アルゴリズムがネゴシエーションされ、未加工のデータを送信しようとするクライアントは、リジェクトされます。 Kerberos の場合、データは保全性とプライバシーの両方の保護を使用して転送される必要があり、未加工のデータまたは保全性だけが保護されたデータを送信しようとするクライアントは、リジェクトされます。

    保全性だけを保護したデータ転送、または保全性とプライバシーの両方を保護したデータ転送をサーバーが必要とするようにしたい場合は、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングします。

    SECURE_DATACONN SAFE

    TLS の場合、このオプションを指定することは、SECURE_DATACONN PRIVATE を指定するのと同じことです。 Kerberos の場合、このオプションを指定することは、保全性のみを保護して、または保全性とプライバシーの両方を保護してデータを転送できることを示しています。 未加工のデータを送信しようとするクライアントは、リジェクトされます。

  5. 制御接続のための (つまり、FTP コマンドと返信のための) セキュリティー・レベルを決めます。 制御接続データの暗号化を義務付けることを選択するか、セキュリティー・レベルをクライアントが決定できるようにすることを選択できます。 デフォルトは、セキュリティー・レベルをクライアントが決定できるようにすることです。

    この設定は、SECURE_CTRLCONN 構成ステートメントを使用してカスタマイズされます。 この設定は、Kerberos だけに適用されます。 TLS の場合、制御接続は暗号化される必要があり、この設定は TLS の動作に影響しません。

    制御データを未加工で転送するか暗号化するかをクライアントが決めるようにしたい場合は、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングできます。

    SECURE_CTRLCONN CLEAR
    これはデフォルトです。

    クライアントはデータの転送を未加工で行うか、保全性のみを保護して行うか、保全性とプライバシーの両方を保護して行うかを指定できます。

    保全性とプライバシーの両方を保護した制御データ転送をサーバーが必要とするようにしたい場合は、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングします。

    SECURE_CTRLCONN PRIVATE
    未加工のデータまたは保全性だけが保護されたデータを送信しようとするクライアントは、リジェクトされます。

    保全性だけを保護したデータ転送、または保全性とプライバシーの両方を保護したデータ転送をサーバーが必要とするようにしたい場合は、サーバーの FTP.DATA 構成ファイルの中に次のステートメントをコーディングします。

    SECURE_CTRLCONN SAFE
    未加工のデータを送信しようとするクライアントは、リジェクトされます。
  6. keytab で使用するために RACF ID に対してサービス・プリンシパルを作成します (keytab を使用しない Kerberos の使用については、ステップ 7 を参照してください)。
    1. FTP サービス・プリンシパルに関連付ける RACF ユーザー ID を作成します。
      adduser FTP NOPASSWORD DFLTGRP(SYS1) omvs(autouid home('/u/ftp') prog('/bin/sh'))
    2. FTP RACF ユーザー ID を作成したら、それに Kerberos プリンシパルを追加します。
      ALTUSER FTP KERB(KERBNAME(ftp/<hostname>))
    3. Kerberos セグメントが追加されたことを確認するために、以下のコマンドを使用して ID を表示します。
      LU FTP NORACF KERB
      結果:
      USER=FTP                            
                                          
      KERB INFORMATION                    
      ----------------                    
      KERBNAME= ftp/<hostname>
      KEY VERSION= 001                    
      KEY ENCRYPTION TYPE= DES DES3 DESD  
    4. FTP サービス・プリンシパルを keytab ファイルに追加するには、以下のアクションを実行します。
      1. keytab ファイルは /etc/skrb ディレクトリー内にあります。 以下のコマンドを使用して、そのディレクトリーに切り替えてください。
        cd /etc/skrb
      2. 以下のコマンドを使用して、keytab ファイルの現在の内容を調べます。
        keytab list

        現在 keytab ファイルに何も入っていない場合は、以下の情報が返されます。

        Key table: /etc/skrb/krb5.keytab
      3. 以下のコマンドを使用して、FTP サービス・プリンシパルを追加します。
        keytab add ftp/<hostname>

        プリンシパルのパスワードを入力するよう求めるプロンプトが出されます。この例では、パスワードは FTP です。パスワードは大文字で入力する必要があります。 このパスワードは、FTP サービス・プリンシパルの作成時に、RACF ALTUSER コマンドを使用して割り当てたものです。

      4. 再び keytab list コマンドを発行します。
        FTP サービス・プリンシパルが存在しているときは、以下の情報が表示されます。
        Key table: /etc/skrb/krb5.keytab
         
        Principal: ftp/<hostname>@<realm>
          Key version: 1
          Key type: 56-bit DES
          Entry timestamp: 2005/02/04-16:21:10
         
        Principal: ftp/<hostname>@<realm>
          Key version: 1
          Key type: 56-bit DES using key derivation
          Entry timestamp: 2005/02/04-16:21:10
         
        Principal: ftp/<hostname>@<realm>
          Key version: 1
          Key type: 168-bit DES using key derivation
          Entry timestamp: 2005/02/04-16:21:10
  7. keytab ファイルなしで処理を進めるための代替手段として、FTP 開始済みタスクを実行する ID に FTP サービス・プリンシパルを関連付ける方法があります。 FTP 開始済みタスクの実行に使用する ID が FTPD である場合、以下のコマンドを発行することにより、FTP サービス・プリンシパルを作成し、それをその ID に関連付けます。
    ALTUSER FTPD PASSWORD(ftpd) NOEXPIRED KERB(KERBNAME(ftp/<hostname>))
    規則: このセットアップ方式では、KRB5_SERVER_KEYTAB 環境変数を設定する必要があります。この環境変数は、以下のように、FTP 開始プロシージャー内に直接指定します。
    //FTPD   EXEC PGM=&MODULE,REGION=4096K,TIME=NOLIMIT,
    //      PARM=('POSIX(ON) ALL31(ON)',                
    //        'ENVAR("KRB5_SERVER_KEYTAB=1")/&PARMS')   
    この環境変数を開始プロシージャー内に直接指定するためのもう 1 つの方法として、環境変数のリストを含むファイルを指定することもできます。
    //FTPD   EXEC PGM=&MODULE,REGION=4096K,TIME=NOLIMIT,
    //      PARM=('POSIX(ON) ALL31(ON)',                
    //        'ENVAR("_CEE_ENVFILE=/etc/ftp.envvars")/&PARMS')  
    次いで、/etc/ftp.envvars ファイル内に以下のエントリーを追加します。
     KRB5_SERVER_KEYTAB=1

タスクの結果

クライアントが Kerberos を使用して FTP サーバーに正常にログインできるようになれば、完了したことが分かります。以下のログインの例を示します。
  1. 以下のコマンドを発行して、Kerberos 信任状を取得します。
    kinit joe 
  2. パスワードの入力を求めるプロンプトが出されます。パスワードを入力してください。
  3. ftp コマンドを発行します。
    ftp <hostname>
    以下の情報が表示されます。
    Using /u/JOE/ftp.data for local site configuration parameters.
    IBM FTP CS V1R9
    FTP: using TCPIP
    Connecting to: <hostname><ip address> port:  <port number>.
    220-FTPD1 IBM FTP CS V1R9 at <hostname>, 21:51:51 on 2007-04-04.
    220 Connection will close if idle for more than 5 minutes.
    >>> AUTH GSSAPI 
    334 Using authentication mechanism GSSAPI
    >>> ADAT 
    235 ADAT=YGgGCSqGSIb3EgECAgIAb1kwV6ADAgEFoQMCAQ+iSzBJoAMC7moS==
    Authentication negotiation succeeded
    NAME (<hostname>:USER): 
    JOE
    >>> USER JOE 
    331 Send password please.
    PASSWORD:
    
    >>> PASS 
    230 JOE is logged on.  Working directory is "JOE".
    Command:
    ヒント: サーバーが SECURE_PASSWORD_KERBEROS OPTIONAL を指定して構成され、クライアントの Kerberos チケットのプリンシパル名がログオン・ユーザー ID と一致する場合、パスワード・プロンプトはスキップされます。