Oracle LinuxでMFA認証を実現する方法 (Oracle IDCSとLinux-PAMを利用)

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
この記事では、次のような課題を解決するため、実現方法を紹介したいと思います。

- Oracle Identity Cloud Service(IDCS)を利用している方は、Linuxサーバにログインする時、OS認証ではなく、IDCSのユーザー認証を利用したい。つまり、Linux側で通常のOSユーザーを作成(useradd)しなくても、<strong>IDCSのユーザーとパスワードでログイン</strong>できるよう実現したい。
- Oracle IDCSは、マルチファクタ認証（Multi-factor Authentication、以下は<font color=blue>MFA</font>と省略）の機能を提供しているので、<strong>Linuxサーバにログインする時、MFA認証を利用</strong>したい。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/1e246695-3c9b-2407-176a-2a38127d96ab.png", width="600">

ご存じの方がいらっしゃると思いますが、Oracle IDCSは、新しいサービスのIdentiy Domainへの移行予定があります。本記事は、<strong>従来のIDCSの設定方法</strong>を提供させていただきます。次回はIdentity Domainの設定方法を紹介したいと思います。

__Linux PAMとは__
Linux Pluggable Authentication Module (PAM)は、Oracle IDCSでエンド・ユーザー認証を実行するLinuxの認証モジュールです。

PAMを使用すると、Linux管理者またはエンド・ユーザーは、NSS(Name Service Switch)を利用する標準のLinuxコマンド(id、group、getentなど)を使用して、Oracle IDCSに格納されているユーザーおよびグループに関する情報を問い合せることもできます。

PAMを利用する時、Linuxが<font color=blue>HTTPS</font>暗号化チャネルを使用してIDCSと通信します。

__Linux PAMの動作保証OSバージョン__
Oracle Enterprise Linux <font color=blue>6.8+</font>, Oracle Enterprise Linux <font color=blue>7</font>、Oracle Enterprise Linux <font color=blue>8</font>
※、本記事をポストした時点（2022年10月）で、Oracle Linux 8を対応していませんが、2023/01/23から、<strong>OEL 8</strong>も対応できるようになりました。

__検証環境__
|項目|内容|コメント|
|:--|:--|:--|
|関連サービス|Oracle IDCS||
||OCI Compute (VM)|Oracle Linux <strong>7.9</strong>|
|リージョン|東京||

__この検証には、どのようなスキルは必要__
以下のような基本レベルであればOKです。
- Oracle IDCSについて基本的な知識を持っている（ユーザ、グループ、アプリケーション、AppRoleなどの概念を理解している）。
- Linux OSの基本操作ができる (ssh, yum, curl, vi などのコマンドができる)。

__作業ステップ__

