ノート:

Oracle LinuxへのFreeIPAサーバーのインストール

イントロダクション

FreeIPAは、Linuxネットワーク環境用のオープンソースのアイデンティティおよび認証管理システムです。サーバーには、389ディレクトリ・サーバーが中央データ・ストアとして含まれ、完全なマルチマスターLDAPv3機能が提供されます。

このチュートリアルの範囲を超えて、FreeIPAは、ISCバインド・サーバーを介したシングル・サインオン認証用のMIT Kerberos、ドッグタグ認証局およびオプションのドメイン名管理も提供します。

このチュートリアルでは、FreeIPAをインストールし、組込みLDAPディレクトリを構成する方法を示します。

目的

このチュートリアルでは、次の方法を学習します。

前提条件

FreeIPAの要件の詳細は、アップストリームのクイック・スタート・ガイドを参照してください。

Oracle Linuxのデプロイ

ノート:独自のテナンシで実行している場合は、演習環境をデプロイする前に、linux-virt-labs GitHubプロジェクトREADME.mdを読み、前提条件を完了してください。

  1. Lunaデスクトップでターミナルを開きます。

  2. linux-virt-labs GitHubプロジェクトをクローニングします。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 作業ディレクトリに変更します。

    cd linux-virt-labs/ol
    
  4. 必要なコレクションをインストールします。

    ansible-galaxy collection install -r requirements.yml
    
  5. Oracle Linuxインスタンス構成を更新します。

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "freeipa"
        type: "server"
    EOF
    
  6. 演習環境をデプロイします。

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml" 
    

    無料の演習環境には、ローカル・ホストで実行される再生のansible_python_interpreterを設定する追加の変数local_python_interpreterが必要です。この変数は、python3.6モジュールの下にあるOracle Cloud Infrastructure SDK for PythonのRPMパッケージが環境によってインストールされるため必要です。

    デフォルトのデプロイメント・シェイプでは、AMD CPUおよびOracle Linux 8が使用されます。Intel CPUまたはOracle Linux 9を使用するには、デプロイメント・コマンドに-e instance_shape="VM.Standard3.Flex"または-e os_version="9"を追加します。

    重要:プレイブックが正常に実行されるまで待機し、一時停止タスクに到達します。プレイブックのこの段階では、Oracle Linuxのインストールが完了し、インスタンスの準備ができました。前回の再生をノートにとります。この再生では、デプロイするノードのパブリックIPアドレスとプライベートIPアドレス、および演習の実行中に必要なその他のデプロイメント情報が出力されます。

サーバーDNS構成の確認

FreeIPAサーバーには、動作中のDNS設定が必要です。ipaコマンドライン・ツールを使用して登録されたクライアントは、/etc/ipa/default.confファイルに定義されているxmlrpc_urlおよびdomainパラメータによってサーバーを検索します。

  1. 端末を開き、SSH経由でfreeipaインスタンスに接続します。

    ssh oracle@<ip_address_of_instance>
    
  2. サーバーのホスト名を確認します。

    sudo hostname
    

    出力は、localhostまたはlocalhost6を返さないでください。

完全修飾ドメイン名(FQDN)を確認します。

FreeIPAには、インストール時に検証されるFQDNに対して64文字の制限があります。FQDNが64文字を超える場合は、sudo hostnamectl set-hostname NAME(NAMEはFQDN)を使用して短縮します。

  1. FQDNとその長さを確認します。

    hostname -f
    
  2. FQDNの長さの取得

    echo $(hostname -f) | wc -m
    

名前解決を確認します。

  1. サーバーのIPアドレスを取得します。

    ip -4 -o addr show ens3 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'
    

    ens3は、システム上のネットワーク・インタフェースの名前です。

  2. 転送 DNS構成を確認します。

    host $(hostname -f)
    

    転送DNS構成を検証する別の方法は、dig +short $(hostname -f) Aを使用することです。hostdigはどちらもbind-utilsパッケージの一部であり、DNSネーム・サーバーに問い合せる様々なユーティリティを提供します。

  3. 逆引きDNS構成(PTRレコード)を確認します。

    host $(hostname -i)
    

    別の方法として、dig +short -x $(hostname -i)を使用します。

