TrueNASでSMBとAFPの両刀使いの設定をする

2022-10-06
  • B!

Mac TrueNAS サーバ構築

 TrueNASでWindows共有のSMBと古いAppleのファイル共有AFPを同時に使用するにはちょっとしたコツが必要。まぁこういうことはTrueNASに限らずの話ではあるが。

TrueNASの中身はFreeBSDなので、Linuxと同じようにSMBはsamba, AFPはafpdで運用されている。それぞれ全く異なるOSSプロジェクトであるため、両者を同時に走らせるためには設定を工夫する必要がある。もちろん、アクセス権限をつけずに動作させるだけであれば特に気にする必要は無いのだが、各ユーザーごとにホームディレクトリを作るというようにディレクトリの権限の管理を始めると、たとえばSMBで作成したファイルをAFPではパーミッションが足りずに修正できない、というような不具合が起きることを避けるべく設定が必要。

このようなコンフリクトを避ける一番手っ取り早い方法は、AFPを使わないという判断だ。こんなことを書いては元も子もないが、macOSはAFP over TCP/IPを廃止の方針にしている。macOSは2015年、MavericsからSMB2がファイル共有での優先プロトコルに変更され、MojaveのAPFSファイルフォーマットについてはAFP共有ができなくなった。そして、macOS 11 Big SurからAFPの共有サーバは廃止。

このようにmacOSのAFPサーバ機能は廃止されたが、AFPクライアント機能の方はmacOS 12 Montereyでもまだ残っている。従来のNASへのアクセスや古いネットワーク型Time Machineストレージへの互換性の配慮だろう。したがって、Macクライアントから昔ながらのAFPでNASに接続することもまだできる。

ということで、昨今の状況からAFPサーバをわざわざ残してSMBと同時に運用するかどうかは一度考え直しても良いと思う。

私の場合はというと、実はまだTrueNASによるAFPサーバを残している。理由は手元のMacに残っているNASへのエイリアス(ショートカット)を変更するのが面倒くさいということ、あとは古いMacからアクセスする際にAFPが必要だからである。なお、MacからNASへのアクセスはAFPよりもSMBの方が転送速度が出るようなので、本来はSMB推奨らしい。

目次

SMB, AFPを同時運用する時の基礎事項

TrueNASで同じディレクトリに対してSMBとAFPサーバを同時運用する際にコンフリクトしないようにする設定のコツを先に書いておく。
  1. ファイル共有上のパーミッションはchmod, chownではなくACLで行われる
  2. パーミッションがおかしいときは、getfaclコマンドでACLを確認する
  3. ルートディレクトリの基本パーミッションはシェルで設定する
  4. サブフォルダはSMB, AFP経由で作成する
  5. ホームディレクリのユーザーのルートディレクトリはSMB経由で作成する
詳しくは後述するが、グループの誰でもread / writeできるような共有ディレクトリを作成する場合と、ユーザー専用のホームディレクトリを作成する場合で設定の詳細でコツが少し異なる。

共有フォルダのルートを作成する

SMB, AFPで共有するフォルダはパーミション設定がやや特殊になるため、専用のストレージ領域を用意する。以降の説明はすでにPool※を作成済みである前提で始める。
※Pool ・・・物理HDDをRAIDZなどで結合して作ったZFSの論理ボリューム

 Storage > Pool > Add Dataset でPool内に新規データセットを作成する。データセットがファイルシステム構築の単位となる。


作成時のオプションでShare TypeをSMBに設定する。この設定を行うとSMB用にACL ModeがRestricted、Case SensitivityがInsensitiveに自動設定される。


ACL(Access Control List)に対応させると、Windowsのファイル共有に対応した細かいアクセス権限をファイルやフォルダに設定できるようになる。要はWindows上でフォルダのプロパティ > セキュリティタブを表示すると確認できるアクセス権限である。シェルのchmod, chownコマンドとは異なる設定体系となる。

これでファイル共有用のルートディレクトリができた。次に共有の用途別に設定方法を書いておく。

グループ共有NASフォルダの作り方

アカウントのグループを作成する

TrueNASの設定画面にて、Account > Groupesで新規グループを作成する。グループ共有フォルダにアクセス権を与えたいユーザーをグループの仲間に入れる。

SMBの共有ポイントを新規作成する

AFPの設定を行う前にSMBの設定を先に行う。
  1. Sharing > SMBの設定にて、[ADD]ボタンを押して新規にSMBの共有ポイントを作成する。
  2. Pathの設定で先ほど作成したデータセットの場所を選ぶ
  3. Purposeを"Multi-protocol(AFP/SMB) shares"にする

ユーザーのアクセス権限を設定する

SMBの設定画面で先ほど作成した共有ポイントに対して、Edit Filesystem ACLメニューからアクセス権限を設定する。

この共有ポイントにアクセス可能な所属グループの設定を行うことで、グループに所属しているユーザーがこの共有フォルダをSMBで利用できるようになる。フルアクセス権限を与えるグループ名をGroup欄に記入する。

加えて画面右側の追加権限設定でRead Onlyなグループを追加することも可能。ただし、AFPも併用する場合はAFPサーバ側のグループアクセス権でも同様な権限になるように設定が必要。SMBとAFPの権限設置は独立しているので、設定ミスが原因でSMBでは制限がかかっているフォルダなのにAFPから見たらフルアクセスということが起きないように注意する。

ディレクトリのパーミッション設定