- [1. 機密アプリケーションの構成 (IDCS)](#1-機密アプリケーションの構成-idcs)
- [2. Linux-PAMのグループおよびユーザーの構成](#2-linux-pamのグループおよびユーザーの構成)
  - [2-1. アクセス・トークンの取得 (Linux)](#2-1-アクセストークンの取得-linux)
  - [2-2. POSIX属性を持つグループの作成 (Linux)](#2-2-posix属性を持つグループの作成-linux)
  - [2-3. POSIX属性を持つユーザーの作成およびグループへの追加 (Linux)](#2-3-posix属性を持つユーザーの作成およびグループへの追加-linux)
  - [2-4. ユーザ・アカウントのアクティブ化 (IDCS)](#2-4-ユーザアカウントのアクティブ化-idcs)
  - [2-5. エンドポイントの検証（オプション）](#2-5-エンドポイントの検証オプション)
- [3. Linux-PAMのインストールおよび構成](#3-linux-pamのインストールおよび構成)
  - [3-1. Linux-PAMのダウンロード (IDCS)](#3-1-linux-pamのダウンロード-idcs)
  - [3-2. Linux-PAMのインストール (Linux)](#3-2-linux-pamのインストール-linux)
  - [3-3. ウォレットの作成 (Linux)](#3-3-ウォレットの作成-linux)
  - [3-4. Linux-PAMの構成 (Linux)](#3-4-linux-pamの構成-linux)
  - [3-5. Linuxへの認証テスト (Linux)](#3-5-linuxへの認証テスト-linux)
- [4. MFA認証の有効化](#4-mfa認証の有効化)
  - [4-1. MFAの設定 (IDCS)](#4-1-mfaの設定-idcs)
  - [4-2. サインオン・ポリシーの作成 (IDCS)](#4-2-サインオンポリシーの作成-idcs)
  - [4-3. IDCSログイン画面でMFA認証の有効化 (IDCS)](#4-3-idcsログイン画面でmfa認証の有効化-idcs)
  - [4-4. LinuxへのMFA認証テスト (Linux)](#4-4-linuxへのmfa認証テスト-linux)
- [付録 - ドキュメントの注意点](#付録---ドキュメントの注意点)
  - [A-1. アプリケーション・ロール (AppRole)](#a-1-アプリケーションロール-approle)
  - [A-2. サインオン・ポリシー](#a-2-サインオンポリシー)

設定プロセスがやや長くて複雑であることは分かります。初めての場合すべての手順を通るのは、確かに楽ではありませんが、ぜひプロセスの最後まで付き合っていただければと思います。

# 1. 機密アプリケーションの構成 (IDCS)
OCIメニュー -> Profile -> "Service user Console"をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/c283213d-24d6-b15d-3518-9f3697477681.png", width="400">
画面下部の「Oracle Identity Cloud Service」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e59baaac-6393-4002-b948-0f970aa2e4fb.png", width="600">

IDCSメニュー -> Applications -> 「Add」ボタンをクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f56ca1e0-b76b-0296-6a8c-adb0421a6519.png", width="600">

「機密アプリケーション」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/7b3a6070-0829-6bdf-e6ad-350a9e03afc5.png", width="600">
「詳細」ページで、アプリケーションの名前を入力し「次」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/95a13fbe-f082-a028-1ce4-d1a8b7dd07a6.png",  width="600">
「クライアント」ページで、「このアプリケーションをクライアントとして今すぐ構成します」をクリックし、「クライアント資格証明」と「JWTアサーション」を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/92c72e9e-7fe2-5fa7-4ee4-6d1e65788fca.png", width="600">
下部の「Identity Cloud Service管理APIへのクライアント・アクセス権を付与します」セクションで、「追加」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/740189cb-7c25-c393-4577-025664636fc7.png", width="600">

「アプリケーション・ロールの追加」ダイアログ・ボックスで、次のロールを選択します:
- 自分 (Me)
- POSIXビューア (POSIX Viewer)
- サインイン (Signin)
- ユーザー管理者 (<font color=blue>User Administrator</font>)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6eff11ef-1a76-6e9d-7c7d-76d5f4b5462e.png", width="400">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/71ddf873-af9b-1837-0cff-411af9d03017.png", width="400">

「ユーザー管理者」を忘れず入れてください。そうしないと、グループ作成時、権限不足のエラーが発生しますので、ご注意ください。

追加後、「クライアント」ページの上部で「次」をクリックして続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/526696d7-43d6-8fb5-30a1-e1249433fa39.png)

残りのウィザード・ページで「次」をクリックし、「終了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/84555b86-3afe-2970-bc7e-2b54b3b127c2.png)
表示される「クライアントID」と「クライアント・シークレット」をメモしたら、ダイアログ・ボックスを閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2f21a89a-893f-daba-8fa0-39c95296a725.png)
「クライアントID」と「クライアント・シークレット」は、以下の画面でも確認できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/16451002-bad7-d8a2-3559-15dcc165166c.png", width="600">

アプリケーション作成後、アクティブ化（<font color=blue>Activate</font>）は必要です。ページの上部で、アプリケーション名の右にある「アクティブ化」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/bb6f91fb-4cee-c0dd-f8cb-40f5adc3e5fa.png", width="600">
「OK」をクリックし続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/461588a0-e351-404c-3f42-40176c039d4a.png", width="500">
アクティブ化の後、上部でメッセージが表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a50d8536-e289-9dd4-509a-205c2ae473c7.png", width="700">

__IDCSのURLの取得__
ここまで、アプリケーションの作成は完了ですが、次のステップに進む前、もう一つの準備作業があります。IDCSの管理コンソールを表示しているWEBブラウザから、IDCSインスタンスのURLを取得しておいてください。
例：`https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com` ("idcs-"の後ろに、32桁の英数字がある)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/10e664f5-9c07-4a88-4fef-54604b89dc97.png)

# 2. Linux-PAMのグループおよびユーザーの構成
## 2-1. アクセス・トークンの取得 (Linux)
ここから「STEP 2-5」まで、Linux環境で実施しますが、ログイン対象のLinuxサーバと違ってもOKです。この例では、同じLinuxサーバで実施します。

次のコマンドを実行し、トークンを取得します。トークンの有効期限は、<font color=blue>１時間</font> (3600秒)です。
`curl -k -X POST -u "client-id:client-secret" -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" "https://identity-cloud-service-instance-url/oauth2/v1/token"`

<font color=blue>client-id</font>と<font color=blue>client-secret</font>：[STEP 1](#1-機密アプリケーションの構成-idcs)で作成されたもの
`identity-cloud-service-instance-url`：Oracle IDCSインスタンスのURL

実施例：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/799ae345-89fc-a674-f0bc-a6c6bdc3aa37.png)

トークンを変数に格納したい場合は、以下のように実施すればOKです。
```bash
[opc@linux7-idcs-pam ~]$ client_id=a3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa7
[opc@linux7-idcs-pam ~]$ client_secret=39xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxc4
[opc@linux7-idcs-pam ~]$ base_url=https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com
[opc@linux7-idcs-pam ~]$ token=`curl -k -X POST -u "$client_id:$client_secret" -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__" "$base_url/oauth2/v1/token" | jq -r ".access_token"`
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4998  100  4938  100    60  42314    514 --:--:-- --:--:-- --:--:-- 42568
[opc@linux7-idcs-pam ~]$ echo $token
```

## 2-2. POSIX属性を持つグループの作成 (Linux)
- 1 ) 次のように`group.json`ファイルを作成します:
```bash
[opc@linux7-idcs-pam json]$ pwd
/home/opc/json
[opc@linux7-idcs-pam json]$ cat group.json
{ "schemas":
[ "urn:ietf:params:scim:schemas:core:2.0:Group",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:posix:Group" ],
"displayName": "posix group",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group": {
"description": "", "creationMechanism": "idcsui" },
"urn:ietf:params:scim:schemas:oracle:idcs:extension:posix:Group": {
"gidNumber": 11010 },
"members": [] }
[opc@linux7-idcs-pam json]$
```

<font color=blue>displayName</font>は、作成するグループの名前に設定されます。
<font color=blue>gidNumber</font>は、一意のグループID (gid) 番号に設定する必要があります。 Linuxで`getent group`コマンドを使用して、既存のグループgidを表示します。

- 2 ) 次のcurlコマンドを実行して、グループを作成します。
`curl -k -X POST -H "Content-Type: application/json" -H "Authorization: Bearer <token-string>" "https://identity-cloud-service-instance-url/admin/v1/Groups" -d '@group.json'`
　
`token-string`：[STEP 2-1](#2-1-アクセストークンの取得)で取得したOAuthアクセス・トークン
`identity-cloud-service-instance-url`：Oracle IDCSインスタンスのURL
__作成例__
事前に、トークンとIDCSインスタンスのURLを環境変数に保存しておきます。
```bash
[opc@linux7-idcs-pam json]$ curl -k -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" "$base_url/admin/v1/Groups" -d '@group.json' | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1408  100   966  100   442   4703   2151 --:--:-- --:--:-- --:--:--  4712
{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Group"
  ],
  "displayName": "posix group",
  "id": "75d2b7c650734fe282411fb7e1136924",
  "ocid": "ocid1.group.oc1..aaaaaaaag4hb4xfddcbqvpvoaxwipiiddtduvysmiu5w3ujw7hu65nuifaoa",
  "meta": {
    "created": "2022-09-28T07:11:15.008Z",
    "lastModified": "2022-09-28T07:11:15.008Z",
    "version": "45534f8f44fd48f38f254b22b925980a",
    "resourceType": "Group",
    "location": "https://<idcs_base_url>:443/admin/v1/Groups/75d2b7c650734fe282411fb7e1136924"
  },
  "idcsCreatedBy": {
    "value": "f4770613103f4de5b3ee2e3a38cff7b7",
    "type": "App",
    "display": "Linux-PAM",
    "$ref": "https://<idcs_base_url>:443/admin/v1/Apps/f4770613103f4de5b3ee2e3a38cff7b7"
  },
  "idcsLastModifiedBy": {
    "value": "f4770613103f4de5b3ee2e3a38cff7b7",
    "type": "App",
    "display": "Linux-PAM",
    "$ref": "https://<idcs_base_url>:443/admin/v1/Apps/f4770613103f4de5b3ee2e3a38cff7b7"
  }
}
[opc@linux7-idcs-pam json]$
```
グループ作成後、IDCSコンソールから確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8be3a2bc-3a92-dee4-2d39-e78dd471f651.png)

__トラブル・シューティング__
現象：グループ作成時、以下のようなエラーメッセージが表示される（"You are not allowed to perform any actions on this page."）。
原因と対策："<font color=blue>User Administrator</font>"のAppRoleが追加されていない。機密アプリケーションに、そのAppRoleを追加する。
```json
{
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:Error",
    "urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error"
  ],
  "detail": "You are not allowed to perform any actions on this page.",
  "status": "401",
  "urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error": {
    "messageId": "error.common.common.accessDenied"
  }
}
```
## 2-3. POSIX属性を持つユーザーの作成およびグループへの追加 (Linux)
- 1 ) 次のように`user.json`ファイルを作成します
```json
{
"password": "Securepasswd@1",
"userName": "userPosix",
"Name.givenName": "user",
"Name.familyName": "Posix",
"userType": "Employee",
"emails": [
{
"value": "<your_email_address>",
"type": "work",
"primary": true
},
{
"value": "<your_email_address>",
"type": "home"
}
],
"addresses": [
{
"type": "work",
"primary": true,
"streetAddress": "401 Island Parkway",
"locality": "Redwood Shores",
"region": "California",
"postalCode": "94065",
"country": "US",
"formatted": "userPosix"
}
],
"urn:ietf:params:scim:schemas:oracle:idcs:extension:posix:User": {
"homeDirectory": "/home/userPosix",
"loginShell": "/bin/bash",
"gecos": "userPosix 24855",
"uidNumber": 12001,
"gidNumber": 11010
},
"meta": {
"resourceType": "User"
},
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:posix:User"
]
}
```
<font color=blue>uidNumber</font>：Linuxの一意のユーザーID(uid)番号に設定する必要があります。 Linuxで`getent passwd`コマンドを使用して、既存のユーザーとそのuidを表示します。
<font color=blue>gidNumber</font>：上記作成したグループのIDです。
<font color=blue>userName</font>：IDCSユーザー名です。既存のユーザー名と重複したら、作成時、"User with the same userName already exists."というエラーメッセージが表示されます。

パスワード、ログインシェル、ホーム・ディレクトリなどの情報を適当に入力してください。

文字列`<your_email_address>`をユーザーの実際のメールアドレスで差し替えてください。後ほど、<font color=blue>受信確認</font>は必要です。

- 2 ) 次のcurlコマンドを実行してユーザーを作成し、グループに追加します。
`curl -k -X POST -H "Content-Type: application/json" -H "Authorization: Bearer <token-string>" "https://identity-cloud-service-instance-url/admin/v1/Users" -d '@user.json'`
　
`token-string`：[STEP 2-1](#2-1-アクセストークンの取得)で取得したOAuthアクセス・トークン
`identity-cloud-service-instance-url`：Oracle IDCSインスタンスのURL
__実施例__
```bash
[opc@linux7-idcs-pam json]$ curl -k -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" "$base_url/admin/v1/Users" -d '@user.json' | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2600  100  1800  100   800   7881   3502 --:--:-- --:--:-- --:--:--  7860
{
  "idcsCreatedBy": {
    "type": "App",
    "display": "Linux-PAM",
    "value": "f4770613103f4de5b3ee2e3a38cff7b7",
    "$ref": "https://<idcs_base_url>:443/admin/v1/Apps/f4770613103f4de5b3ee2e3a38cff7b7"
  },
  "id": "0ce45bdcfea34417bab3902b2b711c55",
  "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
    "isFederatedUser": false
  },
  "meta": {
    "created": "2022-09-28T07:47:16.800Z",
    "lastModified": "2022-09-28T07:47:16.800Z",
    "version": "b931cfed538047b29f1659ac254bdd08",
    "resourceType": "User",
    "location": "https://<idcs_base_url>:443/admin/v1/Users/0ce45bdcfea34417bab3902b2b711c55"
  },
  "active": true,
  "displayName": "user Posix",
...
```

ユーザ作成後、IDCSコンソールから確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/2a7f87f2-2e71-d555-485c-fe8ee3bc2ffb.png)

グループにユーザーが追加されるのを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8c615887-798c-3502-e33a-93622122985a.png)

## 2-4. ユーザ・アカウントのアクティブ化 (IDCS)
__受信メールの確認__
ユーザー・アカウントをアクティブ化する必要があります。届いたメールから実施してください。「<font color=blue>Activate Your Account</font>」をクリックしたら、IDCSのパスワード・リセット画面に遷移されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3cf3ab71-cb62-578e-0a52-2049e6f36a44.png", width="600">

__初期パスワードのリセット__
画面の指示により初期パスワードをリセットしてください。<strong>ログイン中のセッション</strong>がありましたら、ログアウトしてから実施してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/44dd11a2-e7f8-3655-1783-67f01f5d2b5e.png", width="500">

リセット完了後、新規アカウントでログインできます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9ce6157b-799b-780b-b675-aea4ecbc87b0.png", width="400">

リセット後、登録しているメールに以下のような通知メールが届きます。
「"Your password for XXXX account has been reset」

## 2-5. エンドポイントの検証（オプション）
このステップは、curlコマンドで作成済のユーザーとグループを表示します。正しく作成された場合、このステップを飛ばして、[STEP 3](#3-linux-pamのインストールおよび構成)へ進んでもOKです。

__ユーザー表示__
次のcurlコマンドを実行して、POSIX属性を持つユーザーを表示します。
`curl -k -X GET -H "Authorization: Bearer <token-string>" "https://identity-cloud-service-instance-url/admin/v1/Users"`

実施例：
```bash
[opc@linux7-idcs-pam json]$ curl -k -X GET -H "Authorization: Bearer $token" "$base_url/admin/v1/Users" | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4547  100  4547    0     0  39178      0 --:--:-- --:--:-- --:--:-- 39539
{
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:ListResponse"
  ],
  "totalResults": 3,
  "Resources": [
    {
      "urn:ietf:params:scim:schemas:oracle:idcs:extension:posix:User": {
        "homeDirectory": "/home/userPosix",
        "loginShell": "/bin/bash",
        "gecos": "userPosix 24855",
        "uidNumber": 12001,
        "gidNumber": 11010
      },
      "userName": "userPosix",
      "id": "0ce45bdcfea34417bab3902b2b711c55"
    },
...
```

__グループ表示__
次のcurlコマンドを実行して、POSIX属性を持つグループを表示します。
`curl -k -X GET -H "Authorization: Bearer <token-string>" "https://identity-cloud-service-instance-url/admin/v1/Groups"`

実施例：
```bash
[opc@linux7-idcs-pam json]$ curl -k -X GET -H "Authorization: Bearer $token" "$base_url/admin/v1/Groups" | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 52200    0 52200    0     0   391k      0 --:--:-- --:--:-- --:--:--  395k
{
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:ListResponse"
  ],
  "totalResults": 3,
  "Resources": [
...
    {
      "displayName": "posix group",
      "idcsLastModifiedBy": {
        "type": "App",
        "value": "f4770613103f4de5b3ee2e3a38cff7b7",
        "display": "Linux-PAM",
        "$ref": "https://<idcs_base_url>:443/admin/v1/Apps/f4770613103f4de5b3ee2e3a38cff7b7"
      },
      "idcsCreatedBy": {
        "type": "App",
        "display": "Linux-PAM",
        "value": "f4770613103f4de5b3ee2e3a38cff7b7",
        "$ref": "https://<idcs_base_url>:443/admin/v1/Apps/f4770613103f4de5b3ee2e3a38cff7b7"
      },
      "meta": {
        "version": "45534f8f44fd48f38f254b22b925980a",
        "created": "2022-09-28T07:11:15.008Z",
        "lastModified": "2022-09-28T07:11:15.008Z",
        "resourceType": "Group",
        "location": "https://<idcs_base_url>:443/admin/v1/Groups/75d2b7c650734fe282411fb7e1136924"
      },
      "id": "75d2b7c650734fe282411fb7e1136924",
      "ocid": "ocid1.group.oc1..aaaaaaaag4hb4xfddcbqvpvoaxwipiiddtduvysmiu5w3ujw7hu65nuifaoa",
      "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Group"
      ],
      "urn:ietf:params:scim:schemas:oracle:idcs:extension:dynamic:Group": {
        "membershipType": "static"
      }
    },
...
```

# 3. Linux-PAMのインストールおよび構成
## 3-1. Linux-PAMのダウンロード (IDCS)
IDCSメニュー -> Settings -> Downloads
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/b4710bc7-1b25-07a6-2799-e74db9616ba1.png)
「Identity Cloud Service Linux Pluggable Authentication Module (PAM) 」の行を選択し、ダウンロードボタンを押します。

ファイル名：`pam-oracle-cloud-22.3.77-2209010024.zip` (サイズ：42 MB)

## 3-2. Linux-PAMのインストール (Linux)
ここから、「STEP 3-5」までの各ステップは、ログイン対象のLinuxサーバで実施してください。

圧縮ファイルを対象のLinuxサーバにアップロードしてから、解凍します。
```bash
[opc@linux7-idcs-pam pam]$ pwd
/home/opc/pam
[opc@linux7-idcs-pam pam]$ ll
total 42036
-rw-rw-r--. 1 opc opc 43041913 Sep 26 07:49 pam-oracle-cloud-22.3.77-2209010024.zip
[opc@linux7-idcs-pam pam]$ unzip pam-oracle-cloud-22.3.77-2209010024.zip
Archive:  pam-oracle-cloud-22.3.77-2209010024.zip
   creating: el6/
  inflating: el6/authn-oracle-cloud-22.3.77_2209010024-1.el6.x86_64.rpm
  inflating: el6/pam_oracle-cloud-22.3.77_2209010024-1.el6.x86_64.rpm
  inflating: el6/pam_oracle-cloud-debuginfo-22.3.77_2209010024-1.el6.x86_64.rpm
  inflating: el6/authn-oracle-cloud-debuginfo-22.3.77_2209010024-1.el6.x86_64.rpm
  inflating: .devops_metadata.json
  inflating: pam_oracle_cloud_upgrade.sh
   creating: el7/
  inflating: el7/pam_oracle-cloud-debuginfo-22.3.77_2209010024-1.el7.x86_64.rpm
  inflating: el7/authn-oracle-cloud-debuginfo-22.3.77_2209010024-1.el7.x86_64.rpm
  inflating: el7/pam_oracle-cloud-22.3.77_2209010024-1.el7.x86_64.rpm
  inflating: el7/authn-oracle-cloud-22.3.77_2209010024-1.el7.x86_64.rpm
  inflating: FileInfo.json
[opc@linux7-idcs-pam pam]$
```

依存関係のある「curl」と「json-c Linux」がインストールされていることを確認します。この例は、OCI上のComputeインスタンス (Oracle Linux 7.9)を利用しているので、既にインストール済です。
```
[opc@linux7-idcs-pam pam]$ sudo yum list installed | grep curl.x86_64
curl.x86_64                           7.29.0-59.0.3.el7_9.1      @ol7_latest/7.9
libcurl.x86_64                        7.29.0-59.0.3.el7_9.1      @ol7_latest/7.9
python-pycurl.x86_64                  7.19.0-19.el7              @anaconda/7.9
[opc@linux7-idcs-pam pam]$ sudo yum list installed | grep json-c.x86_64
json-c.x86_64                         0.11-4.el7_0               @anaconda/7.9
[opc@linux7-idcs-pam pam]$
```

パッケージが所在するフォルダーに移動し、以下のコマンドで、インストールを実施します。
コマンド：`sudo yum -y install パッケージ名`
```bash
[opc@linux7-idcs-pam pam]$ cd el7
[opc@linux7-idcs-pam el7]$ ll
total 21072
-rw-r--r--. 1 opc opc 20245764 Sep  1 01:11 authn-oracle-cloud-22.3.77_2209010024-1.el7.x86_64.rpm
-rw-r--r--. 1 opc opc  1257644 Sep  1 01:11 authn-oracle-cloud-debuginfo-22.3.77_2209010024-1.el7.x86_64.rpm
-rw-r--r--. 1 opc opc    27240 Sep  1 01:11 pam_oracle-cloud-22.3.77_2209010024-1.el7.x86_64.rpm
-rw-r--r--. 1 opc opc    39768 Sep  1 01:11 pam_oracle-cloud-debuginfo-22.3.77_2209010024-1.el7.x86_64.rpm
[opc@linux7-idcs-pam el7]$
[opc@linux7-idcs-pam el7]$ sudo yum install -y pam_oracle-cloud-22.3.77_2209010024-1.el7.x86_64.rpm authn-oracle-cloud-22.3.77_2209010024-1.el7.x86_64.rpm
Loaded plugins: langpacks, osmsplugin, ulninfo
......
Installed:
  authn-oracle-cloud.x86_64 0:22.3.77_2209010024-1.el7                     pam_oracle-cloud.x86_64 0:22.3.77_2209010024-1.el7

Complete!
```

## 3-3. ウォレットの作成 (Linux)
Linux環境で、次のコマンドをrootユーザーとして実行します:
`walletMgr add <wallet_location> client_id <client_id>`
`walletMgr add <wallet_location> client_secret <client_secret>`

```bash
[opc@linux7-idcs-pam el7]$ sudo walletMgr add /etc/opc-wallet/ client_id a3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa7
wallet initialized successfully.
key client_id is added successfully in wallet.
[opc@linux7-idcs-pam el7]$ sudo walletMgr add /etc/opc-wallet/ client_secret 39xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxc4
wallet initialized successfully.
key client_secret is added successfully in wallet.
[opc@linux7-idcs-pam el7]$
```

## 3-4. Linux-PAMの構成 (Linux)
PAMは、LinuxのSSSDまたはNSCDサービスのいずれかを使用して構成されます。この例で、SSSDを利用します。

- 1 ) SSSDサービスがインストールされていない場合は、インストールする必要があります。（Oracle Linux 7.9には、デフォルトでインストールされていません。）
コマンド：`sudo yum -y install sssd` 
```bash
[opc@linux7-idcs-pam el7]$ sudo yum list installed | grep sssd
sssd-client.x86_64                    1.16.5-10.0.3.el7_9.13     @ol7_latest/7.9
[opc@linux7-idcs-pam el7]$ sudo yum install -y sssd
......
Complete!
[opc@linux7-idcs-pam el7]$ sudo yum list installed | grep sssd
python-sssdconfig.noarch           1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd.x86_64                        1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd-ad.x86_64                     1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd-client.x86_64                 1.16.5-10.0.3.el7_9.13     @ol7_latest/7.9
sssd-common.x86_64                 1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd-common-pac.x86_64             1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd-ipa.x86_64                    1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd-krb5.x86_64                   1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd-krb5-common.x86_64            1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd-ldap.x86_64                   1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
sssd-proxy.x86_64                  1.16.5-10.0.3.el7_9.13     @ol7_latest-x86_64
[opc@linux7-idcs-pam el7]$
```

- 2 ) システムの再起動時にサービスが開始するように構成されている必要があります。 
コマンド：`sudo systemctl enable sssd.service`或いは`sudo chkconfig sssd on`
```bash
[opc@linux7-idcs-pam el7]$ sudo systemctl enable sssd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/sssd.service to /usr/lib/systemd/system/sssd.service.
[opc@linux7-idcs-pam el7]$
```

- 3 ) プロパティSELINUXは、ファイル`/etc/selinux/config`で「permissive」または「disabled」として設定する必要があります。Oracle Linux 7.9には、デフォルトで「<font color=blue>enforcing</font>」となっているので、編集する必要があります。編集後の内容は、次のようです。
```bash
[opc@linux7-idcs-pam el7]$ sudo cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


[opc@linux7-idcs-pam el7]$
```

- 4 ) Linuxを再起動して、上記の変更を適用します（コマンドではなく、OCIコンソールから実施するのを推奨します）。

- 5 ) `/etc/sssd/sssd.conf`ファイルが存在し、権限は<font color=blue>600</font>であり、<font color=blue>root</font>ユーザーによって所有されていることを確認します。 Oracle Linux 7.9には、デフォルトで存在しないため、次のように新規作成して、600の権限を設定します。
```bash
[opc@linux7-idcs-pam ~]$ sudo vi /etc/sssd/sssd.conf
[opc@linux7-idcs-pam ~]$ sudo chmod 600 /etc/sssd/sssd.conf
[opc@linux7-idcs-pam ~]$ sudo ls -l /etc/sssd/sssd.conf
-rw-------. 1 root root 351 Sep 26 16:25 /etc/sssd/sssd.conf
[opc@linux7-idcs-pam ~]$ sudo cat /etc/sssd/sssd.conf
[sssd]
config_file_version = 2
services = nss, pam
domains = proxy_proxy
[nss]
fallback_homedir = /home/%u
default_shell = /bin/sh

[pam]
[domain/proxy_proxy]
re_expression = (?P<domain>[^\\]*?)\\?(?P<name>[^\\]+$)
auth_provider =  proxy
id_provider = proxy
proxy_lib_name = oracle_cloud
proxy_pam_target = sssd_proxy_oracle_cloud
enumerate =  false
cache_credentials = true
debug_level = 5
min_id = 500
[opc@linux7-idcs-pam ~]$
```

- 6 ) `/etc/pam.d/sssd_proxy_oracle_cloud`ファイルが存在し、<font color=blue>root</font>ユーザーによって所有されていることを確認します。Oracle Linux 7.9には、デフォルトで存在しないので、次のように新規作成します。
```bash
[opc@linux7-idcs-pam ~]$ sudo vi /etc/pam.d/sssd_proxy_oracle_cloud
[opc@linux7-idcs-pam ~]$ sudo ls -l /etc/pam.d/sssd_proxy_oracle_cloud
-rw-r--r--. 1 root root 192 Sep 26 16:35 /etc/pam.d/sssd_proxy_oracle_cloud
[opc@linux7-idcs-pam ~]$ sudo cat /etc/pam.d/sssd_proxy_oracle_cloud
auth          required      pam_oracle_cloud.so
account       required      pam_oracle_cloud.so
password      required      pam_oracle_cloud.so
session       required      pam_oracle_cloud.so
[opc@linux7-idcs-pam ~]$
```

- 7 ) `/etc/pam.d/sshd`を編集し、pam_oracle_cloudモジュールを追加します。
コマンド：`sudo vi /etc/pam.d/sshd`
追加内容：`auth       sufficient   pam_oracle_cloud.so`
追加位置：次のように
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/92b33676-801a-2473-baea-211a930b03dc.png)

- 8 ) `/etc/ssh/sshd_config`を編集して、マルチファクタ認証を使用できるようにsshdを構成します。
コマンド：`sudo vi /etc/ssh/sshd_config`
編集方法：`ChallengeResponseAuthentication`を"yes"に設定する
編集前："no"となっている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/5511a235-2ad6-5fbb-d634-9ed93cebaa70.png)
編集後："no"の行をコメントし、"yes"の行をアンコメントする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/17bfcf95-91e4-db2f-f0d4-aebb73f8d06c.png)

- 9 ) `/etc/opc.conf`を編集して、プラグインとOracle IDCSとの対話を許可します。
コマンド：`sudo vi /etc/opc.conf`
編集前：
```bash
[opc@linux7-idcs-pam ~]$ sudo cat /etc/opc.conf 
base_url=<provide idcs base url>

scope=urn:opc:idm:__myscopes__

wallet_location=<provide wallet locaton>

#0 for default or none. 1 for error. 2 for info. 3 for debug.
log_level=0

#default path is /var/log/opc/pam_nss.log. Can be modified.
log_file_path=/var/log/opc/pam_nss.log
[opc@linux7-idcs-pam ~]$ 
```
編集後：
```bash
[opc@linux7-idcs-pam ~]$ sudo cat /etc/opc.conf
#This is sample format of opc.conf file, please use the correct information to configure this file.
#Enter the Oracle Identity Cloud Service tenancy base url.
base_url = https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com
#There is no need to change value of scope.
scope = urn:opc:idm:__myscopes__
#Enter the location of the wallet.
wallet_location = /etc/opc-wallet
#Enter the log level, this is optional and the default is 0, which means no log. 0 - None, 1 - Error, 2 - Info, 3 - Debug.
log_level = 1
#Enter the log file path, this is optional and defaults to /var/log/opc/pam_nss.log
log_file_path = /var/log/opc/pam_nss.log
[opc@linux7-idcs-pam ~]$
```
この例では、Proxyサーバを使用しません。Proxyサーバを経由し、Oracle IDCSに接続する場合、以下の行を追加してください。
```bash
#Enter the value for proxy usage to connect to Oracle Identity Cloud Service. Set the value to 1 to use a proxy and 0 to not use a proxy.
use_proxy=1
#Enter the information below if you set: use_proxy=1
#Enter the proxy url
proxy_url=http://proxy.example.com
#Enter the proxy port
proxy_port=80
#Enter the username to connect to the proxy url.
proxy_username=username_example
#Enter the password of username to connect proxy url.
proxy_pwd=pwd_example
```

- 10 ) <font color=blue>sssd</font>と<font color=blue>sshd</font>を再起動します。
コマンド：
`sudo authconfig --enablesssd --enablesssdauth --enablemkhomedir --enablepamaccess --update`
`sudo systemctl restart sshd.service`或いは`sudo service sshd restart`
`sudo systemctl restart sssd.service`或いは`sudo service sssd restart`
```bash
[opc@linux7-idcs-pam ~]$ sudo authconfig --enablesssd --enablesssdauth --enablemkhomedir --enablepamaccess --update
[opc@linux7-idcs-pam ~]$ sudo systemctl restart sshd.service
[opc@linux7-idcs-pam ~]$ sudo systemctl restart sssd.service
[opc@linux7-idcs-pam ~]$
```

## 3-5. Linuxへの認証テスト (Linux)
以下のように、PAMがインストールされているLinuxサーバにSSH接続します。プロンプトが表示されたら、IDCSユーザーのパスワードを入力し、ログインできることを確認します。

初回ログインの時、ホーム・ディレクトリが作成されます。
```bash
[opc@linux8 ~]$ ssh -l userPosix <IP_Address_or_Host_Name>
password:
Creating directory '/home/userPosix'.
[userPosix@linux7-idcs-pam ~]$ pwd
/home/userPosix
[userPosix@linux7-idcs-pam ~]$
```

# 4. MFA認証の有効化
## 4-1. MFAの設定 (IDCS)
IDCSメニュー -> Security -> MFA
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/b447fa8f-4002-c44b-0197-82f901701e93.png", width="300">
MFA設定画面で、認証ファクタを指定できます（この例では<font color=blue>SMS</font>を利用します）。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d591355b-99c4-7d99-d132-49e9934574eb.png", width="500">

## 4-2. サインオン・ポリシーの作成 (IDCS)
IDCSメニュー -> Security -> Sing-On Policies
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4f3d1fa2-48f1-3d69-8796-f0ff86358529.png", width="300">
この例では、デフォルトのポリシーを利用しないので、「Add」ボタンをクリックし、ポリシーを新規作成します。既存のポリシーを利用したい場合、その中にルールを追加してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/d499f8af-6f98-f43d-88eb-828552087d6d.png)
「ポリシー」名を入力し、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f3e746fd-5ba5-30d2-d146-0118a9c95fbf.png)
「Add」ボタンをクリックし、ルールを新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/81cc3160-c9aa-21c2-3264-078be094c991.png)

ルール名を入力し、作成したグループを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ec86f0f7-8872-6c1a-dcc4-b5eb1840434c.png)
「アクション」で、「アクセス」が「許可」に設定されていることを確認し、「追加ファクタの要求」チェック・ボックスを選択します。 「登録」を「オプション」に変更し、「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/9c81db07-7823-0590-e10f-73bd72ee50c2.png)

ルール追加後、「次へ」をクリックし、「アプリケーション」タブに移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e1de084c-429d-86dc-e4ec-9aa9fc67863a.png)

「アプリケーション」タブで、"Assign"ボタンをクリックし、アプリケーションを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/48699436-b410-577b-20b4-a83f62e70d28.png", width="600">
「アプリケーションの割当て」画面より、作成したアプリケーション「Linux-PAM」を選択します。「Finish」ボタンをクリックし、作成を完了します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/38b00162-620b-9629-3d08-e9432323af17.png", width="600">

ポリシー作成後、アクティブ化（<font color=blue>Activate</font>）を実施する必要があります。メニューから「Activate」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a3408286-2232-c244-49f1-7abeacdd47ca.png", width="600">
確認画面で、「OK」をクリックし続行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f26fff94-d1e8-4624-75cc-4132cf81cf61.png", width="500">
アクティブ化されたら、アイコンの色が変わります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/43cef544-7447-dad8-7d5f-bce97abbfc84.png", width="600">

## 4-3. IDCSログイン画面でMFA認証の有効化 (IDCS)
LinuxサーバにSSHログインする前、IDCSのログイン画面でMFA認証を有効化にします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ea77b6dc-4d63-739a-f889-d13993a1b567.png", width="500">
「Enable Secure Vaerification」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/092eabd9-dfb5-a917-a99b-3a6ba45ebec4.png", width="500">
認証方法を指定します（この例ではSMSを利用するから、電話番号を選択）。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/978b5cfc-1d59-df4f-a93b-557df10ee6c6.png", width="500">
国番号を選択し、電話番号を入力してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/23bd29b1-7799-f2d0-6470-898722bfe745.png", width="500">
SMSの受信を確認し、暗証番号を入力します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/aaae3676-050c-b0ae-aad8-1abb48fb750d.png", width="500">
ここまで、電話番号の登録は完了です。Linuxサーバへログインする時、MFA認証が動作できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/76049d13-de9d-4f0d-05d6-ee7aafec8875.png", width="500">

## 4-4. LinuxへのMFA認証テスト (Linux)
IDCSのパスワードを入力したら、MFA認証のメッセージがプロンプトされました。SMSで受信された暗証番号を再入力してから、無事にログインできました。
```bash
[opc@linux8 ~]$ ssh -l userPosix <IP_Address_or_Host_Name>
password:
Complete 2-Step Verification
An SMS that contains a passcode was sent to <Mobile_Phone_Number>. Enter the passcode or use the following option, and then press Enter:
        r - Resend passcode
Enter the passcode or an option (r):

Last login: Wed Sep 28 15:15:55 2022 from XXX.XXX.XXX.XXX
[userPosix@linux7-idcs-pam ~]$
```

大変お疲れ様です。無事に完了できれば、おめでとうございます！

# 付録 - ドキュメントの注意点
自分の検証結果は、オフィシャル・ドキュメントの記述と異なる箇所がありますので、参考情報として残しておきます。

## A-1. アプリケーション・ロール (AppRole)
機密アプリケーションを作成する時、アプリケーション・ロールの追加は必要です。ドキュメントに、下記の<strong>３つのロール</strong>となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/50bb7eea-1e71-02e2-2ba3-f0017d2d3590.png)

自分の検証結果により、<strong>ユーザー管理者</strong>のロールを追加しないと、権限不足のようなエラーが発生します。エラー・メッセージの詳細は、[STEP 2-2](#2-2-posix属性を持つグループの作成-linux)の「トラブル・シューティング」に記載していますので、ご参考ください。

## A-2. サインオン・ポリシー
MFA認証を有効化するため、サインオン・ポリシーの編集（作成）は必要です。ドキュメントに「<strong>デフォルト・サインオン・ポリシーのみ</strong>」と書いていますけど、自分の検証結果により、新規作成のポリシーでもMFAの認証が動作できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/20b9861a-50e5-d85b-ed9d-ec3b5832d0d0.png)

以上です。

__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)

----
__オラクル・ドキュメント__
[Linux-PAMを管理するための一般的なワークフロー](https://docs.oracle.com/cd//E83857_01/paas/identity-cloud/uaids/typical-workflow-managing-linux-pam.html)
[Linux PAMのインストールおよび構成](https://docs.oracle.com/ja-jp/iaas/Content/Identity/linuxpam/overview.htm)

__MOS (My Oracle Support)__
[Is Oracle IDCS Linux Pluggable Authentication Module (PAM) Supported/Certified To Install On Oracle Linux 8? (Doc ID 2811742.1)](https://support.oracle.com/knowledge/Oracle%20Cloud/2811742_1.html)
[Security Of Connection From Linux To IDCS Using Pam Authenticator Plugin (Doc ID 2769057.1)](https://support.oracle.com/knowledge/Oracle%20Cloud/2769057_1.html)