samba-swat と stunnel

samba-swat はブラウザから smb.conf をいじれる便利な標準ツールですが,root のパスワードを Basic Auth でわたさなければいけない*1のが不安なところです。なので,せめて SSLかましたいですね。
Fedora だと samba-swat をインストールすると xinetd がインストールされますし,標準的な構成では stunnel もインストールされているので,swat + stunnel + xinetd を組み合わせた,デフォルトより安全な環境を構築してみることにします。


まずは証明書の用意です。自己証明書は問題が多いと言われていますが,swat はイントラネットで使用することが多いと考えるとまぁ自己証明書でいいんじゃないでしょうか*2。openssl コマンドで作成することになりますが,毎度毎度国識別子を GB から JP に変えたりするのも面倒くさいので openssl.cnf を編集しておきます。Fedora の場合,普通の環境と違って /etc/pki/tls/openssl.cnf に存在します。で,編集した後,

# cd /etc/pki/tls/private
# openssl req -new -x509 -days 3652 -nodes -out local.pem -keyout local.pem

のような感じで,パスフレーズのかかっていない自己証明書を生成します。


次に,stunnel 用の設定ファイルを用意します。stunnel をスタンドアロンではなく xinetd 経由で起動するので,/etc/stunnel ディレクトリに sswat.conf というファイルを作りましょう。今回の例では以下のような内容になります。

cert = /etc/pki/tls/private/local.pem
exec = /usr/sbin/swat
execargs = swat
TIMEOUTclose = 0


xinetd 用の設定ファイルを作ります。Fedora では,/etc/xinetd.d/swat という起動用ファイルがインストールされるので,これを /etc/xinetd.d/sswat などの名前にコピーして編集します。元の swat ファイルとの違いは,service の名前を swat から sswat に変更するところと,only_from をもうすこしゆるく(イントラのアドレス空間等)すること,あと,

  type = UNLISTED
  server = /usr/sbin/stunnel
  server_args = /etc/stunnel/sswat.conf

あたりです。「type = UNLISTED」というのは,/etc/services に登録されていないサービス名(とポート番号)だけどよろしくたのむ,という意味で,なかなか重宝します。


あとは chkconfig sswat on して service xinetd restart すれば https でアクセスできるようになります。おっと,最近の Fedora では SELinux が デフォルトで enabled なのでした。その場合には,

# setsebool -P samba_enable_home_dirs=1
# setsebool -P stunnel_disable_trans=1

のような設定をしておきます。
一行目は,ユーザディレクトリにアクセスする際に必要となります。二行目は,本来なら stunnel が swat に成れるように /etc/selinux/targeted/src/policy/ 以下をいじってビルドしなければいけないのですが,いろいろためしてみたところまるでうまくいかなかったために,仕方なくこのようにしています。より良い案があれば教えて頂きたいです。
また,上記で作成した各種設定ファイルは chcon コマンドで

root:object_r:cert_t        /etc/pki/tls/private/local.pem
root:object_r:stunnel_etc_t /etc/stunnel/sswat.conf
root:object_r:etc_t         /etc/xinetd.d/sswat

のようなロールにします。

*1:security = ads 等の場合,Domain Administrator なら root じゃなくてもいじれるとどこかで見た気がしますが未確認

*2:もちろん,怪しい証明書を信用する癖がつくとまずいですが