Samba を使用することで、 Unix マシンを MacOS や Windows, OS/2 マシンに対するファイルサーバや印刷サーバに仕立て上げることができます。 Samba は今や本格的な使用にも耐える複雑な製品になっています。 Samba の設定は YaST で行うことができるほか、設定ファイルを手作業で修正して設定することもできます。
Samba バージョン 4.17 およびそれ以降の openSUSE Leap では、 SMB1 プロトコルが無効化されています。
Samba の文書や YaST のモジュールでは、それぞれ下記のような用語を使用します。
Samba では NetBIOS サービスをベースにした SMB (Server Message Block) というプロトコルを使用しています。 Microsoft 社はソフトウエアの製造元に向けてプロトコルを公開しているため、他のオペレーティングシステムからでも Microsoft のオペレーティングシステムに接続できるようになっています。なお、 Samba では SMB プロトコルを TCP/IP プロトコル上で動作させていることから、 Samba に接続するクライアントには TCP/IP プロトコルをインストールしておかなければなりません。
CIFS (Common Internet File System) プロトコルは SMB1 としても知られているプロトコルで、 SMB プロトコルの初期のバージョンです。 CIFS は TCP/IP を介して遠隔のファイルシステムにアクセスするためのプロトコルを規定していて、共同作業のグループを作成したり、ネットワークを介して文書を共有したりすることができます。
なお、 SMB1 は Microsoft Windows Vista™ 以降で提供されるようになった SMB2 に取って代わられています。その後、 Microsoft Windows 8™ と Microsoft Windows Server 2012 では SMB3 が提供されるようになっています。なお、最近のバージョンの Samba では、セキュリティ上の理由から、 SMB1 は無効化されています。
NetBIOS は、ネットワーク内でのコンピュータ同士の名前解決や通信を行うために設計されたソフトウエアインターフェイス (API) です。 NetBIOS はネットワーク内でホスト名の重複が生じないように予約する処理を行います。予約が完了したホスト同士は、 NetBIOS プロトコル内でホスト名によるアクセスができるようになります。なお、名前を管理するための中央サーバのような仕組みは存在せず、ネットワーク内で既に使用されている場合を除いて、任意の名前を予約することができます。 NetBIOS は様々なネットワークプロトコルに対応していますが、その中の比較的シンプルな実装として、 NetBEUI と呼ばれる、ルーティングに対応していないプロトコルにも対応しています (NetBIOS API とよく混同されます) 。このほか NetBIOS は Novell 社提供の IPX/SPX プロトコルでも利用できますが、 Samba のバージョン 3.2 以降では IPv4 および IPv6 上での NetBIOS にのみ対応しています。
なお TCP/IP で送信される NetBIOS のホスト名は、 /etc/hosts
や DNS で管理される名前とは独立して動作します。また NetBIOS では、独自の独立した名前付け規約が存在しています。ですが、通常は DNS のホスト名と NetBIOS の名前を一致させて、管理上の混乱を避けておくことをお勧めします。 Samba でも特に指定のない限り、 DNS 名と NetBIOS の名前は一致するように動作します。
Samba サーバは SMB/CIFS サービスや NetBIOS over IP のホスト名管理サービスを、クライアントに対して提供する仕組みです。 Linux では、 Samba サーバは SMB/CIFS サービスを提供する smbd
、ホスト名管理サービスを提供する nmbd
、そして認証機能を提供する winbind
の 3 つから構成されています。
Samba クライアントは、 SMB プロトコルを介して Samba サーバが提供するサービスを使用するシステムを意味します。 Windows や MacOS などの一般的なオペレーティングシステムが SMB プロトコルに対応しています。なお、 TCP/IP プロトコルも全てのコンピュータにインストールしておかなければなりません。 Samba は様々な Unix 系オペレーティングシステムに対して、クライアント機能を提供しています。 Linux の場合は、 Linux のシステムレベルで SMB の資源を利用することができるよう、 SMB 向けのカーネルモジュールが用意されています。そのため、 Samba クライアント側では、デーモンを動作させる必要がありません。
SMB サーバは、 共有 と呼ばれるものを介してクライアントに資源を提供します。共有はサーバ内の特定のディレクトリ (およびそれ以下のディレクトリ) を表すものであるほか、プリンタを表す場合もあります。また、共有には 共有名 を付けて公開し、名前でアクセスを行います。共有名には任意の名前を付けることができますので、ディレクトリ名と必ずしも一致する必要はありません。また、プリンタについても名前を設定します。クライアント側からは名前でプリンタにアクセスします。
また、共有名がドル記号 ( $
) で終わるものは隠し共有として扱われます。このような共有は Windows コンピュータから共有名を参照した場合、一覧表示には現れないものになります。
ドメインコントローラ (DC) は、ドメイン内のアカウントを処理するサーバです。データを複製する目的で、 1 つのドメイン内に複数のドメインコントローラを設置することもあります。
Samba サーバをインストールするには、 YaST を起動して
› を選択し、表示されたウインドウ内で › を選んで を選択します。あとは を押して必要なパッケージをインストールします。Samba サーバは、システムの起動時に自動的に開始することができるほか、手作業で開始するように設定することができます。開始と停止のポリシーは、 21.4.1項 「YaST を利用した Samba サーバの設定」 で説明しているとおり、 YaST の Samba サーバ設定内で指定することができます。
コマンドラインから Samba サービスを停止するには、 systemctl stop smb nmb
を実行します。 Samba サービスを開始するには、 systemctl start nmb smb
を実行します。 smb
サービスを開始することで、 winbind
も必要に応じて自動的に開始されます。
winbind
winbind
は個別のサービスとして提供されているもので、パッケージとしても samba-winbind
という別の名前のパッケージになっています。
openSUSE® Leap 内での Samba サーバは、 2 種類の異なる方法で設定することができます。 1 つは YaST を利用する方法、もう 1 つは手作業で設定する方法です。手作業で設定を行うことで、より細かい設定を行いことができますが、 YaST GUI ほどの利便性はありません。
Samba サーバを設定するには、 YaST を起動して
› を選択します。初めてモジュールを起動した場合は、
のダイアログが表示され、サーバの管理に関わる基本的な設定を行うことができます。また設定の最後では、 Samba の管理者パスワード ( ) を入力します。 2 回目以降のモジュール起動では、 ダイアログが表示されます。ダイアログは 2 つの手順から構成され、必要であれば詳細な設定を行うことができるようになっています:
では、新しいワークグループまたはドメインの名前、もしくは既存の名前を選択して を押します。
次の手順では、サーバをプライマリドメインコントローラ (PDC) として動作させるか、もしくはバックアップドメインコントローラ (BDC) として動作させるか、もしくはドメインコントローラとして動作させないようにするかを選択することができます。選択を行ったら
を押します。詳細なサーバ設定を行いたくない場合は、
を押してそのまま閉じてください。最後に表示されたポップアップボックスで を入力します。全ての設定は、
ダイアログ内で後から変更することができます。ダイアログには , , , , の各タブが用意されています。最新バージョンの openSUSE Leap やその他の最新 Linux ディストリビューションをお使いの場合、安全性の低い SMB1/CIFS プロトコルが既定で無効化されています。しかしながら、既存の Samba サーバの場合、 SMB1 プロトコルのみを使用するように構成されているものも存在しています。このようなサーバに接続しているクライアントに対応するには、少なくとも SMB 2.1 プロトコルに対応できるように設定する必要があります。
環境によっては SMB1 プロトコルのみを使用できるものもあります。たとえば SMB1 や CIFS の Unix 拡張に依存して動作しているような場合です。これらの拡張は新しいバージョンのプロトコルには移植されていませんので、そのような環境をお持ちの場合は、環境を変更するか、もしくは 21.5.2項 「クライアント側での SMB1/CIFS 共有のマウント」 をお読みください。
SMB 2.1 プロトコルに対応するよう設定するには、 /etc/samba/smb.conf
ファイル内のグローバルパラメータに server max protocol = SMB2_10
を設定します。設定可能な値の一覧について、詳しくは man smb.conf
をお読みください。
Samba サーバモジュールを初めて起動した場合も、初回起動時の設定を行うと、 21.4.1.1項 「Samba の初期設定」 にあるとおりの ダイアログが表示されるようになります。ここから Samba サーバの設定を変更することができます。
設定の変更が終わったら、
を押すと設定を保存することができます。21.3項 「Samba の開始と停止」 をお読みください。
タブでは、 Samba サーバの開始方法を設定することができます。システムの起動時にサービスを開始するように設定するには、 を選択します。手作業で開始するように設定するには、 を選択します。 Samba サーバの開始に関する詳細は、このタブでは、ファイアウオールのポートを開く作業を行うこともできます。ポートを開くには、
を選択します。複数のネットワークインターフェイスを接続している場合は、 を押して、 Samba サービスを提供するネットワークインターフェイスを選択することができます。インターフェイスを選択したら を押して閉じてください。TDB データベースではなく LDAP を使用するような場合など、 より高度なグローバル設定やユーザ認証設定を行いたい場合は、 を押します。
タブでは、ホストの所属するドメイン ( ) やネットワーク内での代替ホスト名の使用 ( ) を設定することができます。 このほか、名前解決に対して Microsoft Windows Internet Name Service (WINS) を使用するよう設定することもできます。この場合は、 を選択し、 を必要に応じて選択してください。他のドメインのユーザがお使いのドメインにアクセスできるようにするには、
のタブで適切な設定を行います。新しいドメインを追加するには を押します。選択したドメインを削除するには を押します。のタブでは、認証時に LDAP のサーバを使用するように設定することができます。 LDAP サーバとの通信をテストするには、 を押します。より高度な設定や既定値の設定を行うには、 を押します。
LDAP の設定に関する詳細は、 第5章 「389 Directory Server を利用した LDAP サービス」 をお読みください。
Samba をサーバとして使用したい場合は、 samba
をインストールしてください。 Samba のメインの設定ファイルは /etc/samba/smb.conf
です。このファイルは論理的に 2 つのパートから構成されていて、 [global]
セクションには全体的な設定が含まれています。また、下記の既定のセクションには、個別のファイルおよびプリンタの共有が含まれています:
[homes]
[profiles]
[users]
[groups]
[printers]
[print$]
このような構造になっていることから、共有に対する設定は個別に行うことができるだけでなく、 [global]
セクションで一括に設定することもできるようになっています。これにより、設定ファイルを読みやすくしています。
[global]
セクション内の下記のパラメータは、お使いのネットワーク環境や要件に応じて、修正する必要があります。これにより、 Windows 環境の他のマシンから、お使いの Samba サーバにアクセスすることができるようになります。
workgroup = WORKGROUP
この行は、 Samba サーバをワークグループに割り当てる設定です。 WORKGROUP
の箇所は、お使いのネットワーク環境に合わせて設定してください。また、お使いの Samba サーバは、ネットワーク内に同じ名前のものが存在していない限り、 DNS ホスト名でアクセスすることができます。ホスト名が利用できない場合は、 netbiosname=ホスト名
を指定して対応することもできます。このパラメータについて、詳しくは smb.conf
のマニュアルページをお読みください。
os level = 20
このパラメータは、お使いの Samba サーバがワークグループ内の LMB (ローカルマスタブラウザ; Local Master Browser) になるかどうかを設定するものです。 2
のように非常に小さい値を設定すると、もしも Samba サーバの設定を誤っていても、既存の Windows ネットワークに悪影響を及ぼさないようにすることができます。この設定値に関する詳細は、 Samba 3 Howto の Network Browsing 章をお読みください。 Samba 3 Howto については 21.9項 「さらなる情報」 をご覧ください。
他の SMB サーバ (Windows 2000 Server など) がネットワーク内に存在しない場合で、お使いの Samba サーバに対してローカル環境内に存在するコンピュータの管理を行わせたい場合は、 os level
の値をより大きく (例: 65
) してください。これにより、 Samba サーバがローカルネットワーク内の LMB として動作するようになります。
この設定を変更する場合は、既存の Windows ネットワーク環境に対してどのような影響が発生しうるのかをよくお確かめください。可能の限り、個別の環境を構築してテストするか、業務上の影響がない日を選んで設定してください。
wins support
および wins server
お使いの Samba サーバを WINS サーバのある Windows ネットワークに接続するには、 wins server
オプションを追加して、 WINS サーバのアドレスを指定してください。
もしもお使いの Windows マシンが異なるサブネット内に存在している環境で、 Samba サーバとの間で相互に通信を行う必要がある場合も、 WINS サーバを設定する必要があります。 Samba サーバを WINS サーバとしても動作させるには、 wins support = Yes
を設定してください。ただし、ネットワーク内の 1 台のみで、この設定を有効化してください。また、 wins server
と wins support
は、同じ smb.conf
ファイル内で同時に設定してはなりません。
セキュリティを強化する目的で、それぞれの共有にはパスワードを設定して保護することができます。 SMB では、アクセス許可を確認するための様々な方法が用意されています:
security = user
)この設定は、 SMB に対してユーザの考え方を導入します。各ユーザはサーバに対して、あらかじめ登録を行ってパスワードを設定する必要があります。登録完了後は、設定したユーザ名に従って個別にアクセスを許可するようになります。
security = ADS
)このモードでは、 Samba を Active Directory 環境内のドメインメンバーとして動作させます。このモードでは、 Samba サーバ内に Kerberos をインストールして設定しておく必要があります。また、 Samba サーバは ADS の領域内に参加させておく必要もあります。 ADS への参加は、 YaST の
モジュールで実施することができます。security = domain
)このモードは、 Samba サーバを Windows ドメインに参加させた場合にのみ正しく動作します。 Samba は指定されたユーザ名とパスワードを、 Windows NT Server のメンバーサーバと同様に、 Windows のプライマリもしくはバックアップドメインコントローラに送信して認証作業を行うようになります。また、このモードではパスワードの暗号化を yes
に設定する必要があります。
上記のユーザレベル、 ADS レベル、ドメインレベルのセキュリティ設定は、サーバ全体に対して適用されます。一方の共有をユーザレベルに、他方の共有を ADS レベルに、などの設定を行うことはできません。しかしながら、システムに複数の IP アドレスが設定されていれば、それぞれに対して別々の Samba サーバを起動することは可能です。
本件について、より詳しい情報は Samba 3 HOWTO に記載されています。また、 1 つのシステム内で複数のサーバを動作させる場合は、 interfaces
と bind interfaces only
のオプション設定にご注意ください。
クライアント側から Samba サーバへのアクセスは、 TCP/IP 経由でのみ実施することができます。 NetBEUI や IPX などのプロトコルは、 Samba では使用できません。
Samba クライアントを設定することで、 Samba サーバや Windows サーバにあるファイルやプリンタなどの資源にアクセスすることができるようになります。また、
› ダイアログを使用することで、 Windows ドメインや Active Directory ドメインに参加することもできます。また、 を選択すると、 Samba や Windows, Kerberos サーバなどの認証を使用することができるようになります。pam_mount
のマニュアルページをお読みください。
全ての設定が完了したら、
を押して閉じることで設定を保存することができます。SMB1 (CIFS) は SMB ネットワークプロトコルの初代となるバージョンで、古くて安全性も保たれておらず、作成者である Microsoft 自身も廃止対象としているものです。また、このようなセキュリティ面の理由から、 openSUSE Leap での mount
コマンドも、既定では SMB 2.1, SMB 3.0, SMB 3.02 の新しいプロトコルバージョンを利用して SMB 共有をマウントするようになっています。
しかしながら、このような変更は mount
コマンドを利用して、かつ /etc/fstab
を利用した場合にのみ適用されます。下記のいずれかの形態で使用した場合は、従来通り SMB1 を利用することができます:
smbclient
ツールを使用した場合。
openSUSE に同梱されている Samba サーバソフトウエアを使用した場合。
また、既定の設定のままで使用すると、 SMB1 にのみ対応している環境では、接続が失敗することになります。 SMB1 にのみ対応している環境には、下記のようなものがあります:
新しい SMB プロトコルバージョンに対応していない SMB サーバを利用して構築している場合。 Windows では、 Windows 7 もしくは Windows Server 2008 以降で SMB 2.1 に対応しています。
SMB1 や CIFS の Unix 拡張に依存した構成になっている場合。これらの拡張は、新しいプロトコルバージョンには移植されていません。
下記の手順を実施してしまうと、セキュリティ面の問題を突くことができる環境を構成することになります。セキュリティ面の問題について、詳しくは https://blogs.technet.microsoft.com/filecab/2016/09/16/stop-using-smb1/ (英語) をお読みください。
できる限り早急にお使いのサーバをアップグレードし、新しいバージョンの SMB プロトコルに対応するようにしてください。
openSUSE Leap での新しいプロトコルバージョンの有効化について、詳しくは 21.4.1.2項 「サーバ側における最新バージョンの SMB サーバへの対応について」 をお読みください。
現在の openSUSE Leap カーネルで SMB1 共有を有効化する必要がある場合は、 mount
コマンドを実行する際に vers=1.0
というオプションを追加してください:
#
mount -t cifs //ホスト/共有名 /マウントポイント –o username=ユーザ_ID,vers=1.0
それ以外にも、 openSUSE Leap では SMB1 を全ての共有に対して有効化することもできます。これを行うには、 /etc/samba/smb.conf
の [global]
セクション内に下記を追加します:
client min protocol = CORE
企業内の環境などでは、一般にユーザアカウントとパスワードを一括で管理する機能が求められます。 Windows ベースのネットワークの場合、この処理はプライマリドメインコントローラ (PDC) で処理を行います。 PDC として設定されている Windows Server が存在していればそれでもかまいませんが、 Samba サーバを PDC にすることもできます。このような構成は、 smb.conf
内の [global]
セクションを、 例21.3「smb.conf の global セクション」 のように設定することで可能になります。
[global] workgroup = WORKGROUP domain logons = Yes domain master = Yes
なお、ユーザアカウントとパスワードは、 Windows 側の暗号化方式に準拠させるため、事前の準備が必要となります。この作業は smbpasswd
-a ユーザ名
を実行することで行うことができます。また、 Windows のドメインの考え方では、コンピュータ向けのドメインアカウントを作成する必要もあります。コンピュータ向けのアカウントを作成するには、下記を実行します。
useradd ホスト名 smbpasswd -a -m ホスト名
コンピュータアカウントを作成する場合、 useradd
コマンドの末尾にドル記号を付ける必要があります。 smbpasswd
コマンドでは、 -m
オプションを指定すれば自動的に追加されます。また、 /usr/share/doc/packages/samba/examples/smb.conf.SUSE
にある設定例では、これを自動化するための設定が書かれています。
add machine script = /usr/sbin/useradd -g nogroup -c "NT Machine Account" \ -s /bin/false %m
Samba 側で上記のスクリプトが正しく実行されるようにするため、必要な管理者権限のある Samba ユーザを選択して、そのユーザを ntadmin
グループに追加してください。この Linux グループに属する全てのユーザが Domain Admin
になるようにするには、下記のコマンドを実行します:
net groupmap add ntgroup="Domain Admins" unixgroup=ntadmin
Linux サーバと Windows サーバを共存させているような環境では、それぞれが個別の認証システムや認証ネットワークを構成できるだけでなく、中央の 1 つの認証システムを利用するように構成することができます。 Samba では Active Directory ドメインとの協調作業を行うことができることから、 openSUSE Leap サーバを Active Directory (AD) のドメインに参加させることができます。
Active Directory ドメインに参加するには、下記の手順を実施します:
root
でログインして、 YaST を起動します。
› を選択します。
が表示されたら、 の欄に、参加したいドメインを入力します。
お使いのサーバの Linux 認証に SMB の認証を使用したい場合は、
を選択します。を押して閉じ、ドメインへの参加確認メッセージが表示されたら、それに応答します。
あとは Active Directory サーバの Windows 管理者のユーザ名と、パスワードを入力して
を押します。これでお使いのサーバは、認証データを Active Directory ドメインコントローラから取得できるようになっています。
それ以外にも、 realmd
ツールを利用して Active Directory に参加することもできます。詳しくは 21.7.1項 「Active Directory を管理するための realmd
の使用」 をお読みください。
Samba サーバが複数台存在するような環境では、 UID と GID がそれぞれ別々に管理されることになります。ユーザに対する UID の割り当ては、初回のログイン時に割り当てられることから、サーバ間では同じユーザ名でも UID が異なる結果になってしまいます。この問題を解決するには、識別情報のマッピング設定を行う必要があります。詳しくは https://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/idmapper.html をお読みください。
realmd
の使用 #Edit sourcerealmd
はネットワーク認証やドメインメンバーシップを設定するための DBus サービスです。
realmd
は DNS SRV レコードを読み込んで設定/使用可能なドメインもしくはレルムの一覧を検出します。まずは設定したい Active Directory のドメインに対して、 DNS SRV レコードが設定されていることを確認します。たとえば domain.example.com というドメイン名であれば、下記のような名前の SRV レコードになります:
_ldap._tcp.dc._msdcs.domain.example.com.
この DNS レコードは Active Directory 付属の DNS サーバで自動的に作成されるものです。
特定のドメイン名を検出するには、下記のようなコマンドを入力して実行します:
>
sudo
realm discover --verbose domain.example.com
* Resolving: _ldap._tcp.dc._msdcs.domain.example.com * Sending MS-CLDAP ping to: 192.168.20.10 * Sending MS-CLDAP ping to: 192.168.12.12 * Successfully discovered: domain.example.com ...
Active Directory のドメインに参加するには、下記のようなコマンドを入力して実行します:
>
sudo
realm join --verbose domain.example.com
Active Directory のドメインに参加が完了したあとは、ドメインアカウントに対してログインの許可を設定するだけです。具体的には下記のように入力して実行します:
>
sudo
realm permit --realm domain.example.com --all
特定のユーザに対してのみログインを許可したい場合は、下記のようなコマンドを入力して実行します:
>
sudo
realm permit --realm domain.example.com DOMAIN\\ユーザ名 DOMAIN\\ユーザ名
すべてのドメインアカウントに対してログインを拒否するように設定したい場合は、下記のようなコマンドを入力して実行します:
>
sudo
realm deny --realm domain.example.com --all
本章では、 Samba スイートのクライアントとサーバにおける、さらに高度な技術に関する説明を行っています。
systemd
を利用した CIFS ファイルシステムの自動マウント #Edit sourcesystemd
を利用することで、 CIFS 共有を起動時にマウントすることができます。これを行うには、下記の手順を実施します:
まずはマウントポイントを作成します:
>
mkdir -p マウントポイント
以降は マウントポイント に /cifs/shared
を指定したものとします。
次に systemd
のユニットファイルを作成します。このときユニットファイルのファイル名には、マウントポイントの "/" を "-" に置き換えたものを使用します。たとえば下記のようになります:
>
sudo
touch /etc/systemd/system/cifs-shared.mount
上記で作成したファイルには、下記の内容を記述します:
[Unit] Description=CIFS share from The-Server [Mount] What=//The-Server/Shared-Folder Where=/cifs/shared Type=cifs Options=rw,username=vagrant,password=admin [Install] WantedBy=multi-user.target
サービスを有効化します:
>
sudo
systemctl enable cifs-shared.mount
サービスを開始します:
>
sudo
systemctl start cifs-shared.mount
サービスが正しく開始できたかどうかを確認するには、下記のコマンドを実行します:
>
sudo
systemctl status cifs-shared.mount
CIFS で正しくマウントできたかどうかを確認するには、下記のように実行します:
>
cd /cifs/shared>
ls -l total 0 -rwxrwxrwx. 1 root root 0 10月 24 22:31 hello-world-cifs.txt drwxrwxrwx. 2 root root 0 10月 24 22:31 subfolder -rw-r--r--. 1 vagrant vagrant 0 10月 28 21:51 testfile.txt
Samba では、 btrfs ファイルシステム内に存在する共有に対して、クライアント側からファイルやディレクトリの圧縮フラグを遠隔で操作できるようになっています。 Windows エクスプローラでは、
› › 内で、透過圧縮の設定を行うことができます:圧縮フラグの設定されたファイルは、そのファイルに対してアクセスや修正があるごとに、透過的に圧縮もしくは展開されます。これは通常ストレージの容量を削減する効果がありますが、ファイルにアクセスする際に CPU の負荷がかかります。また、新しいファイルやディレクトリは、 FILE_NO_COMPRESSION を指定して作成していない限り、親ディレクトリの圧縮フラグを引き継ぐようになっています。
Windows エクスプローラでは、圧縮されたファイルと圧縮されていないファイルを、視覚的に区別できる形で表示します:
Samba 共有での圧縮機能を有効化するには、
vfs objects = btrfs
を /etc/samba/smb.conf
内の共有設定内に追加するか、もしくは YaST から › › を選択して、 にチェックを入れてもかまいません。
スナップショットはシャドウコピーとも呼ばれ、特定の時点におけるファイルシステムのサブボリュームのコピーを意味します。 Linux では、 Snapper を利用することで、これらのスナップショットを管理することができます。スナップショットは btrfs ファイルシステムのほか、シン・プロビジョン型の LVM ボリュームでも利用することができます。 Samba スイートでは、サーバとクライアントとの間で FSRVP プロトコルを利用することで、リモートのスナップショットを管理することができます。
Samba サーバにおけるスナップショットは、リモートの Windows クライアントから見ると、ファイルやディレクトリの 「以前のバージョン」 として見えるようになっています。
Samba サーバでスナップショット機能を有効化するには、下記の条件を満たさなければなりません:
SMB のネットワーク共有が、 btrfs のサブボリューム内に存在しなければなりません。
SMB ネットワーク共有のパスに対して、対応する Snapper の設定ファイルを用意する必要があります。 Snapper の設定ファイルを作成するには、下記のように実行します:
>
sudo
snapper -c <設定名> create-config/path/to/share
Snapper について、詳しくは 第3章 「Snapper によるシステムの復元とスナップショット管理」 をお読みください。
スナップショットのディレクトリツリーは、対応するユーザに対してアクセスを許可しなければなりません。詳しくは vfs_snapper のマニュアルページ内にある PERMISSIONS セクション ( man 8 vfs_snapper
) をお読みください。
リモートからのスナップショット機能に対応するには、 /etc/samba/smb.conf
ファイルを修正する必要があります。これは › › から行うことができるほか、手作業でも設定することができます。具体的には、対応する共有に対して、下記の設定を追加します:
vfs objects = snapper
なお、 smb.conf
を手作業で修正した場合は、 Samba サービスを再起動する必要があります:
>
sudo
systemctl restart nmb smb
設定作業を行うことで、 Windows エクスプローラのファイルやディレクトリの
タブ内に、 Snapper が作成したスナップショットが表示されるようになります。既定でのスナップショットは、 Samba サーバ内でコマンドラインユーティリティを使用するか、もしくは Snapper のタイムライン機能を利用することでのみ、作成もしくは削除することができます。
Samba では、ファイルサーバリモート VSS プロトコル (File Server Remote VSS Protocol; VSRVP) を利用することで、リモートのホストから共有に対するスナップショットを作成したり、削除したりできるようにすることができます。
21.8.3.1項 「以前のバージョン」 に書かれている設定と事前要件に加えて、 /etc/samba/smb.conf
内に下記のグローバル設定を追加する必要があります:
[global] rpc_daemon:fssd = fork registry shares = yes include = registry
これにより、 Samba の rpcclient
や Windows Server 2012 に付属する DiskShadow.exe
などの FSRVP クライアントから、 Samba の特定の共有に対してスナップショットを作成することができるほか、スナップショットの削除や新しい共有としての公開などを行うことができるようになります。
rpcclient
による Linux からのリモートスナップショット管理 #Edit sourcesamba-client
パッケージには、リモートの Windows Server や Samba サーバに対して、対応する共有のスナップショットを作成したり公開したりするためのリクエストを送信することができる、 FSRVP クライアントが含まれています。共有のマウントやバックアップなどは、 openSUSE Leap に付属する既存のツールを利用することができます。また、サーバへのリクエストは rpcclient
バイナリを利用して行います。
rpcclient
による Windows Server 2012 共有に対するスナップショット要求 #EXAMPLE
ドメイン内にある win-server.example.com
サーバに対して、 Administrator で接続する場合の例です:
#
rpcclient -U 'EXAMPLE\Administrator' ncacn_np:win-server.example.com[ndr64,sign]
Enter EXAMPLE/Administrator's password:
rpcclient
で SMB の共有が見えるかどうかを確認します:
#
rpcclient $> netshareenum
netname: windows_server_2012_share
remark:
path: C:\Shares\windows_server_2012_share
password: (null)
SMB 共有がスナップショットの作成に対応しているかどうかを確認します:
#
rpcclient $> fss_is_path_sup windows_server_2012_share \
UNC \\WIN-SERVER\windows_server_2012_share\ supports shadow copy requests
スナップショット共有の作成を要求します:
#
rpcclient $> fss_create_expose backup ro windows_server_2012_share
13fe880e-e232-493d-87e9-402f21019fb6: shadow-copy set created
13fe880e-e232-493d-87e9-402f21019fb6(1c26544e-8251-445f-be89-d1e0a3938777): \
\\WIN-SERVER\windows_server_2012_share\ shadow-copy added to set
13fe880e-e232-493d-87e9-402f21019fb6: prepare completed in 0 secs
13fe880e-e232-493d-87e9-402f21019fb6: commit completed in 1 secs
13fe880e-e232-493d-87e9-402f21019fb6(1c26544e-8251-445f-be89-d1e0a3938777): \
share windows_server_2012_share@{1C26544E-8251-445F-BE89-D1E0A3938777} \
exposed as a snapshot of \\WIN-SERVER\windows_server_2012_share\
サーバ側でスナップショット共有が公開されているかどうかを確認します:
#
rpcclient $> netshareenum
netname: windows_server_2012_share
remark:
path: C:\Shares\windows_server_2012_share
password: (null)
netname: windows_server_2012_share@{1C26544E-8251-445F-BE89-D1E0A3938777}
remark: (null)
path: \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy{F6E6507E-F537-11E3-9404-B8AC6F927453}\Shares\windows_server_2012_share\
password: (null)
スナップショット共有を削除します:
#
rpcclient $> fss_delete windows_server_2012_share \
13fe880e-e232-493d-87e9-402f21019fb6 1c26544e-8251-445f-be89-d1e0a3938777
13fe880e-e232-493d-87e9-402f21019fb6(1c26544e-8251-445f-be89-d1e0a3938777): \
\\WIN-SERVER\windows_server_2012_share\ shadow-copy deleted
サーバ側でスナップショット共有が削除されていることを確認します:
#
rpcclient $> netshareenum
netname: windows_server_2012_share
remark:
path: C:\Shares\windows_server_2012_share
password: (null)
DiskShadow.exe
による Windows からのリモートスナップショット管理 #Edit sourceWindows 側からも、 Linux Samba サーバ内の SMB 共有のスナップショットを管理することができます。 Windows Server 2012 には DiskShadow.exe
ユーティリティが用意されていますので、 21.8.3.3項 「rpcclient
による Linux からのリモートスナップショット管理」 で説明している rpcclient
コマンドと同様に、リモートの共有に対するスナップショットを管理することができます。なお、 Samba サーバ側では、あらかじめ注意して設定を行っておく必要があります。
下記は Samba サーバの共有のスナップショットを、 Windows Server のクライアント側から管理できるようにするための手順例です。なお、下記の例では EXAMPLE が Active Directory ドメインを、 fsrvp-server.example.com
が Samba サーバのホスト名を、 /srv/smb
が SMB 共有のパスをそれぞれ表しています。
YaST を利用して Active Directory ドメインに参加します。 詳しくは 21.7項 「Active Directory ネットワーク環境での Samba サーバ」 をお読みください。
Active Directory の DNS 項目が正しく設定されていることを確認します:
fsrvp-server:~ # net -U 'Administrator' ads dns register \ fsrvp-server.example.com <IP address> Successfully registered hostname with DNS
/srv/smb
内に btrfs のサブボリュームを作成します:
fsrvp-server:~ # btrfs subvolume create /srv/smb
/srv/smb
に対する Snapper の設定ファイルを作成します:
fsrvp-server:~ # snapper -c <snapper_config> create-config /srv/smb
YaST で /srv/smb
に対する新しい共有を作成します。このとき、 のチェックボックスにチェックが入っていることをご確認ください。また、 21.8.3.2項 「リモート共有のスナップショット」 で説明しているとおり、 /etc/samba/smb.conf
のグローバルセクションに下記の内容が追加されていることも、あわせてご確認ください:
[global] rpc_daemon:fssd = fork registry shares = yes include = registry
あとは systemctl restart nmb smb
を実行して Samba を再起動します。
続いて Snapper のアクセス権を調整します:
fsrvp-server:~ # snapper -c <snapper_config> set-config \ ALLOW_USERS="EXAMPLE\\\\Administrator EXAMPLE\\\\win-client$"
さらに .snapshots
サブディレクトリに対して、 ALLOW_USERS で許可されるユーザからのアクセスを許すように設定します:
fsrvp-server:~ # snapper -c <snapper_config> set-config SYNC_ACL=yes
'\' のエスケープ処理にご注意ください。 /etc/snapper/configs/<snapper_config>
内でエスケープ処理を行うため、コマンドの実行時には 2 回エスケープ処理が必要となります。
"EXAMPLE\win-client$" は Windows クライアントのコンピュータアカウントを表しています。 Windows 側では、最初の FSRVP リクエストを、このアカウントで認証して行います。
Windows クライアントのアカウントに対して、必要な権限を許可します:
fsrvp-server:~ # net -U 'Administrator' rpc rights grant \ "EXAMPLE\\win-client$" SeBackupPrivilege Successfully granted rights.
上記のコマンドは "EXAMPLE\Administrator" に対して実行する必要はありません。既に権限が許可されているためです。
DiskShadow.exe
の実行 #Windows Server 2012 を起動します (この例では WIN-CLIENT というホスト名とします) 。
openSUSE Leap と同じ Active Directory ドメイン (EXAMPLE) に参加します。
再起動します。
PowerShell を起動します。
DiskShadow.exe
を起動して、バックアップ手順を開始します:
PS C:\Users\Administrator.EXAMPLE> diskshadow.exe Microsoft DiskShadow バージョン 1.0 Copyright (C) 2012 Microsoft Corporation On computer: WIN-CLIENT, 6/17/2014 3:53:54 PM DISKSHADOW> begin backup
プログラム終了後やリセット/再起動後にも、シャドウコピーが保持されるように設定します:
DISKSHADOW> set context PERSISTENT
指定した共有でスナップショットが有効化されているかどうかを調べ、有効化されていればスナップショットを作成します:
DISKSHADOW> add volume \\fsrvp-server\sles_snapper DISKSHADOW> create シャドウ ID {de4ddca4-4978-4805-8776-cdf82d190a4a} のエイリアス VSS_SHADOW_1 は環境変数として設定されています。 シャドウ セット ID {c58e1452-c554-400e-a266-d11d5c837cb1} のエイリアス VSS_SHADOW_SET は環境変数として設定されています。 シャドウ コピー セット ID {c58e1452-c554-400e-a266-d11d5c837cb1} を使用してすべてのシャドウ コピーを照会しています * シャドウ コピー ID = {de4ddca4-4978-4805-8776-cdf82d190a4a} %VSS_SHADOW_1% - シャドウ コピー セット: {c58e1452-c554-400e-a266-d11d5c837cb1} %VSS_SHADOW_SET% - シャドウ コピーのオリジナル カウント数 = 1 - 元のボリューム名: \\FSRVP-SERVER\SLES_SNAPPER\ \ [ボリュームはこのマシンにありません] - 作成時間: 6/17/2014 3:54:43 PM - シャドウ コピー デバイス名: \\FSRVP-SERVER\SLES_SNAPPER@{31afd84a-44a7-41be-b9b0-751898756faa} - 作成元のコンピューター: FSRVP-SERVER - サービス コンピューター: win-client.example.com - 露出されていません - プロバイダー ID: {89300202-3cec-4981-9171-19f59559e0f2} - 属性: No_Auto_Release Persistent FileShare 一覧表示したシャドウ コピーの数: 1
最後にバックアップを完了します:
DISKSHADOW> end backup
スナップショットを作成したら、削除を行ったあと、削除ができたことを確認します:
DISKSHADOW> delete shadows volume \\FSRVP-SERVER\SLES_SNAPPER\ プロバイダー {89300202-3cec-4981-9171-19f59559e0f2} からボリューム \\FSRVP-SERVER\SLES_SNAPPER\ のシャドウ コピー {de4ddca4-4978-4805-8776-cdf82d190a4a} を削除しています [Attributes: 0x04000009]... 削除したシャドウ コピーの数: 1 DISKSHADOW> list shadows all コンピューター上のすべてのシャドウ コピーを照会しています... システム内にシャドウ コピーが見つかりませんでした。
マニュアルページ: samba パッケージでインストールされるマニュアルページの一覧を表示するには、 apropos samba
と入力して実行します。それぞれのマニュアルページを表示するには、 man マニュアルページの名前
のように入力して実行します。
SUSE 固有の README ファイル: samba-client パッケージには、 /usr/share/doc/packages/samba/README.SUSE
(英語) というファイルが含まれています。
追加のパッケージドキュメンテーション: samba-doc
パッケージを zypper install samba-doc
と入力して実行し、インストールしてください。
このドキュメンテーションパッケージは、ファイルを /usr/share/doc/packages/samba
にインストールします。ここにはマニュアルページの HTML 版のほか、設定例集なども含まれています (例: smb.conf.SUSE
) 。
オンラインのドキュメンテーション: Samba wiki にはさまざまな User Documentation (ユーザ向けドキュメンテーション) (英語) が含まれています。 https://wiki.samba.org/index.php/User_Documentation からアクセスしてください。