samba サーバーをたてる

言わずと知れたファイルサーバーですね。いまうちの環境で動いている samba は……バージョン不明です。linux カーネル は 3.7.10 で、コンパイルしたのは2013年5月5日らしいですw 別に外のネットワークに晒しているわけでもないし安定して動いているんですが、さすがにもう怖くて迂闊に emerge とか投げられないですし、カーネルのバージョンアップとかもとんでもなく苦労しそうなので、丸ごと作り直すことにしました。

この作業に先立ってディスクリソースとかの移行は別の記事のとおりに済ませてあります。

さて。samba とかそのへんのメジャーどころに関しては gentoo のドキュメントの豊富さがありがたいです。Samba - gentoo wikiに従ってやっていきます。

gentoo wiki の言うとおりにします。

--- Network File Systems
<*>   CIFS support (advanced network filesystem, SMBFS successor)
[*]     CIFS statistics
[*]       Extended statistics
[ ]     Support legacy servers which use weaker LANMAN security (
[ ]     Kerberos/SPNEGO advanced session setup (NEW)
[*]     CIFS extended attributes
[*]       CIFS POSIX Extensions
[*]       Provide CIFS ACL support
[*]     Enable CIFS debugging routines (NEW)
[ ]       Enable additional CIFS debugging routines (NEW)
[ ]     DFS feature support (NEW)
[*]     SMB2 and SMB3 network file system support
[ ]       SMB3.1.1 network file system support (Experimental) (NE

で、make してインストールして一連のお約束を実行します。

# make && make modules_install
# mount /boot
# cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/kernel-4.9.16-gentoo-fs01.20170410.01
# grub-mkconfig
Generating grub configuration file ...
Found linux image: /boot/kernel-4.9.16-gentoo-fs01.20170410.01
Found linux image: /boot/kernel-4.9.6-gentoo-r1-fs01.20170410.01
done
# umount /boot
# systemctl reboot

再起動したら、gentoo wiki に書いてある Note を確認してみます。

# dmesg | grep CIFS
#

なにも引っかからないので良しとしましょう。

# emerge -av samba
  ~だばー(略)~
[ebuild  N     ] net-nds/openldap-2.4.44::gentoo  USE="berkdb crypt ipv6 ssl syslog tcpd -cxx -debug -experimental -gnutls -iodbc -kerberos -kinit (-libressl) -minimal -odbc -overlays -perl -samba -sasl (-selinux) -slp -smbkrb5passwd -static-libs" ABI_X86="(64) -32 (-x32)" 0 KiB
[ebuild  N     ] dev-libs/libverto-0.2.5-r1::gentoo  USE="libev threads -glib -libevent -static-libs -tevent" ABI_X86="(64) -32 (-x32)" 342 KiB
[ebuild  N     ] dev-util/cmake-3.7.2::gentoo  USE="ncurses -doc -emacs -qt5 -system-jsoncpp {-test}" 0 KiB
[ebuild  N     ] dev-python/traceback2-1.4.0::gentoo  PYTHON_TARGETS="python2_7 python3_4 (-pypy) (-pypy3) (-python3_5) (-python3_6)" 16 KiB
[ebuild  N     ] app-crypt/mit-krb5-1.14.2::gentoo  USE="keyutils pkinit threads -doc (-libressl) -openldap (-selinux) {-test} -xinetd" ABI_X86="(64) -32 (-x32)" 11978 KiB
[ebuild  N     ] sys-libs/ldb-1.1.26:0/1.1.26::gentoo  USE="-doc" ABI_X86="(64) -32 (-x32)" PYTHON_TARGETS="python2_7" 1234 KiB
[ebuild  N     ] net-libs/socket_wrapper-1.1.6::gentoo  USE="{-test}" ABI_X86="(64) -32 (-x32)" 53 KiB
[ebuild  N     ] sys-libs/nss_wrapper-1.1.3::gentoo  USE="{-test}" ABI_X86="(64) -32 (-x32)" 53 KiB
[ebuild  N     ] sys-libs/uid_wrapper-1.2.1::gentoo  USE="{-test}" ABI_X86="(64) -32 (-x32)" 305 KiB
[ebuild  N     ] dev-python/unittest2-1.1.0::gentoo  PYTHON_TARGETS="python2_7 python3_4 (-pypy) (-pypy3) (-python3_5) (-python3_6)" 80 KiB
[ebuild  N     ] dev-python/testtools-1.8.0::gentoo  USE="-doc {-test}" PYTHON_TARGETS="python2_7 python3_4 (-pypy) (-pypy3) (-python3_5) (-python3_6)" 204 KiB
[ebuild  N     ] dev-python/subunit-1.2.0-r1::gentoo  USE="-static-libs {-test}" ABI_X86="(64) -32 (-x32)" PYTHON_TARGETS="python2_7 python3_4 (-pypy) (-pypy3) (-python3_5) (-python3_6)" 450 KiB
[ebuild  N     ] net-fs/samba-4.2.14::gentoo  USE="acl pam system-mitkrb5 systemd -addc -addns -ads -aio -avahi -client -cluster -cups -dmapi -fam -gnutls -iprint -ldap -quota (-selinux) -syslog {-test} -winbind" ABI_X86="(64) -32 (-x32)" PYTHON_TARGETS="python2_7" 20400 KiB

Total: 30 packages (30 new), Size of downloads: 39611 KiB

The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by net-fs/samba-4.2.14::gentoo
# required by samba (argument)
>=sys-libs/ntdb-1.0-r1 python
# required by sys-libs/ldb-1.1.26::gentoo
# required by net-fs/samba-4.2.14::gentoo
# required by samba (argument)
>=sys-libs/tdb-1.3.8 python
# required by sys-libs/ldb-1.1.26::gentoo
# required by net-fs/samba-4.2.14::gentoo
# required by samba (argument)
>=sys-libs/tevent-0.9.28 python

Would you like to add these changes to your config files? [Yes/No] y

……えらいたくさん入ってきますねw 個人的には USE は -ldap なのに openldap が入ってくるのが気になりますが、まぁ最近の samba ってワリと AD 環境でも耐えうるようになってるみたいだし……しょうがないかなと。

あと、強制 USE 変更が出てるので y を返した後で一度 dispatch-conf しないとですね。use-new の u で /etc/package.use/ 下にファイルを作ってもらいました。そして再度……

# emerge -av samba
 ~だばー(略)~
[ebuild  N     ] net-fs/samba-4.2.14::gentoo  USE="acl pam system-mitkrb5 systemd -addc -addns -ads -aio -avahi -client -cluster -cups -dmapi -fam -gnutls -iprint -ldap -quota (-selinux) -syslog {-test} -winbind" ABI_X86="(64) -32 (-x32)" PYTHON_TARGETS="python2_7" 20400 KiB

Total: 30 packages (30 new), Size of downloads: 39611 KiB

Would you like to merge these packages? [Yes/No] y

しばし待ちですね。

gentoo wiki では、せっかく samba 入れたんだからグローバル USE に samba 足してうどんワールド1)しなよ的なことが書いてありますね。まぁ必須じゃなさそうですが、どれくらい影響があるのかちょっと確認してみます。USE="${USE} samba" emerge -uDNpv world すればいいですね。

# USE="${USE} samba" emerge -uDNpv world

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] net-misc/ntp-4.2.8_p9::gentoo  USE="ipv6 readline samba* ssl threads -caps -debug (-libressl) -openntpd -parse-clocks (-selinux) -snmp -vim-syntax -zeroconf" 7087 KiB
[ebuild   R    ] net-nds/openldap-2.4.44::gentoo  USE="berkdb crypt ipv6 samba* ssl syslog tcpd -cxx -debug -experimental -gnutls -iodbc -kerberos -kinit (-libressl) -minimal -odbc -overlays -perl -sasl (-selinux) -slp -smbkrb5passwd -static-libs" ABI_X86="(64) -32 (-x32)" 0 KiB