必要なファイアウォール・ポートを開く

FreeIPAでは、複数のポートを開いてサービスと通信できるようにする必要があります。

サービス ポート プロトコル
HTTP/HTTPS 80,443 TCP
LDAP/LDAP 389,636 TCP
Kerberos 88,464 TCPとUDP
DNS 53 TCPとUDP
NTP 123 UDP

Oracle Linuxには、これらの必須ポートを開くためのfreeipa-4サービスが用意されています。詳細は、/usr/lib/firewalld/services/freeipa-4.xmlを参照してください。freeipa-4サービスは、非推奨のfreeipa-ldapおよびfreeipa-ldapsサービスを置き換えます。

  1. firewalldサービスを追加します。

    sudo firewall-cmd --permanent --add-service=freeipa-4
    
  2. 変更が有効になるようにfirewalldサービスをリロードします。

    sudo firewall-cmd --reload
    

必須パッケージのインストール

  1. FreeIPAモジュール・ストリームおよびプロファイルを有効にします。

    Oracle Linux 8:

    sudo dnf module enable -y idm:DL1
    

    Oracle Linux 9およびOracle Linux 10:

    FreeIPAパッケージはAppStreamリポジトリの一部であるため、Oracle Linux 9では何もする必要はありません。

  2. 統合DNSサービスを使用せずに、FreeIPAサーバーのパッケージをインストールします。

    sudo dnf install -y ipa-server
    

    ノート:このチュートリアルでは、統合DNSサービスを使用しません。必要に応じて、パッケージipa-server-dnsをインストール・リストに追加します。

FreeIPAサーバーのインストールおよび構成

  1. インストール・ユーティリティを実行します。

    sudo ipa-server-install
    

    このスクリプトは、インストール・ログ・ファイルの場所と、FreeIPAサーバーに含まれる内容のサマリーを指定することから始まります。

    出力例:

    [oracle@freeipa ~]$ sudo ipa-server-install
       
    The log file for this installation can be found in /var/log/ipaserver-install.log
    ==============================================================================
    This program will set up the IPA Server.
    Version 4.9.8
       
    This includes:
      * Configure a stand-alone CA (dogtag) for certificate management
      * Configure the NTP client (chronyd)
      * Create and configure an instance of Directory Server
      * Create and configure a Kerberos Key Distribution Center (KDC)
      * Configure Apache (httpd)
      * Configure SID generation
      * Configure the KDC to enable PKINIT
    ...
    

    その後、スクリプトは複数のプロンプトを使用してサーバーの構成を設定します。端末には、大カッコ内のプロンプトに対するデフォルトのレスポンスが表示され、Enterを押すとデフォルトのレスポンスが受け入れられます。

  2. noのデフォルトのレスポンスを受け入れて、統合DNSサービスを構成します。

    Do you want to configure integrated DNS (BIND)? [no]:
    
  3. デフォルトのホスト、ドメインおよびレルム名を受け入れます。

    これらは、この演習の開始時に検証された値です。推奨構成は、レルム名がプライマリDNSドメイン名すべて大文字と一致することです。

    Enter the fully qualified domain name of the computer
    on which you're setting up server software. Using the form
    <hostname>.<domainname>
    Example: master.example.com.
       
       
    Server host name [freeipa.lv.vcn.oraclevcn.com]: 
       
    The domain name has been determined based on the host name.
       
    Please confirm the domain name [lv.vcn.oraclevcn.com]: 
       
    The kerberos protocol requires a Realm name to be defined.
    This is typically the domain name converted to uppercase.
       
    Please provide a realm name [LV.VCN.ORACLEVCN.COM]:
    
  4. ディレクトリ・サーバー・スーパーユーザーおよびFreeIPA adminユーザーのパスワードを入力して確認します。

    ディレクトリ・サーバー・スーパーユーザーは、ディレクトリ内のcn=Directory Managerにマップされます。

    Certain directory server operations require an administrative user.
    This user is referred to as the Directory Manager and has full access
    to the Directory for system management tasks and will be added to the
    instance of directory server created for IPA.
    The password must be at least 8 characters long.
       
    Directory Manager password: 
    Password (confirm): 
       
    The IPA server requires an administrative user, named 'admin'.
    This user is a regular system account used for IPA server administration.
       
    IPA admin password: 
    Password (confirm): 
    
  5. デフォルトを受け入れてNETBIOSドメイン名を設定し、noを使用してクロニーを構成します。

    NetBIOS domain name [LV]: 
       
    Do you want to configure chrony with NTP server or pool address? [no]:
    
  6. このスクリプトは、サーバー構成のサマリーを示します。

  7. サーバー構成を受け入れるには、yesと入力します。

    Continue to configure the system with these values? [no]: yes
    
  8. スクリプトはサーバーの構成に進みます。

    この操作が完了するまでには数分かかる場合があります。

    ...
    Client configuration complete.
    The ipa-client-install command was successful
       
    Please add records in this file to your DNS system: /tmp/ipa.system.records.mv9i0ec2.db
    ==============================================================================
    Setup complete
       
    Next steps:
    	1. You must make sure these network ports are open:
    		TCP Ports:
    		  * 80, 443: HTTP/HTTPS
    		  * 389, 636: LDAP/LDAPS
    		  * 88, 464: kerberos
    		UDP Ports:
    		  * 88, 464: kerberos
    		  * 123: ntp
       
    	2. You can now obtain a kerberos ticket using the command: 'kinit admin'
    	   This ticket will allow you to use the IPA tools (e.g., ipa user-add)
    	   and the web user interface.
       
    Be sure to back up the CA certificates stored in /root/cacert.p12
    These files are required to create replicas. The password for these
    files is the Directory Manager password
    The ipa-server-install command was successful
    

    完了すると、スクリプトは次のものを提供します。

    • サマリー。
    • DNSシステムに追加するレコードのリスト。
    • 生成されたCA証明書をバックアップすることをお薦めします。

    必要なネットワーク・ポートは、freeipa-4 firewalldサービスを使用してすでに開いています。

