LoginSignup
0
0

More than 1 year has passed since last update.

自宅サーバー構築譚:LDAPサーバー OpenLDAP・SSSD を利用したログイン・Xubuntu 22.04 LTS

Posted at

能書き

自宅サーバー構築譚:基本構想に基づく自宅サーバー構築、Ubuntu22.04LTSインストールその2の続きです。Hyper-Vに構築したクライアントマシンもどき(LubuntuではなくてXubuntu)も使用します。

LDAP と SSSD でログイン設定しようとした所、クライアントが Lubuntu の場合は上手くいきませんでした。ユーザー名を自由入力できないのでは手も足も出ません。

そこでクライアントマシンを Xubuntu にしたら上手くいったので、その手順を記録します。と言っても今までの記事からの抜粋ですが。記事2つに分散してしまったので、必要な情報だけをここに纏めます。

目標

  • SSSD を利用したログイン
  • その為の認証局の信頼

参考文献

スナップショット

クライアントマシンでもスナップショットだいじ。超だいじ

クライアント
sudo zfs snapshot tank/ROOT/ubuntu@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_SSSD
sudo zfs snapshot tank/ROOT/ubuntu/var/lib/apt@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_SSSD
sudo zfs snapshot tank/ROOT/ubuntu/var/lib/dpkg@$(date +%Y%m%d_%H%M%S)_before_OpenLDAP_SSSD

SSSD インストールと設定

インストール

クライアントマシンに関連パッケージをインストールします。

クライアント
sudo apt install -y sssd-ldap

/etcは下記のように変化しました。

クライアント
$ sudo svn st /etc
$ sudo svn st /etc
?       /etc/apparmor.d/force-complain/usr.sbin.sssd
?       /etc/apparmor.d/local/usr.sbin.sssd
?       /etc/apparmor.d/usr.sbin.sssd
M       /etc/cups/subscriptions.conf
M       /etc/cups/subscriptions.conf.O
?       /etc/default/sssd
M       /etc/group
M       /etc/gshadow
?       /etc/init.d/sssd
M       /etc/ld.so.cache
?       /etc/logrotate.d/sssd-common
M       /etc/nsswitch.conf
M       /etc/pam.d/common-account
M       /etc/pam.d/common-auth
M       /etc/pam.d/common-password
M       /etc/pam.d/common-session
?       /etc/pam.d/sssd-shadowutils
M       /etc/passwd
?       /etc/rc0.d/K01sssd
?       /etc/rc1.d/K01sssd
?       /etc/rc2.d/S01sssd
?       /etc/rc3.d/S01sssd
?       /etc/rc4.d/S01sssd
?       /etc/rc5.d/S01sssd
?       /etc/rc6.d/K01sssd
M       /etc/shadow
?       /etc/sssd
?       /etc/systemd/system/multi-user.target.wants/sssd.service
?       /etc/systemd/system/sssd.service.wants
M       /etc/zfs/zpool.cache

これらの検討は、今回はしません。面倒臭いし。このまま Subversion 登録します。

クライアント
sudo svn st /etc | grep "^?" | cut -b9- | xargs -I{} sudo find {} -type f -or -type d -or -type l | xargs -t sudo svn add
sudo svn ci /etc -m"SSSD initial settings"

初期設定

/etc/sssd/sssd.confを作成し、パーミッションを 0600、所有権を root:root にします。
なお LDAP サーバー は secondary.home とします。

クライアント
cat <<___ | sudo tee /etc/sssd/sssd.conf >/dev/null
[sssd]
config_file_version = 2
domains = home

[domain/home]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldaps://secondary.home
cache_credentials = True
ldap_search_base = dc=home
___
sudo chmod 600 /etc/sssd/sssd.conf

この後に SSSD サービスを開始する事を忘れないように。

クライアント
sudo systemctl start sssd

起動を確認します。

クライアント
systemctl status sssd

最後に、ホームディレクトリの自動作成を有効にします。

クライアント
sudo pam-auth-update --enable mkhomedir

オレオレ認証局を信頼

鍵の配置

秘密鍵と公開鍵は、既に作ってあるという事にします。作り方は以前の記事を参照して下さい。

この手順に従うと、各鍵の配置は下記のようになります。

認証局:

  • 秘密鍵 /opt/CA/demoCA/pki/private/ca.key
  • 公開鍵 /opt/CA/demoCA/pki/ca.crt

サーバーマシン secondary.home の証明書:

  • 秘密鍵 /opt/CA/demoCA/pki/private/secondary.home.key
  • 公開鍵 /opt/CA/demoCA/pki/issued/secondary.home.crt

クライアントへ送付する鍵はca.crt(認証局の公開鍵)のみになります。

オレオレ認証局の公開鍵を送付

サーバー側での操作です。

ca.crt(認証局の公開鍵)を送信用ディレクトリ/srv/publickey内の、クライアントから操作できるサブディレクトリに置きます。ついでにファイル名を調整。

サーバー
sudo cp -p /opt/CA/demoCA/pki/ca.crt /srv/publickey/publickey/demoCA.crt

cp コマンドに-pオプションを付けると、更新日時などを元ファイルと同一にしてくれます。逆に指定しない場合は、コピーした日時が更新日時になってしまいます。大抵は問題無いと思いますけども。私は気になるので。

publickey ユーザーが操作できるように権限を調整します。

サーバー
cd /srv/publickey/publickey/
sudo chgrp publickey demoCA.crt
sudo chmod g+r demoCA.crt