Total: 2 packages (2 reinstalls), Size of downloads: 7087 KiB

……ntp に samba が絡むんですか? openldap も、そもそも samba に引っ張られて入ってきたのに……なんかもにょりますw

net-misc/ntp

gentoo packagesで調べてみました。

Provide support for Samba's signing daemon (needed for Active Directory domain controllers)

……だそうです。まぁ設定しても ntpd として害はなさそう。

net-nds/openldap

同じくgentoo packagesで。

Add support for SAMBA (Windows File and Printer sharing)

……なんか納得いかない!!w まぁこれも害はなさそうですね。

まぁ、どちらにしろ致命傷にはならなそうなのでグローバル USE に追加してうどんワールドしときますか。/etc/portage/make.conf の最下行にこんなふうに追記して、うどんワールドしときました。

# samba @17.04.10
USE="${USE} samba"

なんとなく、e2fsprogs とか dosfstools とかその辺に近いパッケージっぽいですよね。使うかどうかわからないけれど、gentoo wiki でオススメされているようなので入れておきます。

# emerge -av cifs-utils

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] sys-libs/libcap-ng-0.7.8::gentoo  USE="-python -static-libs" PYTHON_TARGETS="python2_7 python3_4 (-python3_5)" 438 KiB
[ebuild  N     ] virtual/krb5-0-r1::gentoo  ABI_X86="(64) -32 (-x32)" 0 KiB
[ebuild  N     ] net-fs/cifs-utils-6.4::gentoo  USE="acl ads caps caps-ng -creds" 384 KiB

