Samba4でファイル共有

(2006.1.28 ページを分離) (2005.3.23, 2005.12.11, 2007.8.9更新) (2008.8.13 全体的に書き直し。)

(2014.4 Samba4対応)

Note.

(2012.7) Samba は, Windows共有フォルダを簡単に立てれますが, ファイルのバージョン管理や, きめ細かいアクセス管理, ad-hocフォルダの管理が難しいなど, 組織が大きくなってくると, 運用が大変になってきます。

一定以上の規模の組織では, Enterprise Content Management System (ECM) を立てて, そこでファイル共有もおこなうほうがいいでしょう。

オープンソース (商用版もある.) の Alfresco ECM を紹介しています。Alfresco4 でファイル共有サーバ

Sambaは、オープンソースのSMB / CIFS (Common Internet File System) サーバ・ソフトウェアです。Windows機やMacOS X機をクライアントにして、フォルダやプリンタを共有できます。

Fedora 20 Linux には, Sambaバージョン4.1が含まれます。

Samba4では, Samba3と設定ファイルの書き方が変わっているところもあります。

[Samba3] ただ、Fedora Core では、プリンタの共有はSambaではなくCUPSを直接叩いたほうがいいようです。CUPSでの共有方法は、CUPSでLinuxのプリンタ (PIXUS) を共有する

_Samba 3.2 の見どころ

(2008.8.10 この節を追加。)

[Samba3] Samba 3.2は 2008年7月にリリースされました。特徴をいくつかピックアップしてみます。

'registry' based configuration system
net コマンドで共有を追加したり設定できるようになりました。
パス名の1024バイト、ファイル名の256バイト制限の撤廃
NTFSのパス名は 32,767 文字 (バイトではない) まで、パスの各要素は255文字までです。
代替データストリーム (alternate data streams) のサポート。
Samba 3.0 までは, 代替ストリームを含むファイルをSambaサーバにコピーすると、単に代替ストリームのデータが消失しました。

別ファイルか、ローカルデータベース、拡張属性 (extended attributes; xattrs) に保存します。

(2008.8.18)
Samba 3.2.0 では、Windows機からサーバ上にあるファイルの代替ストリームの読み書きはできますが、エクスプローラでファイルを移動すると、代替ストリームが分かれて置き去りになってしまいます。

まともに実用になるのは、バージョン3.2.1以降に持ち越しのようです。

Clustered file server support (実験的)
バックエンドに分散ファイルシステムを使えるようになりました。例えば、Red Hat Global File System (GFS), IBM General Parallel File System (GPFS).
Encrypted network transport
IPv6-only network support
Now Licensed under the GNU GPLv3
これまでの GPLv2 と GPLv3 は互換性がありませんので、混ぜると危険です。

_Sambaの設定方法

(1) 設定の流れ

Fedora Linux にはGUIでSambaの設定を行う system-config-samba コマンドがあります。このコマンドは設定ファイル smb.conf の内容を完全には解釈しないものの, 出発点としては使えます。

Sambaを設定するときは、いったん system-config-samba である程度設定したあと, smb.confファイルを直接編集することになります。

Fedora 20 Linuxでは, smb.confの場所は /etc/samba/smb.conf です。

(2) SWATのインストール

(2014.1.13)
SWATは,最近はメンテナンスされておらず、Samba バージョン4.1で取り除かれました。今後は smb.conf を手で編集します。

SWATを使う場合は、samba本体と別パッケージになっているので、yum コマンドでインストールする。

# yum install samba-swat

chkconfig コマンドまたは system-config-services コマンドでSWATを有効にする。

Linux機のWebブラウザで http://localhost:901/ にアクセスすればSWATの画面になる。

(3) 設定のテスト, 再起動

手でsmb.confを編集したあとは, エラーがないか確認しておいたほうがいい。testparm コマンドで smb.conf が正しいか確認できる。

# testparm

