FreeBSDサーバーの1つがバージョン8.2にアップグレードされるまで、すべては問題ありませんでした。 更新後、キリル文字のログインを持つユーザーは、このサーバーの共有リソースにアクセスできませんでした。 同時に、ラテン語でログインしたユーザーは通常認証されます。 wbinfo -uおよびwbinfo -gコマンドは、予想どおり、キリル文字を含むすべてのユーザーとADグループを表示しました。 同じバージョンのSamba-3.4.9と同じ構成の別のFreeBSD 7.3サーバーは、どのログインでも正常に機能しました。
Sambaログの調査によると、キリル文字のログインを使用して認証しようとすると、Kerberosライブラリでエラーが発生します。クライアントチケットは検証に合格しません。
[2011/04/26 15:06:18, 3] libads/kerberos_verify.c:378(ads_secrets_verify_ticket)
ads_secrets_verify_ticket: enc type [23] failed to decrypt with error Invalid argument
[2011/04/26 15:06:18, 3] libads/kerberos_verify.c:378(ads_secrets_verify_ticket)
ads_secrets_verify_ticket: enc type [1] failed to decrypt with error Message size is incompatible with encryption type
[2011/04/26 15:06:18, 3] libads/kerberos_verify.c:378(ads_secrets_verify_ticket)
ads_secrets_verify_ticket: enc type [3] failed to decrypt with error Message size is incompatible with encryption type
もう1つ気づいたのは、名前ではなくIPアドレス(\\ 192.168.1.1)でサーバーにアクセスすると、認証が成功したことです! Sambaログで、この場合、クライアントはKerberosではなくNTLMプロトコルを使用して認証を開始することがわかります。 その後、トラブルの原因がkerberosライブラリであることが明らかになりました。
長い間、kerberosライブラリは基本的なFreeBSDインストールに含まれています。 FreeBSD 8.2では、これはHeimdal 1.1です。 さらに、ポートには、Heimdal 1.4とMIT krb5 1.9の2つのkerberosライブラリがあります。 アイデアは、ポートからのkerberosでSambaを再コンパイルし、何が起こるかを確認することでした。
最初は、Heimdalを試してみることにしました。Heimdalは、Kerberosコアライブラリ(とにかくインターネットで言うように)とうまく統合できるからです。 ポートheimdal-1.4_1を設定し、ポートsamba34-3.4.9_2を再構築します。
$ cd /usr/ports/security/heimdal
$ sudo make install clean
$ cd /usr/ports/net/samba34
$ sudo HEIMDAL_HOME=/usr/local make deinstall reinstall clean
$ sudo /usr/local/etc/rc.d/samba restart
HEIMDAL_HOME環境変数を使用して、Sambaのコンパイル時に、ポート(/ usr / local / lib)からインストールされたheimdalライブラリを使用する必要があることを示します。そうでない場合は、標準ライブラリ(/ usr / libから)が使用されます。 ログインしようとしています。 結果は同じです。
まず、Heimdalを削除してMITライブラリを試してください。
$ sudo pkg_delete heimdal-1.4_1
$ cd /usr/ports/security/krb5
$ sudo make install clean
$ cd /usr/ports/net/samba34
$ sudo KRB5_HOME=/usr/local make deinstall reinstall clean
ポートアセンブリは、エラーで予期せず中断します。
Compiling libsmb/clikrb5.c
libsmb/clikrb5.c:1623:2: error: #error UNKNOWN_KRB5_ENCTYPE_TO_STRING_FUNCTION
これは明らかに、FreeBSD用にsambaポートを準備した人の欠陥だからです。 ファイルwork / samba-3.4.9 / source3 / include / config.hを開き、行を修正します
/* #undef HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG */
に
#define HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG 1
その後、再びコンパイルを開始します。 KRB5_HOME変数は、構成段階でのみ必要だったため、もはや定義できません。
$ sudo vi work/samba-3.4.9/source3/include/config.h
$ sudo make deinstall reinstall clean
$ sudo /usr/local/etc/rc.d/samba restart
ポートは組み立てられてインストールされましたが、Sambaは起動しません。 sambaのログには次のように表示されます。
/libexec/ld-elf.so.1: /usr/local/sbin/smbd: Undefined symbol "krb5_set_default_tgs_ktypes"
理由は、動的ライブラリ(.so)が最初に/ usr / libのブートローダーによって検索され、次に/ usr / local / libで検索されるためです。 標準heimdalのライブラリファイルとkrb5ポートからインストールされたライブラリファイルの名前は同じであるため、標準ライブラリが最初に検索されてロードされます。 そして、/ usr / local / libのライブラリを、sambaデーモンの検索リストの最初にする必要があります。 これは、デーモンを実行する前に定義する必要がある環境変数LD_LIBRARY_PATHを使用して実行できます。 変数には、アプリケーションローダーが最初に動的ライブラリを検索するディレクトリ名が含まれている必要があります。 つまり この場合、LD_LIBRARY_PATH = / usr / local / libのようになります。
/usr/local/etc/rc.d/samba起動スクリプトに変更を加えることほど良いものは見つかりませんでした。 もちろん、これは良いオプションではありません。Sambaを再インストールまたはアップグレードすると、変更が失われるためです。 したがって、samba_cmd関数で、run_rc_commandを呼び出す前に、次の行を挿入します。
samba_cmd() {
...
export LD_LIBRARY_PATH=/usr/local/lib
run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args}
...
}
次に、Sambaを再起動して、キリル文字のログインを楽しんでください。
軟膏で飛ぶ
2つのKerberosライブラリがシステムにインストールされており、それらはお互いにまったく友好的ではないという事実のために、複雑化が発生する可能性があります。 気づいたことから、net adsコマンドは次のように実行する必要があります。
LD_LIBRARY_PATH=/usr/local/lib net ads …
他のnetサブコマンドは、LD_LIBRARY_PATHがなくても正常に動作するようです。
最初からインストールする
要約として、Active Directory環境でFreeBSD 8.2でSamba 3.4を実行するために必要な基本的な操作と設定を説明します。 インターネット上でのSambaのインストールと構成について多くのことが書かれているので、ささいな説明はしません。
すべてのコマンドはルートとして実行されると理解されています。 viの代わりに、お気に入りのテキストエディターを使用します。
# cd /usr/ports/security/krb5
# make install clean
# cd /usr/ports/net/samba34
# make config
「Active Directoryサポートあり」オプションを設定します。
# KRB5_HOME=/usr/local make configure
# vi work/samba-3.4.9/source3/include/config.h
正す
/* #undef HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG */
に
#define HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG 1
# make install clean
# vi /usr/local/etc/rc.d/samba
run_rc_commandを呼び出す前にexport LD_LIBRARY_PATH = / usr / local / libを挿入します。
samba_cmd() {
...
export LD_LIBRARY_PATH=/usr/local/lib
run_rc_command "${_rc_prefix}${rc_arg}" ${rc_extra_args}
...
}
# echo samba_enable=\"YES\" >> /etc/rc.conf
# vi /etc/nsswitch.conf
行を変更する
group: compat
passwd: compat
そのような
group: files winbind
passwd: files winbind
# vi /usr/local/etc/smb.conf
主な設定は次のとおりです。
[global]
security = ads
# DNS- .
realm = DOMAIN.LOCAL
# NETBIOS- . , .
workgroup = DOMAIN
# smb.conf. AD . Samba 3.5 : UTF-8.
unix charset = CP1251
# . .
display charset = KOI8-R
ボールの例:
[share_name]
path = /tmp
valid users = \
+staff \
DOMAIN\. \
@"DOMAIN\ "
writable = yes
# LD_LIBRARY_PATH=/usr/local/lib net ads join -U administrator
サーバーをドメインに参加させます。 管理者-ドメイン管理者権限を持つユーザーの名前。 デフォルト値はsmb.confのレルムなので、ドメイン名は省略できます。
Kerberos構成ファイル/etc/krb5.confは、インターネット上で非常に多く記述されているため、完全に不要であることに注意してください。 ドメインとKDCに関する必要な情報はすべてDNSから取得されます。
# /usr/local/etc/rc.d/samba start