私は最近、小規模オフィスネットワークの集中認証を処理するために新しいSamba4 Active Directoryをセットアップしました。このサーバーにはpostgresql-9.5インスタンスもあり、ADに対して認証しようとしています。認証(これが私に必要なものです)そして承認(ユーザーが認証されると、これはすべて postgresql 内で処理されると思いますが)、問題が発生しています。
ADは現時点ではむしろ平凡で、このハウツー何人かのユーザーを設定しましたが、基本的な Kerberos 認証は機能しているようです ( で完了、 で検証済み)。同様に、も機能します。kinit [email protected]
klist
smbclient //myhost.samdom.mydomain.tld/netlogon -U 'myusername'
ローカルホストは samba AD に解決され、DNS 転送は上流に正しく送信されます。これらは機能します:
$ host -t SRV _ldap._tcp.samdom.mydomain.tld
$ host -t SRV _kerberos._udp.samdom.mydomain.tld
$ host -t A myhost.samdom.mydomain.tld
ところで: ubuntu-16.04 サーバー、postgresql-9.5、samba-4.3.9
質問:
AD に対する認証を有効にするために、samba や postgres の設定で何が欠けているのでしょうか?
DBセットアップ
postgresql との基本的な接続は良好なようです。適切なインターフェイス (今のところすべて) でリッスンしており、ユーザーはpostgres
問題なくローカルにアクセスできます。簡単なデータベースをセットアップし、以下から出力しました\list
。
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+------------+----------+-------------+-------------+-----------------------
pgtest2 | myusername | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
ユーザーがリストされている(このクエリ):
User name | User ID | Attributes
------------+---------+-------------------
myusername | 16384 | create database
postgres | 10 | superuser, create+
| | database
認証失敗
しかし、コンソールで試してみると:
$ psql -h myhost.samdom.mydomain.tld -U [email protected] -d pgtest2
psql: GSSAPI continuation error: Unspecified GSS failure. Minor code may provide more information
GSSAPI continuation error: No Kerberos credentials available
から/var/log/postgresql/postgresql-9.5-main.log
:
[email protected]@pgtest2 LOG: could not receive data from client: Connection reset by peer
[email protected]@pgtest2 FATAL: GSSAPI authentication failed for user "[email protected]"
[email protected]@pgtest2 DETAIL: Connection matched pg_hba.conf line 92: "host all all 0.0.0.0/0 gss krb_realm=SAMDOM.MYDOMAIN.TLD include_realm=1 map=krb"
設定ファイル
適切かつ必要と思われる設定ファイル(部分):
/etc/postgresql/9.5/main/pg_hba.conf
:local all postgres peer local all all peer host all all 0.0.0.0/0 gss krb_realm=SAMDOM.MYDOMAIN.TLD include_realm=1 map=krb host all all 127.0.0.1/32 md5 host all all ::1/128 md5
/etc/postgresql/9.5/main/postgres.conf
:krb_server_keyfile = '/var/lib/postgresql/9.5/main/postgres.keytab'
(キータブは で生成され、モードは 400、所有者は です。)
samba-tool domain exportkeytab postgres.keytab -U postgres/[email protected]
postgres:postgres
/etc/samba/smb.conf
:# Global parameters [global] workgroup = SAMDOM realm = SAMDOM.MYDOMAIN.TLD netbios name = MYHOST interfaces = lo eno1 bind interfaces only = Yes server role = active directory domain controller dns forwarder = 11.22.33.254 idmap_ldb:use rfc2307 = yes tls enabled = yes tls keyfile = tls/key.pem tls certfile = tls/cert.pem tls cafile = tls/ca.pem [netlogon] path = /var/lib/samba/sysvol/samdom.mydomain.tld/scripts read only = No [sysvol] path = /var/lib/samba/sysvol read only = No
答え1
最近、私はSamba4 ADドメインコントローラに対するPostgressユーザーの認証という課題に直面し、解決策を見つけました。このページではご覧のとおり、この場合の pg_hba.conf エントリは次のようになります。
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="" ldapsuffix="@SAMDOM.MYDOMAIN.TLD"
または、DOMAIN\username の形式でユーザーを認証する場合:
host all all 0.0.0.0/0 ldap ldapserver=localhost ldapprefix="SANDOM\" ldapsuffix=""
上で述べたように、認証メカニズムは postgres 内で実行されるため、ロールは AD に加えてデータベースにも作成する必要があります。次に、postgresql を再起動して接続を試みます。
欠点は、エラーが発生することです。より強力な認証が必要" が postgres ログに記録されるため、グローバル設定で以下を追加して、samba conf ファイルで強力な LDAP 認証を無効にする必要があります。
ldap server require strong auth = No