SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Linux の sqlcmd でセキュリティ接続 (-E) を使用してみる

leave a comment

昨年、Linux 版の sqlcmdや BCP の提供が開始されました。
Azure SQL Database: SQLCMD and BCP on Ubuntu Linux

これらのツールでは、セキュリティ接続 (-E オプション) がサポートされています。
image

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 を使うことができます。

image

セキュリティ接続を使用する場合は、ドメインコントローラーとの通信が必要となりますので、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 のユーザー情報がうまく使えない場合は一度再起動した方がよいかもしれないですが。

image

image

Share

Written by Masayuki.Ozawa

3月 27th, 2016 at 1:04 pm

Posted in SQL Server

Tagged with ,

Leave a Reply