本ブログは、オラクル・クラウドの個人ブログの1つです。
初めに
この記事では、次のような課題を解決するため、実現方法を紹介したいと思います。
- 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)
- 2. Linux-PAMのグループおよびユーザーの構成
- 3. Linux-PAMのインストールおよび構成
- 4. MFA認証の有効化
- 付録 - ドキュメントの注意点
設定プロセスがやや長くて複雑であることは分かります。初めての場合すべての手順を通るのは、確かに楽ではありませんが、ぜひプロセスの最後まで付き合っていただければと思います。
1. 機密アプリケーションの構成 (IDCS)
OCIメニュー -> Profile -> "Service user Console"をクリック
画面下部の「Oracle Identity Cloud Service」をクリックします。
IDCSメニュー -> Applications -> 「Add」ボタンをクリック
「機密アプリケーション」をクリックします。
「詳細」ページで、アプリケーションの名前を入力し「次」をクリックします。
「クライアント」ページで、「このアプリケーションをクライアントとして今すぐ構成します」をクリックし、「クライアント資格証明」と「JWTアサーション」を選択します。
下部の「Identity Cloud Service管理APIへのクライアント・アクセス権を付与します」セクションで、「追加」をクリックします。
「アプリケーション・ロールの追加」ダイアログ・ボックスで、次のロールを選択します:
「ユーザー管理者」を忘れず入れてください。そうしないと、グループ作成時、権限不足のエラーが発生しますので、ご注意ください。
追加後、「クライアント」ページの上部で「次」をクリックして続行します。
残りのウィザード・ページで「次」をクリックし、「終了」をクリックします。
表示される「クライアントID」と「クライアント・シークレット」をメモしたら、ダイアログ・ボックスを閉じます。
「クライアントID」と「クライアント・シークレット」は、以下の画面でも確認できます。
アプリケーション作成後、アクティブ化(Activate)は必要です。ページの上部で、アプリケーション名の右にある「アクティブ化」をクリックします。
「OK」をクリックし続行します。
アクティブ化の後、上部でメッセージが表示されます。
IDCSのURLの取得
ここまで、アプリケーションの作成は完了ですが、次のステップに進む前、もう一つの準備作業があります。IDCSの管理コンソールを表示しているWEBブラウザから、IDCSインスタンスのURLを取得しておいてください。
例:https://idcs-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com
("idcs-"の後ろに、32桁の英数字がある)
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-idとclient-secret:STEP 1で作成されたもの
identity-cloud-service-instance-url
:Oracle IDCSインスタンスのURL
トークンを変数に格納したい場合は、以下のように実施すれば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-string
:STEP 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]$
トラブル・シューティング
現象:グループ作成時、以下のようなエラーメッセージが表示される("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-string
:STEP 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",
...
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
「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
追加位置:次のように
-
8 )
/etc/ssh/sshd_config
を編集して、マルチファクタ認証を使用できるようにsshdを構成します。
コマンド:sudo vi /etc/ssh/sshd_config
編集方法:ChallengeResponseAuthentication
を"yes"に設定する
編集前:"no"となっている。
編集後:"no"の行をコメントし、"yes"の行をアンコメントする。
-
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 ) sssdとsshdを再起動します。
コマンド:
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」ボタンをクリックし、ポリシーを新規作成します。既存のポリシーを利用したい場合、その中にルールを追加してください。
「ポリシー」名を入力し、「次へ」をクリックします。
「Add」ボタンをクリックし、ルールを新規作成します。
ルール名を入力し、作成したグループを選択してください。
「アクション」で、「アクセス」が「許可」に設定されていることを確認し、「追加ファクタの要求」チェック・ボックスを選択します。 「登録」を「オプション」に変更し、「保存」をクリックします。
ルール追加後、「次へ」をクリックし、「アプリケーション」タブに移動します。
「アプリケーション」タブで、"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つのロールとなります。
自分の検証結果により、ユーザー管理者のロールを追加しないと、権限不足のようなエラーが発生します。エラー・メッセージの詳細は、STEP 2-2の「トラブル・シューティング」に記載していますので、ご参考ください。
A-2. サインオン・ポリシー
MFA認証を有効化するため、サインオン・ポリシーの編集(作成)は必要です。ドキュメントに「デフォルト・サインオン・ポリシーのみ」と書いていますけど、自分の検証結果により、新規作成のポリシーでもMFAの認証が動作できます。
以上です。
関連記事
オラクル・クラウドの個人ブログ一覧
オラクル・ドキュメント
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)