web-dev-qa-db-ja.com

security / sssdを使用してActive DirectoryをFreeBSD 10.0と統合する方法は?

Kerberos TGTが機能するADバックエンドでsssdを使用して、FreeBSD 10.0のWindows Server 2012 R2で実行されているActive Directoryからユーザーを認証するために必要な手順は何ですか?

9

すべてがすぐに機能するようにするには、いくつかの注意が必要な考慮事項があります。 FreeBSDは、現時点ではsssdバージョン1.9.6のみをサポートしています。したがって、エンタープライズプリンシパル名はサポートされていません。

一致しないUPNを持つドメインがある場合、ログイン中に失敗します。これは、プロセス中にKerberos認証が失敗するためです。FreeBSDがKerberosでエンタープライズプリンシパル名をサポートしている場合でも、sssdはこのケースを処理できません。

したがって、実際のバージョンのsssdでは、同じドメイン名内にユーザープリンシパル名を含めることが制限されています。次に例を示します。

Domain Name = example.com
NetBIOS Name = EXAMPLE
User Principal Name:
[email protected] sAMAccountName: username

これを知っていれば、FreeBSDでADからユーザーを認証する手順を説明できます。

1. Kerberosを構成する

ファイルを作成する/etc/krb5.conf以下のコンテンツを含む:

