資格情報を使用してLDAPからアカウントとして実行されるようにサービスを設定する

資格情報を使用してLDAPからアカウントとして実行されるようにサービスを設定する

私は明らかなことを見落としているように感じます。

私の目標systemdサービスは、システム起動時にLDAPサービスアカウントを使用して実行されます。これにより、LDAPでアカウントを無効にすると、次回サービスを開始しようとしたときにユーザーが認証されなかったために失敗します。 (結局、このサービスでチケットを使用するにはKerberosを設定する必要がありますが、まだ設定していませんが、これは全体的な問題かもしれません。)

ユーザーのログインを制御するために使用する機能的なLDAPがあるため、私のユーザーは自分のユーザーであり、cn=cbrand,ou=people,dc=jcolebrand,dc=infoネットワークに接続されているコンピューターからそのユーザーとしてログインできます。 LDAPを介してsudoerを設定したため、自分とシステムの他のユーザーがログインしてsudoコマンドを実行できますが、ログイン権限を持つ他の人はsudoコマンドを実行できません。 LDAPを使用して自分のサーバー上のさまざまなアプリケーションに認証する他のユーザーがいます(したがって、システムログイン権限はありませんが、パスワードを持つデフォルトアカウントはあります)。

システムの読者/作成者/スーパーユーザーを処理するようにldap2pgを設定しました。これを使用して、LDAPインスタンスに接続されているネットワーク上で実行されるサービスへのアクセスを制限したいと思います。

一部のサービスサービスでは、LDAPでアカウントを定義できるようにしたいと思います(したがって、またはcn=gogs,ou=services,dc=jcolebrand,dc=info同じことを期待しましたcn=jellyfin,ou=services,dc=jcolebrand,dc=info)。欲しいもの避ける実行する必要があるのはサーバーごとに管理する必要があるため、実行するローカルユーザー/グループを手動で作成する必要があります。代わりに、ldap2pgを使用してデータベースへのアクセスを取り消したり、LDAPを使用してディレクトリレベルでログイン/アクセスを拒否したりできます。

ローカルアカウントを作成するには、そのUser=ディレクティブを使用するようにサービスターゲットを変更するだけですが、これはLDAPへの接続には適していないようです。特にパスワードを強制的に適用したい場合(パスワードを回転させるには自動化が必要な場合があります)、パスワードサービスアカウントは別の話のようですが、そうではありません。私はこれについて十分に知らず、「明らかな」ことを見落としているのだろうか。

部分的な構成部分に役立つ場合は、次のようにします。

cat /etc/openldap/ldap.conf
<snip>
BASE dc=jcolebrand,dc=info
<snip>

これがWindows Active Directoryドメインの場合は、gMSAアカウントを使用するとスムーズになります。または、ディレクトリにパスワードを使用してユニバーサルサービスアカウントを作成することもできますが、Fedora / Linuxでこれを行う方法がわかりません。 。特に、Windowsの世界でこのステップを複製する方法がわかりません。

Windows - > services.mscを開く - >サービスを探す - >プロパティに移動 - >必要に応じて、セキュリティタブでユーザーの資格情報をgMSAまたはアカウント/パスワードに設定します。

systemd文書を見ると、LoadCredentialに関する文書がありますが、LDAPアカウントで実行するためのパスワードを提供するのには適していないようです(文書の作成方法)。

パスワードのないLDAPエントリを持ってobjectClass applicationProcessサービス設定を設定してから、追加の考えUser="cn=gogs,ou=services,dc=jcolebrand,dc=info"を中断する必要があると思っていますか?

注:最終的に同じサービスが同じ情報を使用してpostgresと通信したいのですが、これにはsystemdサービスを使用して構成できる適切な接続文字列と環境ファイルのみが必要になる場合があります。これに関する案内も歓迎します。

答え1

Linuxシステムユーザー(LDAPに1つ)を作成しobjectClass: posixAccount、単にsystemdデバイスファイルを次のように設定します。User=< uid value from the LDAP record

PAMが正しく設定されたら、systemdが実行可能なプロセスを作成できるuidとlinuxのユーザー名を入力する必要があります。それにもかかわらず、カーネルがプロセスを追跡するには、メインchにLinux UIDを持つサービスユーザーが必要であるため、使用を避けることはできないようです。objectClass: posixAccount

LDAP レコードは次のとおりです。

dn: cn=gogs,ou=services,dc=jcolebrand,dc=info
objectClass: posixAccount
uid: gogs
cn: gogs
loginShell: /bin/nologin
uidNumber: 9999
gidNumber: 9999
homeDirectory: /path/to/gogs/install
description: gogs service user

信じるobjectClass applicationProcess必要に応じてこの項目に追加することもできます。

その後、gogs systemdデバイスを直接編集するか、上書き(EGを含むsudo systemctl edit gogs.service)を作成して次を追加できます。

[Service]
User=gogs

(systemdデバイスで利用objectClass: posixGroup可能なgogsのエントリが必要な場合があります)Group=gogs

あなたの質問の次の部分が混乱しています。

User=ディレクティブを使用するようにサービスターゲットを変更してください。しかし、これは特にパスワードを強制したい場合、LDAPへの接続には正しくないようです。

そして

systemdドキュメントを見るとLoadCredentialドキュメントが見えますが、LDAPアカウントで実行するパスワードを提供するのには適していないようです。

Linuxでは、サービスアカウントは通常持つ私の経験上、パスワード。彼らはただ1人のユーザーであり、サービスプロセスはそのユーザーとして実行されます。データベース認証はパスワード文字列(LDAP展開を使用できます)またはKerberosを介して(おそらく?サービスがチケットをどのように受け取るのかわかりません)を使用して実行できますが、サービスPOSIXアカウントにはパスワードがありません。 1つはログインしています。

関連情報