FreeIPAサーバーのテスト

FreeIPAインストールには、コマンドライン・クライアントと、サーバーと対話するためのWebUIが含まれます。WebUIの使用は、このチュートリアルの範囲外です。

コマンドライン・インタフェース(CLI)にアクセスする

  1. Kerberosレルムに対してadminユーザーを認証します。

    kinit admin
    

    プロンプトが表示されたら、インストールおよび構成ステップで作成したadminユーザーのパスワードを入力します。次に、kinitコマンドによってKerberosチケットが生成されます。

  2. チケットの情報を一覧表示します

    klist
    

    出力例:

    [oracle@freeipa ~]$ sudo klist
    Ticket cache: KCM:0
    Default principal: admin@LV.VCN.ORACLEVCN.COM
    
    Valid starting       Expires              Service principal
    09/28/2022 14:05:46  09/29/2022 13:05:53  krbtgt/LV.VCN.ORACLEVCN.COM@LV.VCN.ORACLEVCN.COM
    
  3. FreeIPAサーバー上のすべての既存ユーザーのリストを取得します。

    ipa user-find
    

    結果は、現在存在する唯一のユーザーであるadminユーザーを返します。

    出力例:

    [oracle@freeipa ~]$ sudo ipa user-find
    --------------
    1 user matched
    --------------
      User login: admin
      Last name: Administrator
      Home directory: /home/admin
      Login shell: /bin/bash
      Principal alias: admin@LV.VCN.ORACLEVCN.COM, root@LV.VCN.ORACLEVCN.COM
      UID: 872200000
      GID: 872200000
      Account disabled: False
    ----------------------------
    Number of entries returned 1
    ----------------------------
    

セキュリティ設定と強化

次に、FreeIPAサーバーをセキュアに使用するためのいくつかの方法を示します。

匿名バインドの無効化

