TrueNAS 12.0 版を掲載してみました。
TrueNAS の SMB を ACL Manager で説明してみる
FreeNAS の SMB を 11.2 のUIで説明してみるの焼き直しです。 FreeNASのUIとして11.3でACL Managerという機能が装備されたので、それを利用していくスタイルです。 基本的なSMB設定は、 FreeNAS 11.3 で SMB 共有を設定する でざっくり説明しています。
FreeNAS 11.3 の ACL Manager は基本的には
Storage > Pools > プールの中の任意のデータセットの右の縦三点 > Edit ACL
から入ることができます。
FreeNAS の SMB といってもいわゆる Samba をGUIで設定しているわけで、特別なことはないと思うのですが、よく考えたら、FreeNAS を使うまで Samba なんて使ったことがない人などもいるかもしれないし、それこそそのコストパフォーマンスから、FreeNASこそが初NAS(というか初非Windows OS)だったりする人もいるのだろうなあ、と思って、自分が普段設定するときのいつもの設定内容(FreeNAS 11.2 のインストール参照)だけでなくて、もう少し説明があってもいいかな、と思いました。
英語ですが、チャレンジングな方は FreeNAS Documentation の 11.3-RELEASE User Guide の 12.5. Windows (SMB) Shares や、10.2.13. ACL Managementも参考にしてみてください。
とまあ新機能なんで試してみましたが、FreeNASでそんな詳細なアクセス権設定が必要かというとちょっとACL Managerで管理するべきか迷っているところはあります
Windows (SMB) Shares の基本設定は、
Services - SMB のところでできます。
通常設定する部分は、
NetBIOS Name を既存のコンピューターと、下記のWorkgroup名と重複しないように15文字以下で決める(初期値はFreeNASのホスト名から生成される)
NetBIOS Alias エイリアス(別名)を15文字以下で設定できる。(任意)
Workgroup は既存の Windows の設定と合わせる(まんま「WORKGROUP」とか「MSHOME」とか。Windows マシン側のコンピュータのプロパティで確認してみてください。Windows 10はエクスプローラーでPCを右クリックしてプロパティ)
Description は説明なので適当に変更してください。
□ Enable SMB1 support はSMB1でアクセスできなければならない環境がある時にチェックするんだけど、セキュリティ的に非推奨なので、できればSMB1でなければアクセスできない環境の方のアップデートを検討。
大きな変更点として、
DOS Charset の項目がなくなりましたので、念のためにCP932を設定する手順が不要になったことでしょうか。
と設定してください。(FreeNAS 11.3-RELEASE User Guide 13.11. SMB)
NTLMv1 Auth を有効にすると、Windows XPのような古いクライアントでの接続を助けますが、Windows 7以降のクライアントなどは接続できなくなったりするらしいです。こちらも特殊な環境でなければ非推奨。
共有する対象は、
Volume または、 Dataset か その中のフォルダになりますので、
適当に作成してください。
Permission を GUI で設定できるので、共有フォルダごとに対応する Dataset を作成して設定するのがお勧めなのではないかと思います。
Dataset の作成時、一番下の Share Type を
Generic から SMB に変更します。
(公式動画がそのように指示してるけど、公式ドキュメントによると、ACLモードをRestricted、Case SensitivityをInsensitiveに設定するだけらしいので、Genericのままだと、ACLモード Passthrough、Case Sensitivity Sensitive っぽい。Windows は Case Sensitive じゃないので、Insensitive か Mixed で運用すべき。ACLモードは Passthroughでもいいと思うけど、そうするとなおさらACLで管理している意味が…まあこれまではUnixタイプのアクセス権管理でやってたので、そのままでもいいのでしょうが)
Share Type Generic で、 Case Sensitivity Mixedにして、Edit Permisiions でUnix風に管理するなら従来通りでもいいかも。
Share Type SMB にすると、Edit Permissions は Dataset Has Complex ACLs とかいわれて使わせてくれないので今回は Edit ACL でやってみることにします。
Poolの左のvをクリックして、Dataset を表示させて右の縦三点から Edit ACL 。
初期設定はこんな感じ。
続いて共有フォルダ自体は、
Sharing - Windows (SMB) Shares - ADD
から作成することでができます。
パスをマウスで指定したい場合は、/mntの左側の▼をクリックして展開していきます。
ということで、ありがちな設定パターンを紹介してみます。
■ アクセス制限なし(誰でも読み書き)
ネットワーク内に自分以外のユーザーがいない、とか、小さなグループのネットワーク内の共有で、いちいちユーザー設定(アクセス権)なんて必要ない、という場合に利用するかと思います。
対象のDatasetの右側の縦三点をクリックして Edit ACL
Default ACL Options で OPEN
owner@ フルコントロール
group@ フルコントロール
everyone@ 変更
となるので、これで SAVE でいいと思います。
(owner root group wheelのまんま)
あとは、ゲストアクセスを可とする設定もありますが、ゲストアクセスを可とすると、Windows 10のセキュリティ変えないとアクセスできないのでやらなくていいかと。
■ ドメインコントローラーでアクセス制限
すでにドメインコントローラーを立てている時点でここで説明する必要はないと思うので省略。クライアントの Windows の側のUIで設定できたりするわけだけど、Samba とドメインコントローラーでの間の不具合とかにも注意が必要。
Windows のクライアント側でアクセス権を設定するのもいまいちインターフェースが洗練されていないのでオススメしない。途中のフォルダから下が別の共有フォルダから持ってきたせいでアクセス権がちぐはぐ、とかあるある過ぎる。
■ FreeNASのユーザーとグループでアクセス制限
FreeNAS は Account のところでユーザーを作成したり、グループを作成したりできます。
ユーザーを作成する際に、自動的にユーザー名と同じグループを作成したりすることができます。このユーザーやグループを使用して共有フォルダへのアクセス権を設定することができます。
ユーザーやグループを変更するときは、
▼から選んだら、
Apply User
をチェックします。
その場合は、Windows (SMB) Share - ADDのところでは、
Allow Guest Access:
のチェックは外しておきます。
その上で以下の●印の項目でご自身の希望に近い設定を行ってみてください。
(上記だけで済むわけではありません)
FreeNAS上に作成したユーザーと、Windows で使用しているユーザーアカウントとが同一で、パスワードとが一致していると、共有フォルダにアクセスするときにいちいち聞かれないので便利です。なお、Windows 側がマイクロソフトアカウントと統合してしまっていたり、日本語名のアカウントを作成してしまったりしていて同じものを設定できない場合は、共有フォルダに接続するときに表示されるダイアログで作成したユーザーとパスワードを指定して記憶させればいいです。登録されていないユーザーもこのユーザー名とパスワードが分かってれば同じ権限でアクセスできるわけです。(もっとも、それを区別するためにいちいち FreeNAS にユーザーを登録するのですけどね)
うまく設定できない、という記事を見かけましたが、「FreeNASと同一のユーザー名でパスワードの違うアカウント」があると一筋縄ではいかなくなります。(どうしてそんな運用がしたいのかはわかりませんが、メーカー製のプレインストールPCとか漫然と初期状態のまま使ってると危ないかも)そのような場合は、FreeNAS側の同一のユーザー名をあえて削除して、明確に違うユーザー名を使うようにするか(そうすれば接続時にネットワーク資格情報を訊かれます)、Windows 側で、ユーザー名を変えて作り直すか、Windows側で、資格情報マネージャーを使って、Windows資格情報として、当該のFreeNASへ作成されているユーザーとパスワードを指定する方法でしょうか。資格情報を登録したらパソコンを再起動してから試してみてください。
こんな画面でFreeNASに設定しているユーザー名とパスワードを入力し、資格情報を記憶する。
この辺は FreeNAS や SMB 側の問題というより、Windows 8 以降のマイクロソフトアカウントとローカルアカウントの機能の側の問題なので割愛。
(ユーザーの設定のところに、 Microsoft Account というチェックボックスがあるのでなんとかできるんじゃないかとは思いますが、自分が Windows は基本的にローカルアカウントなので)
● 自分のみ読み書き、他には非公開
(自分専用) 対象の Dataset を選択して、Edit ACL で、Default ACL Options で RESTRICTED を選び、
(まあ、初期値 RESTRICTED っぽいけど)
User に自分、
Geoup に自分グループを指定してSAVE。
これで FreeNAS の共有フォルダにアクセスできるのは自分と、自分グループのメンバーのみとなり、自分グループが自分だけなら、家族や同僚から覗かれなくなります。
● 自分のみ読み書き、他には読み取り専用
(自分が管理者で、他の利用者に提供する。他の利用者はユーザー登録不要。ドライバ置き場など)
Default ACL Options で OPEN を選び、
User に自分を指定し、
Group は初期値 wheel のまま(変えてもいいけど)
右側の group@ と everyone@ の
Permissions を Read にして SAVE
● 自分と、指定したユーザーのみ読み書き、他には非公開
(自分が管理者で、他の利用者の一部との間でのみ共有する。幹部用ファイルなど)
User に自分ユーザーを指定し、
Group に自分グループを指定。許可するユーザーを指定するグループを別途作成して指定しても構いません。簡単なのは、User の名前のグループを使用することでしょうか(ユーザー作成時に同時に作成するようにしていれば)。もちろん共有名のグループを別途作成する方法もあると思います。
Default ACL Options で RESTRICTED を選び、
User に自分を指定し、
Group は自分グループを指定してSAVE
また、自分以外のアクセスを許可するユーザーは、それぞれユーザーを作成し、
そのユーザーの Auxiliary groups で自分グループをクリックしてチェックされた状態にしておきます。
自分専用(ネットワーク内に自分しかいない)のFreeNASの場合は、rootユーザーとrootのパスワードをWindowsに記憶させてそれでアクセスしている例を他のサイトでよく見かけます。また、少人数の信頼できるメンバー間であれば、rootのパスワード自体を共有することなどもあるでしょうが、一応、上記のような設定をして、それぞれのユーザーを作成して、それぞれのユーザーでアクセスするようにするのがセオリーなんじゃないかな、と書いてみました。
とりあえずありそうなパターンを挙げてみましたが、こんな感じで、11.3からは、ACL Manager を利用して、Windows のアクセス権設定と同様の運用が FreeNAS の GUI で利用できるようです。
複数のグループやグループの入れ子で管理したい場合はこの設定の範囲では賄えません。
Samba と ActiveDirectory の連携もバージョンによってうまくいかなかったりすることがあります。
あくまで GUI の範囲で管理できる程度、というイメージで例を挙げてみました。
なお、Windows でアクセスする場合、アクセス権がキャッシュされているので、設定した内容が即反映されないせいでうまくいっていないものと思われることがあります。
そのような場合は、Windowsのコマンドラインで、
net use * /DELETE
を実行することで、キャッシュされていたアクセス権がリセットされます。
(それでもうまくいかない場合はなにはともあれ Windows を再起動)
■ ACL Manager の各パラメータの説明
上記で触れなかったパラメータも含め翻訳に挑んでみます。アクセス制御リスト(ACL)は、データセットに関連付けられ、そのデータセット内のディレクトリまたはファイルに適用されるアカウント権限のセットです。これらの権限は、ユーザーがデータセットの内容に対して実行できるアクションを制御します。ACLは、通常、共有データセットに対するユーザーの操作を管理するために使用されます。ACLを持つデータセットの場合は、ディレクトリブラウザで名前に(ACL)が付加されます。
新しいファイルまたはディレクトリのACLは、通常、親ディレクトリのACLによって決定されます。例外は、親ACL owner@、group@、またはeveryone@エントリにFile InheritまたはDirectory Inheritフラグがない場合です。これらの継承されないエントリは、Sambaの作成マスクとディレクトリマスク、またはumask値に基づいて、新しく作成されたファイルまたはディレクトリのACLに追加されます。
デフォルトでは、ファイルACLは、同じデータセット内で移動または名前変更されても保持されます。SMB winmsaモジュールはこの動作を無効にして、同じデータセット内であってもファイルが移動するたびにACLを再計算させることができます。
SMB共有用に最適化されたデータセットは、ACLの変更を制限できます。Dataset Options表のACL Modeを参照してください。
ACLは、 Storage→Poolsのアクセスコントロールエントリー(ACEs)を追加したり削除したりすることにより変更されます。目的のデータセットを検索し、縦三点(オプション)をクリックして、Edit ACLを選択します。ACL Manager が開きます。ACLを持つデータセットのアクセス権を変更するには、ACL Managerを使用する必要があります。
ACL Managerのオプションは、File Information、Access Control List、およびAdvancedセクションに分かれています。表10.2 .6は、これらのオプションをセクションでソートしていjます。
Table 10.2.6 ACL Options
File Information
Path 変更するデータセットの場所。読み取り専用。
User データセットを制御するユーザー。このユーザーは、常にACLの読み取りまたは書き込み、および属性の読み取りまたは書き込みの権限を持っています。手動で作成したユーザーまたはディレクトリサービスからインポートしたユーザーがドロップダウンメニューに表示されます。
Group データセットを制御するグループ。このグループには、@groupタグに付与されているすべての権限があります。手動で作成したグループやディレクトリサービスからインポートしたグループは、ドロップダウンメニューに表示されます。
Default ACL Options デフォルトACL。エントリを選択すると、一般的なアクセス権の状況に合わせて設定されたプリセットACLがロードされます。
Access Control List
Who アクセス制御エントリ(ACE)ユーザーまたはグループ。このエントリの特定のユーザーまたはグループを選択します。このエントリを選択したユーザーに適用するにはowner@を、選択したグループに適用するにはgroup@を、このエントリをすべてのユーザーとグループに適用するにはeveryone@を選択します。setfacl(1) NFSv4 ACL ENTRIESを参照してください。
User このACLエントリーが適用されるユーザー・アカウント。選択したタグが User の場合にのみ表示されます。
Group このACLエントリーが適用されるグループ。選択されたタグが Group の
場合にのみ表示されます。
ACL Type 選択した [Who] にPermissions[権限]を適用する方法。Allow「許可」 を選択して指定した権限を付与し、 Deny「拒否」 を選択して指定した権限を制限します。
Permissions Type アクセス許可の種類を選択します。Basic[基本]は、一般的なアクセス許可を示します。Advanced[詳細] には、詳細に制御するための各アクセス許可の種類が表示されます。
Permissions 選択したタグに適用する権限を選択します。選択肢は、権限タイプによって異なります。各権限の説明については、権限リストを参照してください。
Flags Type 表示するACE継承フラグのセットを選択します。Basic[基本] は、不特定の継承オプションを示します。Advanced[詳細] は、より詳細に制御するための特定の継承設定を示します。
Flags このACEをデータセット内の新しく作成されたディレクトリおよびファイルに適用する方法。Basic[基本]フラグはACEの継承を有効または無効にします。Advanced[詳細]フラグを使用すると、データセット内のファイルとディレクトリにACEを適用する方法を詳細に制御できます。高度な継承フラグについては、継承フラグの一覧を参照してください。
Advanced
Apply permissions recursively 現在のデータセットのすべての子データセットに権限を再帰的に適用します。Apply permissions recursively[アクセス許可を再帰的に適用する] が設定されている場合にのみ表示されます。
Strip ACLs 現在のデータセットからすべてのACLを削除する場合に設定します。Apply permissions recursively[許可を再帰的に適用する] および Apply permissions to child datasets[許可を子データセットに適用する] が設定されている場合は、ACLもディレクトリおよび子データセットから再帰的に削除されます。
追加のACEを作成するには、ADD ACL ITEM「ACL項目を追加」 をクリックし、追加したフィールドを設定します。ACLにはACEが1つ必要です。
アクセス制御リスト、アクセス権、および継承フラグの詳細は、setfacl(1)、 nfs4_acl(5)、およびNFS Version 4 ACLs memoを参照してください。次のリストに、ACEに適用できる各権限またはフラグと簡単な説明を示します。
ACEには、さまざまな基本アクセス権または高度なアクセス権を設定できます。
Basic Permissions
基本アクセス権
Read : ファイルまたはディレクトリの内容、属性、名前付き属性、およびACLを表示します。Traverse アクセス権が含まれます。
Write : ファイルまたはディレクトリの内容、属性、および名前付き属性を調整します。新しいファイルまたはサブディレクトリを作成します。Traverse 権限が含まれます。
Modify : ACLの内容または所有者の変更を除き、すべてのアクセス権が適用されます。
Traverse : ファイルを実行するか、ディレクトリ内を移動します。[読み取り] アクセス許可も適用されない限り、ディレクトリの内容は表示されません。ディレクトリ内のファイルを走査して表示するが、個々のファイルを開くことができないようにするには、走査と読み取りのアクセス許可を設定してから、高度なディレクトリ継承フラグを追加します。
Full Control : すべての権限を適用します。
Advanced Permissions
高度なアクセス権
Read Data : ファイルの内容を表示するか、ディレクトリの内容を一覧表示します。
Write Data : 新しいファイルを作成するか、ファイルの任意の部分を変更します。
Append Data : ファイルの末尾に新しいデータを追加します。
Read Named Attributes : 名前付き属性ディレクトリーを表示します。
Write Named Attributes : 名前付き属性ディレクトリーを作成します。名前付き属性の読み取りパーミッションとペアにする必要があります。
Execute : ファイルの実行、移動、またはディレクトリの検索を行います。
Delete Children : ディレクトリ内からファイルまたはサブディレクトリを削除します。
Read Attributes : ACL以外のファイルまたはディレクトリ属性を表示します。
Write Attributes : ファイルまたはディレクトリのACL以外の属性を変更します。
Delete : ファイルまたはディレクトリを削除します。
Read ACL : ACLを表示します。
Write ACL : ACLとACLモードを変更します。
Write Owner : ファイルまたはディレクトリのユーザーとグループの所有者を変更します。
Synchronize : サーバとの同期ファイルの読み取り/書き込み。この許可はFreeBSDクライアントには適用されません。
基本継承フラグは、ACE継承のみを有効または無効にします。詳細フラグを使用すると、新しいファイルまたはディレクトリにACEを適用するための詳細な制御が可能になります。
File Inherit : ACEはサブディレクトリおよびファイルとともに継承されます。新しいファイルに適用されます。
Directory Inherit : 新しいサブディレクトリは完全なACEを継承します。
No Propagate Inherit : ACEは1回だけ継承できます。
Inherit Only : ACEをアクセス権チェックから削除しますが、新しいファイルまたはサブディレクトリへの継承は許可します。[継承のみ] は、これらの新しいオブジェクトから削除されます。
Inherited : ACEが別のデータセットから継承されたときに設定されます。