TrueNASのシェルにログインして、共有ポイントのルートディレクトリのグループIDをchgrpで変更する。先ほどのSMB設定で与えたフルアクセス権のグループと同じ名前にする。
シェルのログインはTrueNASのShellメニューから入るかSSH経由で。なお、TrueNASのWeb設定画面のShellコンソールはSafariでは動かないのでChrome推奨。
今回は先の例の通りグループ名を"nasuser"としている。変更後の状態は下ような例のようになる。
# ls -al /mnt/Pool001/
drwxrwxr-x+ 7 root  nasuser   14 Sep 23 23:19 test_dir

AFPの設定

SMBと同時にAFPからも共有フォルダを利用できるように設定を追加する。
Sharing > AFP設定にて[ADD]ボタンを押して、新規のAFP共有ポイントを作成する。
  • Pathの設定はSMBと同じにする
  • パーミッションは図のようにグループにも読み書き権限を与える。これはWindows ACLではなくFreeBSD上のUnixパーミッションである
  • Users and Groupに接頭辞"@"をつけてアクセスを許可するグループ名を記入する。ユーザー名の場合は@は不要
  • Mac OS X 10.4より古いクライアントがアクセスする際には、AFP3 Unix PrivsのチェックボックスをOFFにする。また、新しいmacOSでもファイルは作れるがフォルダの作成はできないという状態の時は、このチェックボックスを外す。
以上でグループ共有型のディレクトリ作成は完了する。

ホームディレクトリ型のネットワークフォルダの作り方

先ほどは組織に所属している人であれば誰でも読み書き可能な共有フォルダの作り方を紹介した。次はホームディレクトリ型のネットワークフォルダを作成する。ホームディレクトリ型とは、以下の特徴のように各ユーザーの個人ロッカーのような使い方ができるフォルダである。
  1. フォルダは自分専用で他人は読み書きできない
  2. ネットワークのファイルブラウザで見た時、自分のホームディレクトリは自分にしか見えない
  3. SMBが自動でホームディレクトリ作成とパーミッション設定をしてくれるのでサーバ管理者側の設定が簡単

このような特徴がある。特に、2.のようにWindowsやMacからネットワークのファイルブラウザで共有フォルダを探したときに、他人のホームディレクトリは表示すらされない。このため他人のホームディレクトリ内のファイルを覗き見ることは一切できないという管理が可能。

なお、これはFreeBSDのUnixホームディレクトリとは全く別で、ファイル共有専用のホームディレクトリを作る設定なので混乱しないように。

ホームディレクトリ型のSMB共有ポイントの作成

前述「共有フォルダのルートを作成する」の方法で新規のデータセットを作成する。ホームディレクトリ型の共有は権限の管理方法が異なるので、グループ共有とは別で専用のデータセットを作成する。

AFPの設定を行う前にSMBの設定を先に行う。

SMBの共有ポイントを新規に作成する。この時Advanced OptionsでOther Options > Use as Home ShareのチェックをONにする。これでホームディレクトリ型の共有フォルダとして稼働する。
さらに、Browsable Network Clientsのチェックは必ずOFFにする。こうすると他人のホームディレクトリがファイルブラウザから見えなくなる

File System ACL設定における、フルコントロール権限のユーザー/グループは、root : wheelのままで良い。

AFPの設定

AFP側の設定は、SMBと共存できるように設定を工夫する形となる。Advanced Optionsを開いて詳細設定を行う。
  • PathはSMB側と同じ
  • Use as Home ShareのチェックをON
  • AFP3 Unix PrivsのチェクはOFF ※こうしないとAFP側から新規フォルダ作成ができない
  • Allowするグループ名、ユーザー名は空欄のまま

初めてホームディレクトリを利用する時の手順

サーバ管理者はユーザーのNAS用のホームディレクトリを手動で新規作成する必要はないが、初回アクセスの時の手順がある。

初めてホームディレクトリ型のネットワークフォルダにアクセスするときは、必ずSMBで利用する。

sambaにはホームディレクトリを自動作成する機能があるのだが、afpdには作成機能がないためである。必ずSMBで初回ログインを行いホームディレクトリを自動作成させる。
なお、シェルでホームディレクトリを手動作成してはいけない。理由はパーミッションエラーでホームディレクトリにSMBやAFP経由で読み書きができないことがあるため。

各ユーザーのホームディレクトリはWindows ACLのパーミッション管理でディレクトリが作成される。シェルでディレクトリを手動作成した時はUnixのACL設定しかされていないので、SMBでの読み書きに問題が起きることがある。手動でACL管理コマンドを叩けば設定ができなくもないが、ここはSMBサーバの機能にお任せした方が良い。

むすび

共有フォルダとホームディレクトリという2通りの使い方それぞれの場合について、SMBとAFPの共存を検証しながら分かってきた設定を紹介した。sambaとafpdは別物のサービスなので、同じフォルダを2種類のファイル管理を走らせるには長い説明になってしまったが工夫が必要。でも設定すれば対処はできる。
ネットワーク共有で他人から見えないホームディレクトリ型のフォルダのNASは、個人のファイルを格納できるので、Windowsのバックアップ履歴やMacのTime Machineの保存先にも使えるだろう。ただし、シェルからは各ホームディレクトリの中身は丸見えなのでTrueNASでSSHを有効にする場合は注意されたし。

Profile

Profile header image


ampspeed

炎上している開発プロジェクトの火消し屋をやってます。

サイト内検索