FreeIPA LDAPサーバーは、匿名バインドをデフォルトとして有効にするため、特定の構成設定およびディレクトリ値を公開します。

この動作は、nsslapd-allow-anonymous-access属性によって制御されます。使用できる値には次のものが含まれます。

匿名バインドを禁止する場合は、offではなくrootdseを使用することをお薦めします。offを使用すると、外部クライアントによるサーバー構成のチェックもブロックされます。LDAPやWebクライアントなどの非ドメイン・クライアントは、ルートDSEファイルを読み取って接続の詳細を取得することで匿名で接続します。

  1. 匿名バインドが有効になっているかどうかを確認します。

    ldapsearch -x -h $(hostname -f) -b dc=lv,dc=vcn,dc=oraclevcn,dc=com
    
    • -xは、簡易認証または匿名認証を設定します。
    • -hは、LDAPサーバー・ホストを設定します。
    • -bは、検索のベースDNを設定します。

    FreeIPAサーバーのベースDNを含むキー設定は、/etc/ipa/default.confファイルに格納されます。

    出力例:

    ...
    # Default SMB Group, groups, accounts, lv.vcn.oraclevcn.com
    dn: cn=Default SMB Group,cn=groups,cn=accounts,dc=lv,dc=vcn,dc=oraclevc
     n,dc=com
    cn: Default SMB Group
    description: Fallback group for primary group RID, do not add users to this gr
     oup
    objectClass: top
    objectClass: ipaobject
    objectClass: posixgroup
    objectClass: ipantgroupattrs
    ipaUniqueID: 0c9cf178-4324-11ed-bf0b-02001704fe22
    gidNumber: 921600001
    ipaNTSecurityIdentifier: S-1-5-21-2697967063-3375457457-2974965896-1001
      
    # search result
    search: 2
    result: 0 Success
      
    # numResponses: 110
    # numEntries: 109
    

    検索結果では、LDAPディレクトリのツリー全体が返されます。

  2. 構成を変更し、匿名バインドを無効にします。

    ldapmodifyコマンドは、変更を加えたLDIFファイルを受け入れるか、標準入力から操作を読み取ります。

    1. LDIFファイルを作成します。

      cat << 'EOF' | tee ~/disable_anon_bind.ldif > /dev/null
      dn: cn=config
      changetype: modify
      replace: nsslapd-allow-anonymous-access
      nsslapd-allow-anonymous-access: rootdse
      EOF
      

      複数の属性を単独でダッシュ-文字で区切ることによって、複数の属性を変更できます。各追加の変更は、属性変更タイプから始まり、必要な属性を提供します。

    2. LDIF変更を適用します。

      ldapmodify -x -D "cn=Directory Manager" -W -H ldap:// -ZZ -f ~/disable_anon_bind.ldif
      
      • -xは、簡易認証または匿名認証を設定します。
      • -Dは、バインドDNを設定します。
      • -Wは、LDAP adminパスワードの入力を求めます。
      • -Hは、LDAPサーバー・ホストではなく、LDAP Uniform Resource Identifier (URI)を使用して接続します。
      • -ZZは、TLSリクエストを開始し、成功したレスポンスを強制します。

      ノート:自己署名証明書を使用するため、-ZZが必要です。

      出力例:

      [oracle@freeipa ~]$ ldapmodify -x -D "cn=Directory Manager" -W -H ldap:// -ZZ -f ~/disable_anon_bind.ldif
      Enter LDAP Password: 
      modifying entry "cn=config"
      
    3. FreeIPAサーバーを再起動します。

      sudo systemctl restart ipa.service
      
  3. ディレクトリを匿名で問い合せて、変更を確認します。

    ldapsearch -x -h $(hostname -f) -b dc=lv,dc=vcn,dc=oraclevcn,dc=com
    

    レスポンスAnonymous access is not allowedに注意してください。

    出力例:

    [oracle@freeipa ~]$ ldapsearch -x -h freeipa.lv.vcn.oraclevcn.com -b dc=lv,dc=vcn,dc=oraclevcn,dc=com
    # extended LDIF
    #
    # LDAPv3
    # base <dc=lv,dc=vcn,dc=oraclevcn,dc=com> with scope subtree
    # filter: (objectclass=*)
    # requesting: ALL
    #
      
    # search result
    search: 2
    result: 48 Inappropriate authentication
    text: Anonymous access is not allowed.
      
    # numResponses: 1
    
  4. ディレクトリの問合せが認証を使用して機能することを確認します。

    ldapsearch -D uid=admin,cn=users,cn=accounts,dc=lv,dc=vcn,dc=oraclevcn,dc=com -W -H ldap://
    

    出力例:

    ...
    # freeipa.lv.vcn.oraclevcn.com + 389, subordinate-ids, dna, ipa, etc, 
     lv.vcn.oraclevcn.com
    dn: dnaHostname=freeipa.lv.vcn.oraclevcn.com+dnaPortNum=389,cn=subord
     inate-ids,cn=dna,cn=ipa,cn=etc,dc=lv,dc=vcn,dc=oraclevcn,dc=com
    objectClass: dnaSharedConfig
    objectClass: top
    dnaHostname: freeipa.lv.vcn.oraclevcn.com
    dnaPortNum: 389
    dnaSecurePortNum: 636
    dnaRemainingValues: 32766
      
    # search result
    search: 2
    result: 0 Success
      
    # numResponses: 475
    # numEntries: 474
    