systemctlコマンドで再起動します。

# systemctl restart smb

[2015.11更新]
systemd の設定ファイルが不味くて, systemctl コマンドでは起動できないことがあります。/usr/sbin/smbd -D では起動できる。

/usr/lib/systemd/system/smb.service ファイルは、次のようになっています (一部);

ExecStart=/usr/sbin/smbd $SMBDOPTIONS

$SMBDOPTIONS は、/etc/sysconfig/samba ファイルで設定されます。抜粋します;

## Type:           string
## Default:        ""
## ServiceRestart: smb
SMBDOPTIONS=""

ここを "-D" にしてやればOK.

[2015.11 ここまで]

_サーバロール, セキュリティモード

(2007.8.9 この節追加。2008.8.10 加筆。)

以降, smb.confファイルについて説明します。

Samba は smb.conf ファイルの security命令でセキュリティモードを指定します。Samba 4.1では, 次の選択肢のいずれかを指定します.

どうしたいか 設定
スタンドアロンサーバ security = user
Windows NTドメインに参加 security = domain
Active Directoryドメインに参加 security = ads
NT 4.0 Primary Domain Controller (PDC) にする server role = classic primary domain controller
NT 4.0 Backup Domain Controller (BDC) にする server role = netbios backup domain controller
Active Directory ドメインコントローラ (DC) にする server role = active directory domain controller

security = "share", "server" は廃止されました。

Samba 3.2 では、Active Directory ドメインコントローラになることはできません (Samba 4.0 から対応)。Active Directory の前身、NT 4.0ドメインのPDC, BDC になることはできますが、NTドメインは廃れる予定です。

(1) スタンドアロンサーバ

小規模のネットワーク向けです。security = user とします。

[global]
  ; server role = standalone
  security = user
  ; passdb backend = tdbsam

"passdb backend"オプションは、新しくインストールするときは、tdbsam または ldapsam を指定します。tdbsam はローカルにパスワードを保存し、ldapsam はLDAPサーバを用います。

passdb backend = smbpasswd も互換性のために用意されていますが、非推奨です。

(2) Active Directoryドメインメンバ

別途、ドメインコントローラとして Windows Server を用意し、Samba はメンバとしてActive Directoryドメインに参加します。

[global]
  ; server role = member server
  security = ads

security = domain は、Windows NTドメインに参加する (NTドメインコントローラがユーザ認証する)もので、現在はこれを選択することはないと思います。

(3) ドメインコントローラ

"server role"命令に, 次のいずれかの値を指定します。

  • CLASSIC PRIMARY DOMAIN CONTROLLER
  • NETBIOS BACKUP DOMAIN CONTROLLER
  • ACTIVE DIRECTORY DOMAIN CONTROLLER

(略)

_フォルダの共有設定

(2007.1.19 この節追加。2008.8.13 更新。)

ここでは, スタンドアロンサーバとしてSambaサーバを立てる場合の, smb.conf での設定について説明します。

(1) ワークグループ, SMBバージョン

ワークグループ名を指定します。クライアント機の設定と合わせます。

[global]
    workgroup = ワークグループ名
    ; max protocol = SMB3
    min protocol = SMB2
    unix extensions = no

(2018.11)

min protocol は, server min protocol (G) の省略形です。これは重要で、設定必須です。

サーバ・クライアント間の通信方法は, Windowsのバージョンアップとともに変わっています。プロトコルのバージョン2と3は、両者をあわせて MS-SMB2 と呼ばれます。これまでのSMB/CIFSとは別物です。かなり高速化されました。

Samba バージョン3.6から SMB2 がサポートされました。対応表は、次のとおりです:

