LoginSignup
3
3

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

Last updated at Posted at 2022-10-06

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

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

ご存じの方がいらっしゃると思いますが、Oracle IDCSは、新しいサービスのIdentiy Domainへの移行予定があります。本記事は、従来のIDCSの設定方法を提供させていただきます。次回は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がHTTPS暗号化チャネルを使用してIDCSと通信します。

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

検証環境

項目 内容 コメント
関連サービス Oracle IDCS
OCI Compute (VM) Oracle Linux 7.9
リージョン 東京

この検証には、どのようなスキルは必要
以下のような基本レベルであればOKです。

  • Oracle IDCSについて基本的な知識を持っている(ユーザ、グループ、アプリケーション、AppRoleなどの概念を理解している)。
  • Linux OSの基本操作ができる (ssh, yum, curl, vi などのコマンドができる)。

作業ステップ

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

1. 機密アプリケーションの構成 (IDCS)

OCIメニュー -> Profile -> "Service user Console"をクリック

画面下部の「Oracle Identity Cloud Service」をクリックします。

IDCSメニュー -> Applications -> 「Add」ボタンをクリック

「機密アプリケーション」をクリックします。

「詳細」ページで、アプリケーションの名前を入力し「次」をクリックします。

「クライアント」ページで、「このアプリケーションをクライアントとして今すぐ構成します」をクリックし、「クライアント資格証明」と「JWTアサーション」を選択します。

下部の「Identity Cloud Service管理APIへのクライアント・アクセス権を付与します」セクションで、「追加」をクリックします。

「アプリケーション・ロールの追加」ダイアログ・ボックスで、次のロールを選択します:

  • 自分 (Me)
  • POSIXビューア (POSIX Viewer)
  • サインイン (Signin)
  • ユーザー管理者 (User Administrator)

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

追加後、「クライアント」ページの上部で「次」をクリックして続行します。
image.png

残りのウィザード・ページで「次」をクリックし、「終了」をクリックします。
image.png
表示される「クライアントID」と「クライアント・シークレット」をメモしたら、ダイアログ・ボックスを閉じます。
image.png
「クライアントID」と「クライアント・シークレット」は、以下の画面でも確認できます。

アプリケーション作成後、アクティブ化(Activate)は必要です。ページの上部で、アプリケーション名の右にある「アクティブ化」をクリックします。

「OK」をクリックし続行します。

アクティブ化の後、上部でメッセージが表示されます。

IDCSのURLの取得
ここまで、アプリケーションの作成は完了ですが、次のステップに進む前、もう一つの準備作業があります。IDCSの管理コンソールを表示しているWEBブラウザから、IDCSインスタンスのURLを取得しておいてください。
例:https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com ("idcs-"の後ろに、32桁の英数字がある)
image.png

2. Linux-PAMのグループおよびユーザーの構成

2-1. アクセス・トークンの取得 (Linux)

ここから「STEP 2-5」まで、Linux環境で実施しますが、ログイン対象のLinuxサーバと違ってもOKです。この例では、同じLinuxサーバで実施します。

