コンピュータ/ソフトウェア関連Tips

Samba-serverセットアップメモ(FreeBSD)

作成日: Jul 20, 2019
カテゴリー: FreeBSD タグ: FreeBSD

FreeBSD 12.0 RELEASEにSamba-serverをセットアップしたときのメモです。

この記事は、FreeBSDセットアップメモの一部です。

インストールするSamba-serverの確認

pkg searchコマンドでチェックします。

$ pkg search samba
p5-Samba-LDAP-0.05_2           Manage a Samba PDC with an LDAP Backend
p5-Samba-SIDhelper-0.0.0_3     Create SIDs based on G/UIDs
samba-nsupdate-9.13.3_1        nsupdate utility with GSS-TSIG support
samba410-4.10.5                Free SMB/CIFS and AD/DC server and client for Unix
samba46-4.6.16_3               Free SMB/CIFS and AD/DC server and client for Unix
samba47-4.7.12_2               Free SMB/CIFS and AD/DC server and client for Unix
samba48-4.8.12_3               Free SMB/CIFS and AD/DC server and client for Unix

Samba-serverのインストール

samba410をインストールします。

$ sudo pkg install samba410

Samba設定ファイルの作成

$ cd /usr/local/etc
$ sudo vi smb4.conf

中身は、http://www.kishiro.com/FreeBSD/samba4.htmlhttps://forums.freebsd.org/viewtopic.php?&t=35851、その他複数のページを参考にして、

[global]
workgroup = WORKGROUP
server string = FreeBSD
security = user
hosts allow = 192.168.
guest ok = no
unix charset = UTF-8
dos charset = CP932
max protocol = SMB2
netbios name = express
create mask = 644
force create mode = 644
directory mask = 775
force directory mode = 775
printing = bsd
unix extensions = no
nt acl support = yes
inherit acls = no
map acl inherit = yes
map archive = no

domain master = no
local master = no
preferred master = no
os level = 0

# 誤ったインタプリタです: テキストフ ァイルがビジー状態です
# となるのを防ぐ
oplocks = No
blocking locks = No

[homes]
comment = Home Directories
path = %H/samba
browseable = no
writable = yes
write list = hogehoge
guest ok = no
vfs objects = zfsacl
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = yes

[tank]
comment = tank
browsable = yes
path = /mnt/tank
public = yes
writable = yes
write list = hogehoge
guest ok = no
vfs objects = zfsacl
nfs4:mode = special
nfs4:acedup = merge
nfs4:chown = yes

max protocol = SMB2が無いと、Windows 8マシンから接続できませんでした。

https://forums.freebsd.org/viewtopic.php?&t=35851の設定を追加せずにファイルを書き込んだら、以下のようなエラーが多量に/var/log/messagesに記録されてました。(コンソールにも表示されてました)。

Jul 20 21:31:00 myhostname smbd[974]: [2014/07/20 21:31:00.390302,  0] ../source3/modules/vfs_posixacl.c:171(smb_ace_to_internal)
Jul 20 21:31:00 myhostname smbd[974]:   unknown tag type 64

設定ファイルのパーミッションを変更します。(参考にしたページは現在Not foundです)

$ sudo chmod 600 smb4.conf

ディレクトリの属性設定

ユーザは自分ひとりなので、/mnt/tankのOwner、Groupを自分のものに設定します。

$ sudo chown *****:***** /mnt/tank

Samba用アカウントの作成

pdbeditコマンドで、Sambaアカウントを作成します。下記の例では、ユーザー名は*****で、このユーザーは、Samba-serverを動作させるマシン自体のアカウントとして存在しているという前提です。

$ sudo pdbedit -a -u *****
new password:
retype new password:
Unix username:        *****
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21
Primary Group SID:    S-1-5-21
Full Name:            hoge
Home Directory:       \\foobar\*****
HomeDir Drive:
Logon Script:
Profile Path:         \\foobar\*****\profile
Domain:               FREEBSD
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          日, 00  1月 1900 00:00:00 JST
Kickoff time:         日, 00  1月 1900 00:00:00 JST
Password last set:    日, 20  7月 2014 04:56:42 JST
Password can change:  日, 20  7月 2014 04:56:42 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Samba-serverの起動/停止/再起動

マシン起動時にSamba-serverを起動するようにしていても、

  1. GEOM ELIにて暗号化されたハードディスクのアタッチ。
  2. raidz1ストレージプールのマウント。

をしてからSamba-serverを再起動しなければならなかったので、自動起動はせずに、上記アタッチとマウントをするスクリプトにて、Samba-serverを起動することにしました。まずは、手動にて、実行してみます。

$ sudo /usr/local/etc/rc.d/samba_server onestart
Performing sanity check on Samba configuration: OK
Starting nmbd.
Starting smbd.
Starting winbindd.

Samba-serverを停止する場合は、

$ sudo /usr/local/etc/rc.d/samba_server onestop

Samba-serverを再起動する場合は、onestopしてからonestartです。

GEOM ELI暗号化ディスクをアタッチするスクリプトの修正

ストレージプールのマウントとSamba-serverの起動まで行うように修正しました。

#!/usr/local/bin/bash
# Filename: /usr/local/bin/attach_disks.sh
# This script attaches the geli encrypted disks, mount zfs pool,
# and start the Samba-server.
devicePrefix="/dev/ada"
deviceSuffix=".nop"
indexStart=1
indexEnd=6
keyFile="/root/.geli/geli.key"
zfsPoolName="tank"
function attach() {
  echo "Enter geli passphrase. Your entry would NOT be echobacked."
  stty -echo
  read passphrase
  stty echo
  for no in $(seq ${indexStart} ${indexEnd}); do
    drive=${devicePrefix}${no}${deviceSuffix}
    if [ -e ${drive}.eli ]; then
      echo "${drive}: Already attached."
    else
      echo "${drive}: Attaching ..."
      echo ${passphrase}|/sbin/geli attach -k ${keyFile} -j - ${drive}
    fi
  done
  # Mount the ZFS pool
  echo "Mounting zpool \"${zfsPoolName}\"."
  zfs mount ${zfsPoolName}
  # Onestart the Samba server
  echo "Starting samba server."
  /usr/local/etc/rc.d/samba_server onestart
}

if [ $# -eq 0 ]; then
  attach
fi

echo "Following is a result of \"ls ${devicePrefix}*.eli\" command."
ls ${devicePrefix}*.eli
echo "Follwoing is a result of \"zpool list\" command."
zpool list
echo "Following is a result of disk free of \"${zfsPoolName}\"."
df -h|grep -e 'Filesystem' -e "^${zfsPoolName}"