Ubuntu Weekly Recipe

第856回 GoogleアカウントでUbuntuにログインする方法

春は異動の季節ですね。メンバーの入れ替えがあると、面倒なのがサーバーのアカウント管理です。アカウントを発行しなければ新メンバーがサーバーに入れませんし、離脱したメンバーのアカウントを放置すると、セキュリティ的なリスクにもなりかねません。皆さんの職場や学校でも、メンバーの異動や新人の加入といった対応に追われているのではないでしょうか。ですがサーバーが1台や2台であればともかく、数十台規模で開発用サーバーがあるような環境では、いちいちアカウントの作成や削除などはやっていられないでしょう。

そこで企業では、Active DirectoryやOpenLDAPなどを利用して、アカウントを一元管理するのが定番です。第774回でも、Entra ID(旧Azure AD)を使ってUbuntuにログインする方法を紹介しました。

774回では、Entra IDとの連携にaad-authというモジュールを利用していました。ですが現在のUbuntuでは、Entra ID以外のクラウドIDプロバイダーにも対応できるよう、authdという認証デーモンを使うように変更されています。authdでは、特定のクラウドIDプロバイダー向けのコードを「ブローカー」として実装しています。認証デーモン部分は共通化しつつ、ブローカーを切り替えることで、クラウドIDプロバイダーを使い分けられるというわけです。