SMBバージョン Windowsバージョン Samba設定
SMB 2.0.2 Windows Vista SP1, Windows Server 2008
※Windows Vista RTM は SMB2ではありません。
SMB2_02
SMB 2.1 Windows 7, Windows Server 2008 R2 SMB2_10
SMB 3.0 Windows 8, Windows Server 2012 SMB3_00
SMB 3.0.2 Windows 8.1, Windows Server 2012 R2 SMB3_02
SMB 3.1.1 Windows 10, Windows Server 2016 SMB3_11

"SMB2" は SMB2_10 と見なされます。"SMB3" は SMB3_11 と見なされます。

もはやクライアントに Windows XPはないはずですから、問題が起こったときの分析をスムーズにするためにも, SMB2_02 以上を指定しましょう。通常は SMB2 で十分です。

Samba 4.1では, "max protocol" (=server max protocol) 命令のデフォルト値は SMB3 です。こちらはそのままで大丈夫です。

unix extensions は切る

Macが混在している環境では, unix extensions (G) を切っておかないと、inherit permissions (S), create mask (S), force create mode (S) などが無視される,という情報があります(未確認)。

ともかく, SMB2以降を使う場合は, 単に切っておけばいいのでは, と思います。

デフォルト値が yes なので、明示的に = no とします。

(2018.11)

Web上で, "strict allocate = yes" を推奨する記事がチラホラあります。しかし、これは誤りです.

Windows には「疎なファイル」(sparse file) があります。yesの場合, Windows 側からこれを作ったときに, Unix 側で実在のバイト列に展開されて、破綻します。デフォルト値は no で、このままにします。

noの場合は, Unix 側でも sparse file として作られます。(Samba 4.8 on Fedora 28, ext4 で確認)

代替ストリームの設定 [必須]

(2015.4.19 加筆)

Windowsは, 伝統的なUNIXと異なり, ファイルがバイトの並びではありません。一つのファイルが複数のストリームを持っています。

Windows の代替ストリームは、例えば、アクセス制御以外の, セキュリティに関する付加情報を保存したりするのに使われています。

Sambaで代替ストリームを有効にしないと、ローカル上のファイルをSambaサーバにコピーしたりする際に, 警告がでたりします。

代替ストリームを格納させるために, "vfs objects"命令を設定します。

[共有フォルダ]
  vfs objects = streams_xattr

streams_depot または streams_xattr が指定できます。

streams_depot 代替ストリームを別ファイルとして保存する. デフォルトでは共有フォルダ直下の .streams ディレクトリに格納される
streams_xattr 代替ストームを拡張属性に保存する。ただし、Linux のファイルシステムのほとんどは, 拡張属性の大きさに制限がある。大きなデータを代替ストリームに格納することはできない。(どのぐらいの大きさが保存できるか, は未確認。)

代替ストリームに大きなデータが置かれることは通常はないので、streams_xattr がいいでしょう。

_ユーザの登録

クライアントのWindows機ログインユーザ、SambaサーバのUNIXログインユーザ、Sambaユーザの名前を合わせておきます。

Sambaでのユーザ名、パスワードはSambaパスワードデータベースに保存します。

以前は smbpasswd コマンドでユーザを登録していましたが、pdbedit コマンドを使うようになりました。もはや smbpasswd コマンドでは新しいSambaユーザを登録できません。

例えば、ユーザの追加は次のようにします。

# pdbedit -a ユーザ名

ユーザ一覧は、--listオプション

# pdbedit --list

_SELinuxの設定

SELinuxが有効になっている場合, フラグを変更する必要があります。

homeディレクトリ以下を共有する場合は, 次のようにします。

# setsebool -P samba_enable_home_dirs on

または, Sambaサーバをインターネットに向けて立てることはないので、単にSELinuxを無効にしてもいいと思います。

_Windows側での設定

[スタート]メニューのプロパティ => [カスタマイズ]ボタンで, システム管理ツールを表示するようにします。

「コンピュータの管理」を開き, 操作 => 別のコンピュータへ接続、で、サーバに接続します。

フォルダのアクセス権限などを設定できます。

外部リンク