TLSが有効であることの確認

Oracle Linux 8以降、FreeIPAはシステム全体の暗号化ポリシーを使用します。詳細は、crypto-policies(7)のマニュアル・ページを参照してください。

  1. 現在のシステム全体の暗号化ポリシーを一覧表示します。

    cat /etc/crypto-policies/config
    
  2. 暗号化ポリシーの詳細を一覧表示します。

    cat /usr/share/crypto-policies/$(cat /etc/crypto-policies/config)/nss.txt
    

    出力例:

    [oracle@freeipa ~]$ cat /usr/share/crypto-policies/$(cat /etc/crypto-policies/config)/nss.txt
    library=
    name=Policy
    NSS=flags=policyOnly,moduleDB
    config="disallow=ALL allow=HMAC-SHA256:HMAC-SHA1:HMAC-SHA384:HMAC-SHA512:CURVE25519:SECP256R1:SECP384R1:SECP521R1:aes256-gcm:chacha20-poly1305:aes256-cbc:aes128-gcm:aes128-cb   > c:SHA256:SHA384:SHA512:SHA224:ECDHE-RSA:ECDHE-ECDSA:RSA:DHE-RSA:ECDSA:RSA-PSS:RSA-PKCS:tls-version-min=tls1.2:dtls-version-min=dtls1.2:DH-MIN=2048:DSA-MIN=2048:RSA-MIN=2048"
    

    DEFAULTポリシーでは、最小のTLS 1.2が使用されます。

FreeIPAサーバー・ステータスの確認

FreeIPAサーバーには、構成済サービスのステータスを表示するipactlユーティリティが含まれています。同じユーティリティを使用して、FreeIPAサーバー全体を起動、停止および再起動することもできます。個々のコンポーネントをstartstopまたはrestartする必要がある場合は、systemctl COMMAND name.serviceを使用します。

  1. すべてのサービスのステータスを表示します。

    sudo ipactl status
    

    出力例:

    [oracle@freeipa ~]$ sudo ipactl status
    Directory Service: RUNNING
    krb5kdc Service: RUNNING
    kadmin Service: RUNNING
    httpd Service: RUNNING
    ipa-custodia Service: RUNNING
    pki-tomcatd Service: RUNNING
    ipa-otpd Service: RUNNING
    ipa: INFO: The ipactl command was successful
    

    追加のコマンド・オプションを表示するには、sudo ipactl --helpを使用します。

ユーザーとグループの作成