次のコマンドを実行し、トークンを取得します。トークンの有効期限は、1時間 (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"

client-idclient-secretSTEP 1で作成されたもの
identity-cloud-service-instance-url:Oracle IDCSインスタンスのURL

実施例:
image.png

トークンを変数に格納したい場合は、以下のように実施すればOKです。

[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ファイルを作成します:
[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]$

displayNameは、作成するグループの名前に設定されます。
gidNumberは、一意のグループ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-stringSTEP 2-1で取得したOAuthアクセス・トークン
    identity-cloud-service-instance-url:Oracle IDCSインスタンスのURL
    作成例
    事前に、トークンとIDCSインスタンスのURLを環境変数に保存しておきます。
[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

トラブル・シューティング
現象:グループ作成時、以下のようなエラーメッセージが表示される("You are not allowed to perform any actions on this page.")。
原因と対策:"User Administrator"のAppRoleが追加されていない。機密アプリケーションに、そのAppRoleを追加する。

{
  "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ファイルを作成します
{
"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"
]
}

uidNumber:Linuxの一意のユーザーID(uid)番号に設定する必要があります。 Linuxでgetent passwdコマンドを使用して、既存のユーザーとそのuidを表示します。
gidNumber:上記作成したグループのIDです。
userName:IDCSユーザー名です。既存のユーザー名と重複したら、作成時、"User with the same userName already exists."というエラーメッセージが表示されます。

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

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

  • 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-stringSTEP 2-1で取得したOAuthアクセス・トークン
    identity-cloud-service-instance-url:Oracle IDCSインスタンスのURL
    実施例
[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

グループにユーザーが追加されるのを確認します。
image.png

2-4. ユーザ・アカウントのアクティブ化 (IDCS)

受信メールの確認
ユーザー・アカウントをアクティブ化する必要があります。届いたメールから実施してください。「Activate Your Account」をクリックしたら、IDCSのパスワード・リセット画面に遷移されます。

初期パスワードのリセット
画面の指示により初期パスワードをリセットしてください。ログイン中のセッションがありましたら、ログアウトしてから実施してください。

リセット完了後、新規アカウントでログインできます。

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

2-5. エンドポイントの検証(オプション)

このステップは、curlコマンドで作成済のユーザーとグループを表示します。正しく作成された場合、このステップを飛ばして、STEP 3へ進んでもOKです。

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

実施例:

[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"

実施例:

[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
「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サーバにアップロードしてから、解凍します。

[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 パッケージ名

[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>

[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
[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
[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には、デフォルトで「enforcing」となっているので、編集する必要があります。編集後の内容は、次のようです。
[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ファイルが存在し、権限は600であり、rootユーザーによって所有されていることを確認します。 Oracle Linux 7.9には、デフォルトで存在しないため、次のように新規作成して、600の権限を設定します。

[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ファイルが存在し、rootユーザーによって所有されていることを確認します。Oracle Linux 7.9には、デフォルトで存在しないので、次のように新規作成します。
[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

  • 8 ) /etc/ssh/sshd_configを編集して、マルチファクタ認証を使用できるようにsshdを構成します。
    コマンド:sudo vi /etc/ssh/sshd_config
    編集方法:ChallengeResponseAuthenticationを"yes"に設定する
    編集前:"no"となっている。
    image.png
    編集後:"no"の行をコメントし、"yes"の行をアンコメントする。
    image.png

  • 9 ) /etc/opc.confを編集して、プラグインとOracle IDCSとの対話を許可します。
    コマンド:sudo vi /etc/opc.conf
    編集前:

[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 ~]$ 

編集後:

[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に接続する場合、以下の行を追加してください。

#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 ) sssdsshdを再起動します。
    コマンド:
    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
[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ユーザーのパスワードを入力し、ログインできることを確認します。

初回ログインの時、ホーム・ディレクトリが作成されます。

[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

MFA設定画面で、認証ファクタを指定できます(この例ではSMSを利用します)。

4-2. サインオン・ポリシーの作成 (IDCS)

IDCSメニュー -> Security -> Sing-On Policies

この例では、デフォルトのポリシーを利用しないので、「Add」ボタンをクリックし、ポリシーを新規作成します。既存のポリシーを利用したい場合、その中にルールを追加してください。
image.png
「ポリシー」名を入力し、「次へ」をクリックします。
image.png
「Add」ボタンをクリックし、ルールを新規作成します。
image.png

ルール名を入力し、作成したグループを選択してください。
image.png
「アクション」で、「アクセス」が「許可」に設定されていることを確認し、「追加ファクタの要求」チェック・ボックスを選択します。 「登録」を「オプション」に変更し、「保存」をクリックします。
image.png

ルール追加後、「次へ」をクリックし、「アプリケーション」タブに移動します。
image.png

「アプリケーション」タブで、"Assign"ボタンをクリックし、アプリケーションを選択します。

「アプリケーションの割当て」画面より、作成したアプリケーション「Linux-PAM」を選択します。「Finish」ボタンをクリックし、作成を完了します。

ポリシー作成後、アクティブ化(Activate)を実施する必要があります。メニューから「Activate」をクリックします。

確認画面で、「OK」をクリックし続行します。

アクティブ化されたら、アイコンの色が変わります。

4-3. IDCSログイン画面でMFA認証の有効化 (IDCS)

LinuxサーバにSSHログインする前、IDCSのログイン画面でMFA認証を有効化にします。

「Enable Secure Vaerification」をクリックします。

認証方法を指定します(この例ではSMSを利用するから、電話番号を選択)。

国番号を選択し、電話番号を入力してください。

SMSの受信を確認し、暗証番号を入力します。

ここまで、電話番号の登録は完了です。Linuxサーバへログインする時、MFA認証が動作できます。

4-4. LinuxへのMFA認証テスト (Linux)

IDCSのパスワードを入力したら、MFA認証のメッセージがプロンプトされました。SMSで受信された暗証番号を再入力してから、無事にログインできました。

[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)

機密アプリケーションを作成する時、アプリケーション・ロールの追加は必要です。ドキュメントに、下記の3つのロールとなります。
image.png

自分の検証結果により、ユーザー管理者のロールを追加しないと、権限不足のようなエラーが発生します。エラー・メッセージの詳細は、STEP 2-2の「トラブル・シューティング」に記載していますので、ご参考ください。

A-2. サインオン・ポリシー

MFA認証を有効化するため、サインオン・ポリシーの編集(作成)は必要です。ドキュメントに「デフォルト・サインオン・ポリシーのみ」と書いていますけど、自分の検証結果により、新規作成のポリシーでもMFAの認証が動作できます。
image.png

以上です。

関連記事
オラクル・クラウドの個人シリーズ・ブログ


オラクル・ドキュメント
Linux-PAMを管理するための一般的なワークフロー
Linux PAMのインストールおよび構成

MOS (My Oracle Support)
Is Oracle IDCS Linux Pluggable Authentication Module (PAM) Supported/Certified To Install On Oracle Linux 8? (Doc ID 2811742.1)
Security Of Connection From Linux To IDCS Using Pam Authenticator Plugin (Doc ID 2769057.1)

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3