2025年3月現在、Entra ID用のブローカーと、Google IAM用のブローカーが提供されています。Googleアカウント(Gmailアカウント)は多くの人が持っているでしょうし、企業であればGoogle Workspaceを導入しているケースも珍しくないでしょう(少なくともEntra IDよりは多くの人が利用できるでしょう⁠⁠。そこでauthdとこのブローカーを使い、GoogleアカウントでUbuntuにログインしてみましょう。

Google Auth Platformの準備

まずGoogle IAMに新しいアプリケーションを登録する必要があります。Google Cloudのコンソールにログインしてください。そして新しいプロジェクトを作成して切り替えます。ここでは「google-iam」というプロジェクトを作成しました。

図1 Google IAMを使うため、新しいプロジェクトを作成した

次に左上のナビゲーションメニューから、⁠APIとサービス⁠⁠→⁠認証情報」を開きます。ここでOAuth 2.0クライアントを追加するのですが、その前にOAuth同意画面を構成する必要があります。⁠同意画面を構成」をクリックしてください。

図2 ⁠同意画面」を構成をクリック

OAuthの概要画面が開きますので、⁠開始」をクリックします。

図3 Google Auth Platformの構成をはじめる

まずアプリ情報を入力します。任意のアプリ名と、問い合わせに利用する自分のメールアドレスを入力してください。

図4 アプリ情報を入力する

続いて利用できる対象を選択します。⁠内部」を選択すると、Google Workspaceの組織に閉じて利用できます。対して「外部」を選択すると、Googleアカウントを持つすべてのユーザーが利用できます。Google Workspaceで全社員にアカウントを発行している企業であれば(そしてそのアカウントでGoogle IAMを構成しているのであれば⁠⁠、内部を選択しておくべきでしょう。

当然ですが、個人のGmailアカウントを使っている場合は、⁠外部」しか選択できません。この場合、世界中のGoogleユーザーが認証できてしまうため、後述のブローカーの設定でallowed_usersをきちんと設定する必要があります。

図5 対象を選択する

連絡先を入力します。自分のメールアドレスを入力しておきましょう。

図6 連絡先を入力する

最後に、Google APIサービスのユーザーデータポリシーに同意します。チェックを入れて「作成」をクリックしてください。

図7 構成の完了

ここまで完了したら、先ほどの「認証情報」の画面に戻りましょう。

図8 ⁠APIとサービス⁠⁠→⁠認証情報」の画面に戻る

ここで「認証情報を作成⁠⁠→⁠OAuthクライアントID」をクリックします。

図9 OAuth 2.0クライアントを作成する

「アプリケーションの種類」「テレビと入力が限られたデバイス」を選択してください。⁠名前」には任意の名前を入力します。クライアントを識別するために使われるため、わかりやすい名前をつけておきましょう。

図10 アプリケーションの種類と名前を入力する

これでOAuthクライアントが作成されます。クライアントIDとクライアントシークレットは後ほど使いますので、控えておきましょう。

図11 クライアントIDとシークレットを控えておく

authdとブローカーのインストール

これでクラウドIDプロバイダー側の設定は完了です。続いてUbuntu側を設定しましょう。今回はUbuntu 24.04 LTSのサーバー版を例に、コンソールログインとSSHログインを行う方法を解説します。

以下のコマンドでPPAを追加して、authdパッケージをインストールします。

$ sudo add-apt-repository ppa:ubuntu-enterprise-desktop/authd
$ sudo apt install -y authd

続いてGoogle IAM用のauthdブローカーをインストールします。こちらはsnapを使います。

$ sudo snap install authd-google

Google IAM用ブローカーの設定

以下のコマンドを実行して、authdが使用するブローカーを特定するために必要なファイルを、/etc以下に配置してください。

$ sudo mkdir -p /etc/authd/brokers.d/
$ sudo cp /snap/authd-google/current/conf/authd/google.conf /etc/authd/brokers.d/

続いてブローカーを設定します。/var/snap/authd-google/current/broker.confというファイルをテキストエディタで編集してください。まず「oidc」セクションを以下のように、先ほど控えたクライアントIDとクライアントシークレットに置き換えます。

[oidc]
issuer = https://accounts.google.com
client_id = クライアントID
client_secret = クライアントシークレット

「users」セクションには、ユーザーに関する設定を記述します。

「home_base_dir」はユーザーのホームディレクトリのベースとなるディレクトリを指定します。デフォルトで「/home」が指定されてますので、特に変更する必要はありません。⁠/var」以下など、特定のディレクトリを使いたい場合は、適宜変更してください。

「owner」にはそのサーバーの所有者であるユーザーを設定します。以下のように自分のアカウントを設定しておくとよいでしょう。ただしデフォルトでは、最初にログインしたユーザーがownerとして自動的に登録されます。そのためownerは指定しなくても構いません。

owner = mizuno@example.com

「allowed_users」には、実際にログインが可能なユーザーを列挙します。ここにはカンマ区切りでアカウント名を列挙します。またアカウント名以外にも、⁠OWNER」「ALL」というキーワードが指定できます。前述の「owner」にユーザーを指定している場合は、ここにも「OWNER」を指定してください。⁠ALL」は文字通り、クラウドIDプロバイダーによって認証されたすべてのユーザーです。Google Workspaceを使って内部ユーザーのみにアプリケーションを公開している場合は、そもそも認証をパスできるのが組織内の人間に限られているわけですから、ALLを指定してしまうのが手っとり早いでしょう。対して先にも述べましたが、個人のGoogleアカウントを使い、外部向けにアプリケーションを公開している場合は、アカウントを個別に許可するようにしてください。

allowed_users = OWNER,user1@example.com,user2@example.com
または
allowed_users = ALL

「ssh_allowed_suffixes」には、SSHログインを許可するユーザーアカウントのドメイン名を設定します。SSHについては後述しますが、ここに列挙されていないドメインのアカウントでSSHログインしようとすると、authdではなくローカルアカウントでの認証が行われます(そして当然そんなユーザーは存在しないのでログインできません⁠⁠。Google Workspaceを使っているのであれば、その自社ドメインを指定しておくといいでしょう。

ssh_allowed_suffixes = @example.com

設定が完了したら、authdとブローカーを再起動しましょう。

$ sudo systemctl restart authd
$ sudo snap restart authd-google

authdを使ったログイン

設定が完了したので、Ubuntuにコンソールからログインしてみましょう。ユーザー名にはGoogleアカウント名を入力します。すると以下のように、⁠local」「Google」というプロバイダーの選択肢が表示されます。⁠2」を入力して、Googleを選択しましょう。

図12 プロバイダーはGoogleを選択する

初回ログイン時は、以下のようにログイン用のコードが表示されます。QRコードを読み込むか、デバイスの接続のページアクセスして、表示されたログインコードを入力してください。

図13 デバイスの接続ページにログインコードを入力することを要求される
図14 スマホでQRコードを読み込むと、https://www.google.com/deviceが開かれるので、ログインコードを入力する。
図15 デバイスの接続が完了した状態

なおGoogle Workspaceの内部のみに公開しているアプリに対し、一般のGmailアカウントでアクセスしようとすると、このようにアクセスが拒否されます。

図16 アクセスが拒否された例

デバイスの接続が完了してしばらく待つと、Ubuntuのコンソール画面にローカルパスワードの作成プロンプトが表示されます。一般的なユーザーの作成時と同様に、パスワードを2回入力してください。

図17 ローカルパスワードを設定する

これでログインは完了です。なお以後は、ログイン時にGoogleアカウントを指定すると、ローカルパスワードの入力のみでログインできるようになります。

図18 GoogleアカウントでUbuntuにログインできた

SSHを経由したログイン

サーバーにコンソールから直接ログインすることはあまりなく、SSHを使うのが基本でしょう。というわけで、SSHでもauthdを使えるようにします。/etc/ssh/sshd_config.d/authd.confというファイルを、以下の内容で作成してください。

UsePAM yes
KbdInteractiveAuthentication yes

SSHサーバーを再起動します。

$ sudo systemctl restart ssh

また前述の通り、/var/snap/authd-google/current/broker.confの「ssh_allowed_suffixes」に、ログインを許可するドメインを、カンマ区切りで列挙しておいてください。

GoogleアカウントでSSHログインする際は、sshコマンドに以下のようにユーザー名を指定してください。⁠@」がふたつ入っているため少し違和感がありますが、これで問題なく動作します。初回ログイン時はQRコードが表示され、デバイスの接続を促されます。既に一度ログイン済みのアカウントの場合は、ローカルパスワードを入力してログインが可能です。

$ ssh username@gmail.com@サーバーのIPアドレス

今回はauthdを利用して、GoogleアカウントでUbuntuヘログインする方法を紹介しました。Google Workspaceを導入している組織では、サーバーのアカウントをより効率的に管理できるでしょう。アカウントの追加に頭を悩ませているのであれば、ぜひ試してみてください。

おすすめ記事

記事・ニュース一覧