FreeIPAサーバーの基本インストールおよび構成が完了したら、次のステップは、ユーザーとグループの作成で構成されるアイデンティティ管理の処理です。これを実行する前に、Kerberosトークンを生成します。

  1. ユーザーadminのトークンを生成します。

    kinit admin
    
  2. 既存のトークンのリストを取得します。

    klist
    

    Kerberosトークンは、デフォルトで24時間有効です。「Access the Command-Line Interface (CLI)」というタイトルのステップで以前にこれらのコマンドを実行していたため、新しいトークンを作成するのではなく、元のトークンがリストに表示されます。

  3. 新しいユーザー・グループの追加。

    FreeIPAは、標準パスワード・ポリシー、権限およびその他の特性を持つユーザーのセットとしてユーザー・グループを定義します。

    ユーザー・グループには次のものを含めることができます。

    • ユーザー
    • 他のユーザー・グループ
    • FreeIPAの外部に存在する外部ユーザー

   ipa group-add foo

出力例:

[oracle@freeipa ~]$ ipa group-add foo
-----------------
Added group "foo"
-----------------
  Group name: foo
  GID: 1326400003

FreeIPAサーバーでは、次の3つのグループ・タイプがサポートされています。

グループfooはPOSIXユーザー・グループです。別のグループ・タイプを指定するには、次のいずれかのオプションを使用します。

  1. 既存のすべてのユーザー・グループのリストを取得します。

    ipa group-find
    

    出力例:

    [oracle@freeipa ~]$ ipa group-find
    ----------------
    5 groups matched
    ----------------
      Group name: admins
      Description: Account administrators group
      GID: 1326400000
       
      Group name: editors
      Description: Limited admins who can edit other users
      GID: 1326400002
       
      Group name: foo
      GID: 1326400003
       
      Group name: ipausers
      Description: Default group for all users
      
      Group name: trust admins
      Description: Trusts administrators group
    ----------------------------
    Number of entries returned 5
    ----------------------------
    

    FreeIPAサーバーでは、インストール時に次のユーザー・グループが作成されます。

    • admins
    • ipausers
    • trust admins

    警告:デフォルトのadminユーザーが含まれているため、adminグループを削除しないでください。FreeIPAサーバーが正しく動作するには、adminグループが必要です。

  2. 新しいユーザー・アカウントを追加します。

    ipa user-add
    

    このコマンドは、対話型スクリプトを実行し、FreeIPAがユーザー・アカウントを作成するために必要な最小限のデータ・セットを要求します。

    出力例:

    [oracle@freeipa ~]$ ipa user-add
    First name: Oracle
    Last name: User
    User login [ouser]: oracle
    -------------------
    Added user "oracle"
    -------------------
      User login: oracle
      First name: Oracle
      Last name: User
      Full name: Oracle User
      Display name: Oracle User
      Initials: OU
      Home directory: /home/oracle
      GECOS: Oracle User
      Login shell: /bin/sh
      Principal name: oracle@LV.VCN.ORACLEVCN.COM
      Principal alias: oracle@LV.VCN.ORACLEVCN.COM
      Email address: oracle@lv.vcn.oraclevcn.com
      UID: 1326400004
      GID: 1326400004
      Password: False
      Member of groups: ipausers
      Kerberos keys available: False
    

    または、複数のオプションを指定してコマンドを実行すると、ユーザー・アカウントを非対話モードで作成できます。使用可能なオプションのリストを取得するには、ipa user-add --helpを実行します。

  3. 新しいユーザーを新しいユーザー・グループに追加します。

    ipa group-add-member foo --users=oracle
    

    出力例:

    [oracle@freeipa ~]$ ipa group-add-member foo --users=oracle
      Group name: foo
      GID: 1326400003
      Member users: oracle
    -------------------------
    Number of members added 1
    -------------------------
    

ipaコマンドには、表示されている機能よりも多くの機能があります。追加のコマンドについては、ipa help commandsを実行して包括的なリストを確認してください。

次のステップ

この演習では、FreeIPAサーバーのインストールおよび使用の基本を紹介します。FreeIPAには、ここで説明する以外の多くの追加機能があるため、次のリンクを使用するか、製品マニュアル・ページを参照してください。

その他の学習リソース

docs.oracle.com/learnで他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。