Total: 3 packages (3 new), Size of downloads: 822 KiB

Would you like to merge these packages? [Yes/No] y

ここまできたら /etc/samba/smb.conf.default なんてファイルができています。うちの環境ではもともと動いていた samba さんがいるので、このデフォルトの設定ファイルをコピーして、もともと動いていた samba さんの設定ファイルの内容をマージしていけば良さそうです。ただ毎回忘れて悩むのが smbusers とか pdbedit あたりなので、そこだけ書き残します。

smb.conf の認証設定

大体の場合は、こんな設定を入れると思います。

security = user

share はともかく、他の設定は別の認証サーバーが必要だったりするので、個人宅ファイルサーバーではなかなか使わない(※ 趣味でやる場合は除く)と思います。 さて user の設定は……

  • samba サーバーに各個人の linux アカウントが必要
  • ただし samba ユーザーのパスワードは linux アカウントのパスワードとは別管理(samba → linux アカウント方向で同期することもできる)

……あたりを忘れないようにしておけば良いでしょうか。

pdbedit

samba ユーザーのパスワードを設定するコマンドです。

# pdbedit -a manimani
new password: <パスワード>
retype new password: <パスワード>

とすることで、ユーザー manimani の samba パスワードを設定することができます。この時、前述のとおり samba サーバーに manimani という linux アカウントが存在している必要があります。

存在する samba ユーザーを一覧表示するには pdbedit -L 詳細表示するには pdbedit -v pdbedit -Lv とか。

ちなみに、古い解説記事に書かれているような smbpasswd なんてファイルはとうの昔から存在しません……

passdb backend = tdbsam

smb.conf ではこんな設定になっていると思います。たぶんこの tdb の実体は /var/lib/samba/ 下にある xxx.tdb のどれかです。

なお samba サーバーに……この例でいえば linux アカウント manimani でログインしている場合は、従来どおり smbpasswd コマンドを使って自分の samba パスワードを変更できるようです。

smbusers

これは、samba ユーザーのエイリアスを設定するためのファイルです。smb.conf 内でこんな風に指定します。

username map = /etc/samba/smbusers

このファイルに、例えば……

manimani ManiManinosuke

……とか設定しておくと、ManiManinosuke というユーザー名で samba にアクセスがあった場合は、samba ユーザー(= linux アカウント)の manimani として処理してくれます。

こんなことをしてなにが得なのかと言うと、この設定を使うことで windows 端末から samba サーバーに接続する際のパスワード入力を省略できるケースがあるからです。

windows と samba の関係

どうやら windows は smb で共有フォルダにアクセスに行く時に、まず最初に windows のログオンユーザーとパスワードを使ってアクセスにいくみたいです。例の場合は windows に ManiManinosuke というユーザーで、パスワード Vulnerable でログオンしています。一方 samba 側では samba ユーザー(= linux アカウント)が manimani という windows 側のユーザーとは異なるユーザー名であっても、間に smbusers を噛ませることで同一ユーザーとして扱うことができるようになります。

なので、pdbedit で samba のパスワードを windows 側のパスワードと同じ Vulnerable にしておけば、ユーザー名とパスワードの入力ダイアログを表示することなくアクセスできるようになります。

1)
emerge -uDN world
https://manimani.cc/lib/plugins/linkback/exe/trackback.php/wiki:linux:setup_samba