権限を確認。

サーバー
# ls -l demoCA.crt
-rw-r----- 1 root publickey 1184 Mar 10 09:05 demoCA.crt

ここからクライアント側の操作になります。以前、公開鍵送付専用の sftp ユーザーを作成しましたので、それを使用してサーバー上の鍵publickey/demoCA.crtを持ってきます。

まずは適当な作業用ディレクトリに移動して、それから sftp を起動。持ってきた後はクライアント側の責任で削除しておきましょう。公開鍵取得の印の代わりです。

クライアント
cd
sftp publickey@secondary
クライアント:sftp操作
cd publickey
get demoCA.crt
rm demoCA.crt
exit

ファイルの権限は取得したユーザーになっているので、これを一般的な/etc内ファイルの権限に変えておきます。

クライアント
sudo chown root:root demoCA.crt
sudo chmod 644 demoCA.crt

確認。

クライアント
$ ls -l demoCA.crt
-rw-r--r-- 1 root root 1184 Apr  2 09:00 demoCA.crt

オレオレ認証局を信頼する

Ubuntuにおいて証明書の信頼とは、下記手順で操作する事、らしいです。

クライアント
sudo mkdir /usr/share/ca-certificates/demoCA
sudo mv demoCA.crt /usr/share/ca-certificates/demoCA/
echo demoCA/demoCA.crt | sudo tee -a /etc/ca-certificates.conf >/dev/null
sudo update-ca-certificates

上記操作によって必要なファイルが/etc/ssl/certsディレクトリに設定されます。

クライアント
ls -l /etc/ssl/certs/ | grep demoCA
ls -l /etc/ssl/certs/ca-certificates.crt

Ubuntu では、信頼する認証局の一覧表は既に設定済のようです。

クライアント
grep TLS_CACERT /etc/ldap/ldap.conf

実行結果はこんな風になります。

クライアント
$ grep TLS_CACERT /etc/ldap/ldap.conf
TLS_CACERT      /etc/ssl/certs/ca-certificates.crt

クライアントマシン再起動

ここまで出来たらマシンを再起動します。GUI で操作するも良し、コマンドラインでrebootするも良し。

動作確認

参考文献の LDAP へのユーザー登録手順に従っていると、ユーザー taro パスワード Ma9H%6jg となっています。これでログインできる事を確認します。

オンラインでログイン

最初に、今まで通りのユーザーでログインできる事を確認して下さい。ここがしくじっていると目も当てられません。

それから taro を認識している事を、下記コマンドで確認しましょう。

クライアント
getent passwd taro
id taro

成功すれば下記のような結果になります。

クライアント
$ getent passwd taro
taro:*:10000:10000:taro:/home/taro:/bin/bash
$ id taro
uid=10000(taro) gid=10000(taro) groups=10000(taro)

コンソールでログイン認証を確認。

クライアント
sudo login

ここまで成功すれば大丈夫でしょう。一度ログアウトして、GUIで taro がログインできる事を確認します。

まずユーザー名、またはその右の▼ボタンをクリック。

image.png

表示されるドロップダウンメニューから「Other...」を選択。

image.png

ユーザー名とパスワードを入力して「Log In」ボタン、または Enter キーを押します。

image.png

ログイン成功。

image.png

一旦ログアウトします。

オフラインでログイン

SSSD が正しく利いていれば、LDAP サーバーとの通信が途絶してもログインできる筈です。

ログアウトした状態で、ホストマシンの操作などで通信を切断します。それからログインを試みてみましょう。

ここでは Hyper-V ゲスト設定の操作で、ネットワークを切断します。

Hyper-V ゲストマシンのメニュー > ファイル > 設定...
設定画面 > ハードウェア > ネットワークアダプター
仮想スイッチのドロップダウンメニューから「接続されていません」を選択して OK ボタン。

image.png

Xubuntu のログイン画面で、もう一度ログインします。

image.png

ログインできました!

ここで Xubuntu はネットワークが切断されている事を確認してみます。
Ctrl+Alt+T でターミナルを開いて、下記のコマンドを実行します(172.16.1.3 は LDAP サーバーの IP アドレス)

クライアント
ping 172.16.1.3

実行結果はこうなる筈。

クライアント
$ ping 172.16.1.3
ping: connect: Network is unreachable

確かにネットワークは接続されていません!
以上で、一度ログインしてしまえばオフラインでもログインできる事を確認できました。

仕舞い

動作確認できたので/etcを Subversion コミットします。

クライアント
sudo svn st /etc

実行結果。

クライアント
$ sudo svn st /etc
[sudo] password for admin:
M       /etc/ca-certificates.conf
M       /etc/cups/subscriptions.conf
M       /etc/cups/subscriptions.conf.O
M       /etc/pam.d/common-session
?       /etc/ssl/certs/b4da1397.0
M       /etc/ssl/certs/ca-certificates.crt
?       /etc/ssl/certs/demoCA.pem
?       /etc/sssd/sssd.conf
M       /etc/zfs/zpool.cache

新規ファイルを追加してコミットします。

クライアント
sudo svn st /etc | grep "^?" | cut -b9- | xargs -I{} sudo find {} -type f -or -type d -or -type l | xargs -t sudo svn add
sudo svn ci /etc -m"SSSD setting"

これで、クライアントマシンに SSSD が出来ました。ユーザーを LDAP で管理して、オフラインでもログインできるようになりました。やったね:thumbsup_tone1:

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