前回でCockpitをTLS接続に変更したときに証明書を作ったので、その証明書を使って389DSの接続もTLSにしておきます。
前回
基本は389DSとSSSDの設定の変更になりますが、Sambaも1行だけ修正が入ります。
なおオレオレルートCA証明書はOSに登録して丸っと信頼させることもできるようですが、お勉強のためアプリ個別に登録するようにしています。
といってもLDAP認証はSSSDが中継するので、今回はSSSDにルートCA証明書を登録するだけでした。
389DSに証明書を登録する
作業ディレクトリは389DSのインスタンス名と同じです。前回作ったserver.crtとserver.keyをコピーしておきましょう。
$ cd /etc/dirsrv/インスタンス名
$ cp 証明書置き場/server.crt .
$ cp 証明書置き場/server.key .
サーバに証明書を登録するときにPINを聞かれますがこれは作業ディレクトリの中にpin.txt
という名前で入っています。(Software) Token:
の後ろの文字列を使ってください。
$ cat pin.txt
Internal (Software) Token:xxx...
サーバ証明書の登録ですが登録前に変換が必要になります。前回作った証明書はテキスト(pem形式)なのですが、389DSへの登録はバイナリ形式の方を使います。
コマンドを実行するとPINを聞かれるので先ほど拾ったPINを使います。
# p12に変換(パスワードを設定しろと言われる)
$ openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -name <登録名>
# 登録(PINの後↑で設定したパスワードを聞かれる)
$ pk12util -i server.p12 -d . -n <登録名>
登録ができたか確認します。
$ certutil -L -d .
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
Self-Signed-CA CT,,
Server-Cert u,u,u
<登録名> u,u,u
登録名を失敗したりでやり直したいとき。
$ certutil -D -n <登録名> -d .
証明書を使うよう設定する
サーバ/サーバ設定/セキュリティのサーバ証明書の所に登録名のエントリが増えているのでそれを設定します。
そのまま下にスクロールするとセキュアな接続を要求する
とあるのでチェックを入れて設定の保存ボタンを押します。
サーバを再起動しろと言われるのでしておきましょう。
$ systemctl restart dirsrv@<インスタンス名>
TLS無しでつなごうとするとrequires a secure connection
と怒られるようになります。
というわけでもうポートは閉じておきましょう。
$ firewall-cmd --remove-service=ldap --permanent
$ firewall-cmd --reload
SSSDでTLS対応する
ldap接続でTLSを使わない(never)にしていたのを、ldaps接続でTLSを使う(demand)にします。
ldapのURIは前回はローカルホストのIPアドレスでしたが、TLSで接続する場合証明書と接続先ホスト名が違うとエラーになる場合があるので、URIにはホスト名の設定にしておきました。
併せてオレオレルートCA証明書も設定しておきます。
$ cp 証明書置き場/rootCA.crt /etc/sssd/
#ldap_uri = ldap://127.0.0.1
#ldap_tls_reqcert = never
ldap_uri = ldaps://minipc.home:636
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/sssd/rootCA.crt
再起動したらTLS接続に切り替わります。
$ sss_cache -E
$ systemctl restart sssd
Sambaの設定
backendの接続先を変更します。やはりURIはTLSに登録したホスト名にしています。
……証明書にlocalhsotとか::1を追加しておけばよかったかも O(:3 )~ ('、3_ヽ)_
# ldapsに変更
# passdb backend = ldapsam:ldap://localhost
passdb backend = ldapsam:ldaps://minipc.home:636
# 以下変更なし
ldap ssl = no
ldap admin dn = cn=Directory Manager
ldap suffix = dc=home
ldap user suffix = ou=Users,dc=home
ldap ssl
の設定はデフォルトがstart tls
っぽく消したらネゴシエーションに失敗します😇
ldaps接続自体がTLS接続なのでStartTLSの平文接続からTLSに昇格させる仕組みは不要です。なのでldap ssl = no
の行はそのままおいておきます。
コンフィグを編集したら再起動しておきましょう。
$ systemctl restart smb
OpenLDAPのコマンドにも対応しておく
ldapsearchとか使いたいやん_(:3」∠)_
$ cp 証明書置き場/rootCA.crt /etc/openldap/certs/rootCA.crt
# ldapsearchを実行するユーザーが使うので一般ユーザーも読み取り可能にしておく
# 証明書(公開鍵)なので見られてもOK
$ chmod 644 /etc/openldap/certs/rootCA.crt
TLS_REQCERT
をdemand
にするかコメントアウトして、ldap.conf
のTLS_CACERT
にオレオレルートCA証明書を設定しておきます。
TLS_REQCERT demand
TLS_CACERT /etc/openldap/certs/rootCA.crt
これでladapsearchコマンドも使えるはずです。ただしTLSアクセスするときは証明書に登録したhost名でないとエラーがでます。
$ ldapsearch -x -H ldaps://minipc.home:636 -b "" -s base
他のLinuxPCからログインできるか試してみる
Fedora atomic(Sway Spin)からLDAPのユーザーでログインできるか試してみます。
まずはSSSDのインストール
$ rpm-ostree install sssd sssd-tools sssd-ldap
$ systemctl reboot
sssd.confの設定
[sssd]
services = nss, pam
domains = default
[domain/default]
ldap_uri = ldaps://minipc.home:636
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/sssd/rootCA.crt
ldap_search_base = ou=Users,dc=home
ldap_default_bind_dn = cn=Directory Manager
id_provider = ldap
auth_provider = ldap
ldapアクセス用のパスワード設定
$ sss_obfuscate --domain=default
SSSDの起動
# パーミッションは600か640で
$ chmod 640 /etc/sssd/sssd.conf
$ systemctl start sssd
PAMに適用
$ authselect select sssd
$ systemctl reboot
LDAP経由でシステムにいないユーザーでログインできた!
けど、Swayでfootが上手く動きませんでした/(^o^)\
証明書の更新
証明書の期限切れやホスト名を変更したときは証明書を更新する必要があります。
CSR((サーバー証明書署名要求)の更新
RootCAの署名をもらうときに使うファイルで、LDAPサーバのホスト名の変更等があった場合は作り直します。
[req]
req_extensions = v3_req
prompt = no
distinguished_name = req_distinguished_name
[req_distinguished_name]
C = JP
ST = Shimane
L = Masuda
O = MyHome
CN = minipc.home
[v3_req]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = minipc.home
DNS.2 = minipc-wifi.home
IP.1 = 192.168.x.x
$ openssl req -new -key server.key -out server.csr -config san.cnf
Server証明書の更新
RootCAの署名をもらってServer証明書を作成します。
$ openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 365 -sha256 -extfi
le san.cnf -extensions v3_req
386DSで使うp12形式に変換します。
$ openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -name minipc-server
389DSに登録した証明書を更新
一旦古い証明書を削除してから登録し直します。削除しないと二重で登録されます。
# 確認
$ certutil -L -d /etc/dirsrv/<インスタンス名>
# 削除
$ certutil -D -n <登録名> -d /etc/dirsrv/<インスタンス名>
# 登録
$ pk12util -i server.p12 -d /etc/dirsrv/<インスタンス名> -n <登録名>
サーバを再起動すれば更新したものが有効になります。
$ systemctl restart dirsrv@<インスタンス名>