昨年、Linux 版の sqlcmdや BCP の提供が開始されました。
Azure SQL Database: SQLCMD and BCP on Ubuntu Linux
これらのツールでは、セキュリティ接続 (-E オプション) がサポートされています。
Linux 版の場合、どのように動作するのかが気になって、Linux の勉強と合わせて触ってみた際のメモを。
Linux が理解できていないので、いくつかの手順が間違っているかもしれませんが…。
Linux は Ubuntu Server 14.04 を使用して検証を行っています。
ざっくり試してみたところ、NTLM ではなく、Kerberos 認証が使われているようでした。
今回の接続先の環境ですが、AD に参加済みの環境で、コンピューターアカウントに SPN の登録が行われている状態となっていますが、それ以外は外部から接続ができるように 1433 のアクセスを許可している状態となっています。
Kerberos 接続用のサービス プリンシパル名の登録
"SSPI コンテキストを生成できません" エラー メッセージのトラブルシューティング方法
この SQL Server に対して、Ubuntu から接続を行ってみます。
最初に、sqlcmdのインストールを行います。
wget https://gallery.technet.microsoft.com/scriptcenter/SQLCMD-and-BCP-for-Ubuntu-c88a28cc/file/142121/1/Ubuntu%2014.04%20MSFT%20ODBC%20Driver.sh sudo bash Ubuntu\ 14.04\ MSFT\ ODBC\ Driver.sh
インストールした sqlcmd は、「/usr/bin」に配置されますので、インストールをすれば一般ユーザーであれば使用できる状態になっているかと。
SQL Server 認証で使用する場合は、これだけで sqlcmd を使うことができます。
セキュリティ接続を使用する場合は、ドメインコントローラーとの通信が必要となりますので、samba と winbind をインストールしておきます。
sudo apt-get install winbind samba libnss-winbind libpam-winbind
インストールが完了したら samba の設定を行います。
# ドメイン情報は適宜読み替えてください。
sudo vi /etc/samba/smb.conf [global] security = ads realm = lab.example.com workgroup = lab # winbind separator = + # idmap uid = 10000-20000 # idmap gid = 10000-20000 idmap config * : range = 10000-20000 idmap config * : backend = tdb winbind enum users = yes winbind enum groups = yes template homedir = /home/%D/%U template shell = /bin/bash client use spnego = yes client ntlmv2 auth = yes encrypt passwords = yes winbind use default domain = yes restrict anonymous = 2
設定が終わったら、サービスを再起動します。
sudo /etc/init.d/winbind stop sudo /etc/init.d/samba restart sudo /etc/init.d/winbind start
最後に、AD に参加させます。
sudo net ads join -U <ドメインユーザー(UPN指定も可)>
クライアント側でケルベロスを使用するために krb5-user も追加をします。
# インストール時の realm は krb5.conf の default_realm を設定するものなのでブランクでもあとから変更できます。
sudo apt-get install krb5-user
インストールが完了したら以下のような内容を krb5.conf に設定します。
# ドメイン名等は環境に合わせて適宜読み替えてください。
sudo vi /etc/krb5.conf [libdefaults] default_realm = LAB.EXAMPLE.COM dns_lookup_realm = true dns_lookup_kdc = true ticket_lifetime = 1h [realms] LAB.EXAMPLE.COM = { kdc = <ドメインコントローラー名> admin_server = <ドメインコントローラー名> default_domain = lab.example.com } [domain_realm] .lab.example.com = LAB.EXAMPLE.COM lab.example.com = LAB.EXAMPLE.COM
次に NSS (Name Service Switch) の設定を行います。
# winbind を追加後に、ブート時の「SMB/CIFS File and Active Directory Server」が fail になった場合は、「echo manual | sudo tee /etc/init/samba-ad-dc.override」 を実行する必要がありそうですが、この辺がきちんと理解できておらず。
sudo vi /etc/nsswitch.conf passwd: compat winbind group: compat winbind shadow: compat
最後に PAM (Pluggable Authentication Modules) の設定を行います。
sudo vi /etc/pam.d/common-session session required pam_unix.so session required pam_mkhomedir.so umask=0022 skel=/etc/skel
これで一通りの環境が整いましたので、セキュリティ接続が可能になるかと。
# AD のユーザー情報がうまく使えない場合は一度再起動した方がよいかもしれないですが。