[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_realm = true
    dns_lookup_kdc = true
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = yes

2. Samba 4.1をインストールして、ドメインに参加するように構成する

Samba 4.1をインストールします。

$ pkg install samba41

ファイルを作成する/usr/local/etc/smb4.conf以下のコンテンツを含む:

[global]
    security = ads
    realm = EXAMPLE.COM
    workgroup = EXAMPLE

    kerberos method = secrets and keytab

    client signing = yes
    client use spnego = yes
    log file = /var/log/samba/%m.log

管理者のKerberosチケットを要求します。

$ kinit Administrator

次に、ドメインに参加してキータブを作成します

$ net ads join createupn=Host/[email protected] -k
$ net ads keytab create -k

3. Kerberosサポート付きのsssdパッケージとCyrus SASLをインストールします

必要なパッケージをインストールします。

$ pkg install sssd cyrus-sasl-gssapi

ファイルを編集/usr/local/etc/sssd/sssd.confこの設定に一致させるには:

[sssd]
    config_file_version = 2
    services = nss, pam
    domains = example.com

[nss]

[pam]

[domain/example.com]
    # Uncomment if you need offline logins
    #cache_credentials = true

    id_provider = ad
    auth_provider = ad
    access_provider = ad
    chpass_provider = ad

    # Comment out if the users have the Shell and home dir set on the AD side
    default_Shell = /bin/tcsh
    fallback_homedir = /home/%u

    # Uncomment and adjust if the default principal SHORTNAME$@REALM is not available
    #ldap_sasl_mech = GSSAPI
    #ldap_sasl_authid = [email protected]

4. nsswitch.confにsssdサポートを追加します

ファイルを編集/etc/nsswitch.confこの設定に一致させるには:

group: files sss
passwd: files sss

5. PAMを構成して、sssd認証を許可し、ホームディレクトリの作成を処理する

ホームディレクトリ作成用のオプションパッケージをインストールします。

$ pkg install pam_mkhomedir

この設定と一致するように、必要なPAMレルムを変更します。

auth            sufficient      /usr/local/lib/pam_sss.so
account         required        /usr/local/lib/pam_sss.so        ignore_unknown_user
session         required        /usr/local/lib/pam_mkhomedir.so  mode=0700
session         optional        /usr/local/lib/pam_sss.so
password        sufficient      /usr/local/lib/pam_sss.so        use_authtok

6. SASL対応のOpenLDAPクライアントに切り替えます

$ pkg remove -f openldap-client
$ pkg install openldap-sasl-client

7.最後に、すべてが機能していることを確認します

$ getent passwd <username>
14

ここではどのKerberosを使用していますか?組み込みのものか、MITのsecurity/krb5ですか?

Sssdをインストールするとき、security/krb5がインストールされている必要があります。現時点では、FreeBSDでまだ実験的と見なされています。したがって、この質問。

'getent'コマンドを実行するときに、ADユーザー/グループを取得できません。これは、NETBIOS名がドメイン名と異なるためである可能性があります。私の場合、ドメイン名はdawnsign.comで、NETBIOS名はDSPです。

Pam.dログインモジュールのみを設定しました。認証を成功させるには、他にどのpamモジュールを編集する必要がありますか?

追加情報をいただければ幸いです。

2
Doug Sampson

ポートからsamba4を再コンパイルすると、sssdがなくてもLinuxのようなwinbind認証を使用できます。 sasl ldapを有効にした後、ポートからsamba4を再コンパイルするだけです

    pkg remove samba41 
    pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb 
    pkg remove -f openldap-client 
    pkg install openldap-sasl-client 
    cd /usr/ports/security/sssd && make install

これは、必要なすべてのサポート(gssapi、ldap、kerberos)を使用してsambaを再コンパイルし、nsswitch.confを次のように編集します

passwd: files winbind
group: files winbind
1
elbarna

こんにちは、

これは、sssdの使用に関する小さな更新です v1.11.7

「id_provider = ad」を使用している場合、sssdログファイルに次のエラーが表示されます。

/var/log/sssd/sssd_example.com.log
(Sun Oct  5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0020): ldap_sasl_bind failed (-12)[Not Supported]
(Sun Oct  5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0080): Extended failure message: [unknown error]

次の手順を使用してこの問題を解決し、AD統合を正しく機能させることができます。次に、Sambaをサポートするsssd v1.11.7をビルドします。srcsssdからビルドする必要があるため、libsasl2とリンクされています

​pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install
0
syepes

この記事の執筆時点(2017年6月)における、SSSDを介したこれらのバージョンのFreeBSDとのAD統合に関する私のガイドは次のとおりです。

  • FreeBSD 10.3および11.0(10.3-RELEASE-p18および11.0-RELEASE-p9)
  • インストール(および楽しいパッケージングと依存関係の問題)

    • 必要なパッケージはHeimdal Kerberosと互換性がないようです。MIT Kerberosフラグを有効にしてインストールおよびコンパイルする必要があります。これは、実際の互換性よりもパッケージの依存関係の問題である可能性が高いです。問題。
    • Heimdalはベースシステムと共にインストールされるため、MIT Kerberosをインストールすると、2つのセットのKerberosコマンドが残り、1つは/usr/binに、もう1つは/usr/local/binに設定されます。ファイルはパッケージの中にあるようで、単にHeimdal KRBのものを削除することはできません。
    • さまざまなパッケージの依存関係を前方に移動します(太字の興味深いdep、太字の斜体の矛盾するdep):

      • net-mgmt/adcli:net/openldap24-sasl-client
      • security/cyrus-sasl2-gssapi: security/cyrus-sasl2
      • net/openldap24-sasl-client: security/cyrus-sasl2
      • security/sssd: security/nss
      • security/sssd:security/krb5
      • security/sssd: security/cyrus-sasl2
      • security/sssd:net/openldap24-client
      • security/sssd: lang/python27
      • security/sssd: lang/python2
      • security/sssd: dns/c-ares
      • security/sssd: devel/tevent
      • security/sssd: devel/talloc
      • security/sssd: devel/popt
      • security/sssd: devel/pcre
      • security/sssd: devel/libunistring
      • security/sssd: devel/libinotify
      • security/sssd: devel/gettext-runtime
      • security/sssd: devel/Ding-libs
      • security/sssd: devel/dbus
      • security/sssd: databases/tdb
      • security/sssd: databases/ldb
    • さまざまなパッケージの依存関係を逆にします。

      • net/openldap24-sasl-client: sysutils/msktutil
      • net/openldap24-sasl-client: net/nss-pam-ldapd-sasl
      • net/openldap24-sasl-client: net-mgmt/adcli
        • ご覧のように、基本パッケージとしてHeimdalを使用している場合でも、sssd自体にはMIT Kerberosが必要です
        • adcliopenldap-sasl-clientを必要としますが、他のパッケージ(sssdのサブ依存関係を含む)は、openldap-clientを取り込みます。これにより、最小限のバイナリパッケージセットであっても、インストールが少し面倒になります。
        • これらの依存関係は、バイナリレポパッケージと、パッケージがポートツリーでビルドされている場合の両方に存在します。これには、必要なすべてを取得するための煩わしい特定のインストール方法が必要です(以下で説明)。
    • これを書いている時点では、FreeBSD用のSSSDのバイナリpkgにはSSSDのADサポートが含まれていません。

      • SSSDのポートバージョンは、適切な(make config)オプションを有効にして構築する必要がありました。
        • SMB
      • SSSDは、openldap-sasl-clientが正しく機能するために本当に必要なときに、openldap-clientをプルインしたいと考えています。
    • adcliのpkgバイナリバージョンは存在しますが、これを書いている時点では機能していません。
      • 繰り返しになりますが、portsバージョンは適切なオプションを有効にしてコンパイルされています:
        • GSSAPI_MIT
    • cyrus-sasl-gssapiは必須ですが、pkgバイナリバージョンは動作せず、SSSDを削除する原因となる奇妙な依存関係の問題があります。
      • MIT-KRB5オプションを有効にして、ポートからビルドします。
        • GSSAPI_MIT
    • 機能にはopenldap-sasl-clientが必要ですが、SSSDはSASL以外のバージョンのopenldapを取り込みたいと考えています。
      • これを機能させるには
        • ポートでGSSAPIオプションを選択してopenldap-sasl-clientを構成します(make config)。
        • Make in portsを作成してビルドします
        • インストールする前に、pkg remove –f openldap-client を実行します
          • これにより、他のパッケージ(SSSDなど)の自動削除を行わずにopenldap-clientが削除され、SASLバージョンのインストールが可能になります
        • openldap-sasl-client をmake installします。
          • これはシステムにインストールされます
    • これにより、AD機能を備えた機能的なSSSDに必要なものが提供されます。
    • SSSDをポートからコンパイルすると、依存関係が大量に取り込まれ、ビルドされるため、構成オプションを選択する必要があることに注意してください。
      • まずバイナリパッケージをpkg install sssdでインストールし、次にpkg remove –f sssd で削除することをお勧めします。
        • これにより、SSSDを取り込む必要があるほとんどのバイナリパッケージが作成され、これらのすべての依存関係をポートにビルドする必要がなくなります。これにはかなり時間がかかります。
      • 削除したら、上記のオプションを有効にしてSSSDをポートから再インストールします。これにより、上記の4つのパッケージを再ビルドするだけで機能するセットアップを取得できます。
    • (オプション)すべてが機能して検証されたら、pkg createを使用して、適切なオプションを有効にして4つのパッケージのバイナリパッケージを作成し、すべてのシステムのポートにビルドする代わりにそれらを使用できます。バイナリのインストールは、portsビルドプロセスと同様のパターンに従います。

      • pkg install sssd-1.11.7_8.txz
        • もちろんあなたのバージョンは違うかもしれません
        • これにより、SSSDのバイナリパッケージがインストールされ、必要なすべてがFreeBSDリポジトリから取得されます。
      • pkg add他のパッケージ(インストール、追加以外)。最後にopenldapパッケージを保存します。
      • openldap-sasl-clientを追加する前に、pkg remove –f openldap-client を実行します
        • これにより、SASL以外のバージョンが削除され、私たちのバージョンをインストールできるようになります
      • pkg add openldap-sasl-client-2.4.44.txz
        • 繰り返しますが、バージョンが異なる場合があります
      • 必要なパッケージをインストールしておく必要があります。
      • それ 五月 pkg createを実行する前にSSSDバイナリのメタデータを変更してopenldap-clientへの依存関係をopenldap-sasl-clientに置き換えることで、この削除/再インストールを行う必要がなくなります。これを検討する時間がありませんでした。
        • さらに、openldap-clientも取り込むSSSDのサブ依存関係があるため、それらも修正する必要があります。
      • これらの注記はすべて、現在ポートツリーにあるこれらのパッケージのバージョンこのドキュメントの執筆時点と、それらに関連付けられている依存関係の時点のものであることに注意してください。 FreeBSDがポートツリーとバイナリを更新するため、これはすべて変更される可能性があります。たぶん、ある日、すべてのバイナリバージョンがあり、AD機能用に構成された適切なオプションを使用して、適切な依存関係をすべてすぐに利用できるようになります。
    • Kerberos構成:

      • /etc/krb5.confファイルの例:
 [libdefaults] 
 default_realm = MYDOMAIN.NET 
 forwardable = true 
#DNS SRVレコードなので、通常、AD環境で必要なものはすべて
 #AD/KRBサーバー/サービスを識別します。 
#でADサーバーを手動で指定する場合はコメントアウトします
 dns_lookup_kdc = true 
 [realms] 
 MYDOMAIN.NET = {
# DNSにあるものとは異なるADサーバーを手動で指定している場合
#admin_server = adserver.mydomain.net 
#kdc = adserver.mydomain.net 
} 
 [domain_realm] 
 mydomain.net = MYDOMAIN.NET 
 .mydomain.net = MYDOMAIN.NET 
  • (インデント)
    • SSSD設定:
      • この例では、ユーザーとグループのADのPOSIX属性を想定しています。これは、すでに確立されたUIDとGIDを持つ既存の環境を置き換える場合に一般的に必要です。
      • /usr/local/etc/sssd/sssd.confファイルのサンプル:
 [sssd] 
 config_file_version = 2 
 domains = MYDOMAIN.NET 
 services = nss、pam、pac 
 fallback_homedir =/home /%u 
 
 [domain/MYDOMAIN.NET] 
 id_provider = ad 
 access_provider = ad 
 auth_provider = ad 
 chpass_provider = ad 
#AD POSIX属性を使用し、自動生成された場合はコメントアウトします
#UIDおよびGID。
 ldap_id_mapping = False 
 cache_credentials = true 
 ad_server = adserver.mydomain.net 
#bashがない場合、またはインストールされているADアカウントのloginShell 
#属性にあるもの
 override_Shell = /bin/tcsh
  • (インデント)
    • PAM設定:
      • FreeBSDでのPAM設定は、OpenPAMの動作方法のため、少し注意が必要です。詳細は説明しませんが、SSSDにpam_sssを使用して機能させ、passwdログインも機能させるには、pam_unixをファイルに2回入力する必要があります。私が理解していることから、これは、2番目のpam_unixモジュールが通過することを必要とする「舞台裏」で実行される2次チェックに関係しています。
        • これは、SSSDをFreeBSDで動作させるために変更しなければならなかった/etc/pam.dファイルのリストです。

/etc/pam.d/sshd:

#
#$ FreeBSD:releng/11.0/etc/pam.d/sshd 197769 2009-10-05 09:28:54Z des $ 
#
 #「sshd」サービスのPAM構成
#
 
#auth 
 auth十分なpam_opie.so no_warn no_fake_prompts 
 auth必要なpam_opieaccess.so no_warn allow_local 
#auth十分なpam_krb5.so no_warn try_first_pass 
#auth十分なpam_ssh.so no_warn try_first_pass 
 auth十分なpam_unix.so no_warn try_first_pass nullok 
 auth十分なpam_sss.so use_first_pass 
 auth required pam_unix.so no_warn use_first_pass 
 
#account 
 account required pam_nologin.so 
#account required pam_krb5.so 
 account required pam_login_access.so 
 account required pam_unix.so 
 account十分なpam_sss.so 
 
#セッション
#sessionオプションのpam_ssh.so want_agent 
 session optional pam_sss.so 
 sess ion required pam_mkhomedir.so mode = 0700 
 session required pam_permit.so 
 
#password 
#password十分なpam_krb5.so no_warn try_first_pass 
#password十分なpam_unix.so try_first_pass use_authtok nullok 
 password十分なpam_unix.so try_first_pass use_authtok 
 password十分なpam_sss.so use_authtok 

/etc/pam.d/system:

#
#$ FreeBSD:releng/11.0/etc/pam.d/system 197769 2009-10-05 09:28:54Z des $ 
#
 #システム全体のデフォルト
#
 
#auth 
 auth十分なpam_opie.so no_warn no_fake_prompts 
 auth requisite pam_opieaccess.so no_warn allow_local 
#auth十分なpam_krb5.so no_warn try_first_pass 
#auth十分なpam_ssh.so no_warn try_first_pass 
#auth必須.____。] auth十分pam_sss.so use_first_pass 
 auth required pam_deny.so 
 
#account 
#account required pam_krb5.so 
 account required pam_login_access.so 
アカウントが必要ですpam_unix.so 
アカウント十分なpam_sss.so 
 
#セッション
#sessionオプションpam_ssh.so want_agent 
 session required pam_lastlog.so no_fail 
 session o ptional pam_sss.so 
 session required pam_mkhomedir.so mode = 0700 
 
#password 
#password十分なpam_krb5.so no_warn try_first_pass 
#password required pam_unix.so no_warn try_first_pass 
 password十分なpam_unix.so no_warn try_first_pass nullok use_authtok 
十分なpam_sss.so use_authtok 
#password required pam_deny.so 

/etc/pam.d/su:

#
#$ FreeBSD:releng/11.0/etc/pam.d/su 219663 2011-03-15 10:13:35Z des $ 
#
 #「su」サービスのPAM構成
#
 
#auth 
 auth十分なpam_rootok.so no_warn 
 auth十分なpam_self.so no_warn 
 auth requisite pam_group.so no_warn group = wheel root_only fail_safe ruser 
 auth include system.dist 
 
#account 
 account include system.dist 
 
#セッション
セッションが必要ですpam_permit.so 
  • (インデント)

    • ノート:
      • system.distは、ストックの/etc/pam.d/systemファイルのコピーです。 suコマンドの問題を防ぐために、上記の/etc/pam.d/suファイルに含まれています。
      • ルートになるとsuは認証する必要がなく、アカウント情報はSSSD経由でネームサービススイッチを介してプルされるため、ルートとしてADアカウントにsuすることは引き続き可能です。
      • あるユーザー(rootではない)から別のユーザーに本当に切り替えたい場合は、セキュリティ上の理由だけでSudoを使用する必要があります
      • ksuを使用することもできます。これは、ユーザーAからユーザーBに切り替えるときに機能します
        • Heimdalのksu/usr/bin内)には、デフォルトでSUIDが設定されていません
          • Heimdal ksuを機能させるには、chmod u+s /usr/bin/ksu
        • MIT Kerberos(krb5パッケージは/usr/local/binにインストールされています)はインストール時にSUIDです
      • Heimdalは基本パッケージの一部であるため、Kerberosバイナリの両方のセットが提供されます。
        • /usr/local/bin/usr/binの前になるように、デフォルトのパスを調整したい場合があります。
      • ksuは、ターゲットユーザーのAD/Kerberosパスワードをユーザーに要求します
      • pam_sss.soをpasswd PAMファイルに追加しても、passwdはAD/Kerberosパスワードを変更するようには機能しません。 passwdバイナリはローカルおよびNISのみをサポートしますkpasswdを使用して、AD/Kerberosサーバー上のパスワードを変更します。
    • ネームサービススイッチ:

      • /etc/nsswitch.confファイルは、passwdとグループにsssサービスを使用するように構成する必要があります。例:
        • group: files sss
        • passwd: files sss
    • ドメインへの参加:

      • * nixには、Linuxボックスに参加するための2つの主要なツールがあります
        • adcli
          • これは私の好みのツールです。これは非常にうまく機能し、すべてを単一のコマンドラインで実行できます。資格情報は非対話的に(stdinなどを介して)与えることができます
          • 使用する前にkinitを実行する必要はありません。提供された資格情報に基づいて実行されます。
            • 例:
              • adcli join -D mydomain.net -U Administrator--show-details –v
              • adcli join –H adclient.mydomain.net -D mydomain.net -U Administrator --show-details -v
                • ユーティリティは常にFQDNを正しく把握しているわけではないため、この形式をお勧めします。ホストのフォワードDNSとリバースDNSの両方に一致するFQDNを提供すると、原則が正しく作成されます。ユーティリティが誤ったホスト名(たとえば、DNSドメインを含まない)を使用する場合、一部のサービスプリンシパルが作成されず、ホストへのSSHなどが失敗することがあります。
        • Samba netユーティリティ
          • netユーティリティはSambaスイートの一部です。
          • このユーティリティでは、ドメインの詳細をsmb.conf構成ファイルで設定する必要があります。これにより、特に非対話的に使用することがより困難で不便になります。
          • このツールでは、kinitを使用して使用する前にKerberosチケットを取得する必要もあります。繰り返しますが、これはより不便であり、1つのステップではなく2つのステップがあるため、スクリプトで非インタラクティブに使用することが少し難しくなります。
    • SSHDの考慮事項:

      • SSHDをADおよびSSSDと連携させることは、通常、かなり簡単です
      • 以下のオプションを/etc/ssh/sshd_config [.____に追加する必要があります。]
        • GSSAPIAuthentication yes
          • SSHDのGSS API認証をオンにします。これにより、SSHDはAD KDCに対して認証されます
        • PasswordAuthentication yes
          • ユーザーがパスワードでログインできるようにします。ユーザーがログイン時にKRB5チケットを取得する場合に必要です。これを有効にしないと、システムはKDCから送信されたTGTを復号化できません。
        • ChallengeResponseAuthentication yes
          • FreeBSDの場合、この方法が最適に機能するようです。
            • このオプションを使用するときは、必ずPasswordAuthentication noを構成してください。
            • これは、ログイン時に期限切れのパスワードを変更するために機能する、FreeBSDで見つけた唯一の方法です。もう一方を使用する場合、それは/bin/passwdを呼び出しますが、これはNISとローカルpasswdファイル以外をサポートしていません。
        • GSSAPICleanupCredentials yes
          • (オプション)ログアウト時にkdestroyを実行します
        • GSSAPIStrictAcceptorCheck no
          • (オプション)このオプションは、SSHDが独自のホスト名について混乱している場合、またはマルチホームなどである場合、または別のサービスプリンシパルを使用してKDCと通信する場合に必要になります。通常、SSHDはサービスプリンシパルHost/<FQDN>@REALMを使用してKDCと通信しますが、間違っている場合があります(たとえば、ホスト名がSSHサーバーのDNS名と一致しない場合)。このオプションを使用すると、適切な/etc/krb5.keytabを含むHost/<FQDN>@REALMファイル内の任意のプリンシパルをSSHDが使用できるようになります。
      • 使用するオプションの組み合わせによっては、ssh -K <ip>がパスワードの入力を求められることなく機能するために、ホストのIPv4アドレスとIPv6アドレスをKDCに追加する必要がある場合とない場合があります(すでに「kinit」を実行していると想定) 、 もちろん)。
0
jbgeek