Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 openSUSE Leap 15.6

21 Samba Edit source

概要

Samba を使用することで、 Unix マシンを MacOS や Windows, OS/2 マシンに対するファイルサーバや印刷サーバに仕立て上げることができます。 Samba は今や本格的な使用にも耐える複雑な製品になっています。 Samba の設定は YaST で行うことができるほか、設定ファイルを手作業で修正して設定することもできます。

重要
重要: SMB1 のサポート廃止について

Samba バージョン 4.17 およびそれ以降の openSUSE Leap では、 SMB1 プロトコルが無効化されています。

21.1 用語 Edit source

Samba の文書や YaST のモジュールでは、それぞれ下記のような用語を使用します。

SMB プロトコル

Samba では NetBIOS サービスをベースにした SMB (Server Message Block) というプロトコルを使用しています。 Microsoft 社はソフトウエアの製造元に向けてプロトコルを公開しているため、他のオペレーティングシステムからでも Microsoft のオペレーティングシステムに接続できるようになっています。なお、 Samba では SMB プロトコルを TCP/IP プロトコル上で動作させていることから、 Samba に接続するクライアントには TCP/IP プロトコルをインストールしておかなければなりません。

CIFS プロトコル

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

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 サーバ

Samba サーバは SMB/CIFS サービスや NetBIOS over IP のホスト名管理サービスを、クライアントに対して提供する仕組みです。 Linux では、 Samba サーバは SMB/CIFS サービスを提供する smbd 、ホスト名管理サービスを提供する nmbd 、そして認証機能を提供する winbind の 3 つから構成されています。

Samba クライアント

Samba クライアントは、 SMB プロトコルを介して Samba サーバが提供するサービスを使用するシステムを意味します。 Windows や MacOS などの一般的なオペレーティングシステムが SMB プロトコルに対応しています。なお、 TCP/IP プロトコルも全てのコンピュータにインストールしておかなければなりません。 Samba は様々な Unix 系オペレーティングシステムに対して、クライアント機能を提供しています。 Linux の場合は、 Linux のシステムレベルで SMB の資源を利用することができるよう、 SMB 向けのカーネルモジュールが用意されています。そのため、 Samba クライアント側では、デーモンを動作させる必要がありません。

共有

SMB サーバは、 共有 と呼ばれるものを介してクライアントに資源を提供します。共有はサーバ内の特定のディレクトリ (およびそれ以下のディレクトリ) を表すものであるほか、プリンタを表す場合もあります。また、共有には 共有名 を付けて公開し、名前でアクセスを行います。共有名には任意の名前を付けることができますので、ディレクトリ名と必ずしも一致する必要はありません。また、プリンタについても名前を設定します。クライアント側からは名前でプリンタにアクセスします。

また、共有名がドル記号 ( $ ) で終わるものは隠し共有として扱われます。このような共有は Windows コンピュータから共有名を参照した場合、一覧表示には現れないものになります。

DC

ドメインコントローラ (DC) は、ドメイン内のアカウントを処理するサーバです。データを複製する目的で、 1 つのドメイン内に複数のドメインコントローラを設置することもあります。

21.2 Samba サーバのインストール Edit source

Samba サーバをインストールするには、 YaST を起動して ソフトウエア › ソフトウエア管理 を選択し、表示されたウインドウ内で 表示 › パターン を選んで ファイルサーバ を選択します。あとは 了解 を押して必要なパッケージをインストールします。

21.3 Samba の開始と停止 Edit source

Samba サーバは、システムの起動時に自動的に開始することができるほか、手作業で開始するように設定することができます。開始と停止のポリシーは、 21.4.1項 「YaST を利用した Samba サーバの設定」 で説明しているとおり、 YaST の Samba サーバ設定内で指定することができます。

コマンドラインから Samba サービスを停止するには、 systemctl stop smb nmb を実行します。 Samba サービスを開始するには、 systemctl start nmb smb を実行します。 smb サービスを開始することで、 winbind も必要に応じて自動的に開始されます。

ヒント
ヒント: winbind

winbind は個別のサービスとして提供されているもので、パッケージとしても samba-winbind という別の名前のパッケージになっています。

21.4 Samba サーバの設定 Edit source

openSUSE® Leap 内での Samba サーバは、 2 種類の異なる方法で設定することができます。 1 つは YaST を利用する方法、もう 1 つは手作業で設定する方法です。手作業で設定を行うことで、より細かい設定を行いことができますが、 YaST GUI ほどの利便性はありません。

21.4.1 YaST を利用した Samba サーバの設定 Edit source

Samba サーバを設定するには、 YaST を起動して ネットワークサービス › Samba サーバ を選択します。

21.4.1.1 Samba の初期設定 Edit source

初めてモジュールを起動した場合は、 Samba インストール のダイアログが表示され、サーバの管理に関わる基本的な設定を行うことができます。また設定の最後では、 Samba の管理者パスワード (Samba の管理者 (root) パスワード) を入力します。 2 回目以降のモジュール起動では、 Samba の設定 ダイアログが表示されます。

Samba インストール ダイアログは 2 つの手順から構成され、必要であれば詳細な設定を行うことができるようになっています:

ワークグループまたはドメイン名

ワークグループまたはドメイン名 では、新しいワークグループまたはドメインの名前、もしくは既存の名前を選択して 次へ を押します。

Samba サーバの種類

次の手順では、サーバをプライマリドメインコントローラ (PDC) として動作させるか、もしくはバックアップドメインコントローラ (BDC) として動作させるか、もしくはドメインコントローラとして動作させないようにするかを選択することができます。選択を行ったら 次へ を押します。

詳細なサーバ設定を行いたくない場合は、 OK を押してそのまま閉じてください。最後に表示されたポップアップボックスで Samba の管理者 (root) パスワード を入力します。

全ての設定は、 Samba の設定 ダイアログ内で後から変更することができます。ダイアログには 起動 , 共有 , 識別情報 , 信頼するドメイン , LDAP の設定 の各タブが用意されています。

21.4.1.2 サーバ側における最新バージョンの SMB サーバへの対応について Edit source

最新バージョンの 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 をお読みください。

21.4.1.3 高度な Samba の設定 Edit source

Samba サーバモジュールを初めて起動した場合も、初回起動時の設定を行うと、 21.4.1.1項 「Samba の初期設定」 にあるとおりの Samba の設定 ダイアログが表示されるようになります。ここから Samba サーバの設定を変更することができます。

設定の変更が終わったら、 OK を押すと設定を保存することができます。

21.4.1.3.1 サーバの開始 Edit source

開始 タブでは、 Samba サーバの開始方法を設定することができます。システムの起動時にサービスを開始するように設定するには、 システム起動時 を選択します。手作業で開始するように設定するには、 手動 を選択します。 Samba サーバの開始に関する詳細は、 21.3項 「Samba の開始と停止」 をお読みください。

このタブでは、ファイアウオールのポートを開く作業を行うこともできます。ポートを開くには、 ファイアウオールでポートを開く を選択します。複数のネットワークインターフェイスを接続している場合は、 ファイアウオールの詳細 を押して、 Samba サービスを提供するネットワークインターフェイスを選択することができます。インターフェイスを選択したら OK を押して閉じてください。

21.4.1.3.2 共有 Edit source

共有 タブでは、有効にする Samba の共有を選択することができます。なお、 homes や printers のように、いくつかの事前設定が用意されています。共有を選択して 状態切り替え を押すことで、 有効無効 の間を切り替えることができます。また、新しい共有を追加するには 追加 を、選択した共有を削除するには 削除 を押します。

ユーザが独自にディレクトリを指定して共有できるようにするには、 ユーザにディレクトリの共有を許可する を選択し、 許可するグループ 内に共有の設定を許可するグループを指定します。たとえば users のように指定した場合はローカルのグループを、 ドメイン\ユーザ のように指定した場合はドメインのグループを指定することができます。また、共有を設定するには、ファイルシステム側のアクセス権で許可しておかなければならないことにも注意してください。このほか、 最大共有数 を指定することで、作成することのできる共有数の最大値を制限することができます。認証を行わずにユーザの作成した共有にアクセスできるようにするには、 ゲストアクセスを許可 を選択してください。

21.4.1.3.3 識別情報 Edit source

識別情報 タブでは、ホストの所属するドメイン (基本設定) やネットワーク内での代替ホスト名の使用 (NetBIOS ホスト名) を設定することができます。 このほか、名前解決に対して Microsoft Windows Internet Name Service (WINS) を使用するよう設定することもできます。この場合は、 ホスト名の解決に WINS を使用する を選択し、 DHCP で WINS サーバのアドレスを取得 を必要に応じて選択してください。 TDB データベースではなく LDAP を使用するような場合など、 より高度なグローバル設定やユーザ認証設定を行いたい場合は、 詳細設定 を押します。

21.4.1.3.4 信頼するドメイン Edit source

他のドメインのユーザがお使いのドメインにアクセスできるようにするには、 信頼するドメイン のタブで適切な設定を行います。新しいドメインを追加するには 追加 を押します。選択したドメインを削除するには 削除 を押します。

21.4.1.3.5 LDAP の設定 Edit source

LDAP 設定 のタブでは、認証時に LDAP のサーバを使用するように設定することができます。 LDAP サーバとの通信をテストするには、 接続のテスト を押します。より高度な設定や既定値の設定を行うには、 詳細設定 を押します。

LDAP の設定に関する詳細は、 第5章 「389 Directory Server を利用した LDAP サービス をお読みください。

21.4.2 手作業によるサーバの設定 Edit source

Samba をサーバとして使用したい場合は、 samba をインストールしてください。 Samba のメインの設定ファイルは /etc/samba/smb.conf です。このファイルは論理的に 2 つのパートから構成されていて、 [global] セクションには全体的な設定が含まれています。また、下記の既定のセクションには、個別のファイルおよびプリンタの共有が含まれています:

  • [homes]

  • [profiles]

  • [users]

  • [groups]

  • [printers]

  • [print$]

このような構造になっていることから、共有に対する設定は個別に行うことができるだけでなく、 [global] セクションで一括に設定することもできるようになっています。これにより、設定ファイルを読みやすくしています。

21.4.2.1 global セクション Edit source

[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 serverwins support は、同じ smb.conf ファイル内で同時に設定してはなりません。

21.4.2.2 共有 Edit source

下記の例では、 CD-ROM ドライブとユーザのホームディレクトリ ( homes ) を、 SMB クライアントに対して公開する設定を示しています。

[cdrom]

CD-ROM ドライブが意図せずに公開されてしまうことを防ぐため、これらの行は行頭にコメント文字 (この場合はセミコロン) を追加して無効化されています。 Samba で CD-ROM ドライブを共有するには、行頭のセミコロンを削除してください。

例 21.1: CD-ROM ドライブの共有
[cdrom]
       comment = Linux CD-ROM
       path = /media/cdrom
       locking = No
[cdrom]comment

[cdrom] では、ネットワーク内で全ての SMB クライアントに対して表示される、共有名を設定しています。また、 comment 以下の値はコメント欄で、共有に関するより詳しい説明文を設定します。

path = /media/cdrom

path の指定を行うことで、指定したディレクトリ (この場合は /media/cdrom) を公開することになります。

既定の設定は非常に限定された構成になっているため、この種類の共有は、このシステム内に存在するユーザにのみ提供されます。この共有を誰にでも利用できるようにするには、設定内に guest ok = yes を追加してください。この設定により、ネットワーク内の誰にでも読み込むことができるようになります。ただし、このパラメータはよく注意してお使いください。また、このパラメータは [global] セクション内でも設定することができます。

[homes]

[homes] の共有は、ここでは特別な意味があります。 Linux ファイルサーバ内にアカウントとパスワードが存在し、ホームディレクトリが存在するユーザであれば、そのホームディレクトリに接続できるようになります。

例 21.2: [homes] 共有
[homes]
        comment = Home Directories
        valid users = %S
        browseable = No
        read only = No
        inherit acls = Yes
[homes]

SMB サーバに接続するユーザ名と同じ名前の共有が存在する場合を除き、 [homes] では動的に共有が生成されます。生成される共有名は、ユーザ名と同じになります。

valid users = %S

%S は Samba サーバとの接続が確立した際に、共有の名前に置き換えられる項目です。 [homes] セクションでこれを指定した場合は、ユーザ名に置き換えられます。そのため、ユーザ名と同じ名前の共有は、そのユーザでのみアクセスすることができます。

browseable = No

この設定は、ネットワーク環境内では表示を行わないようにする設定です。

read only = No

既定では、 Samba は read only = Yes パラメータと同じ効力になっていて、公開された共有への書き込みを禁止しています。この共有に対する書き込みを許可するには、 read only = No を設定してください。なお、 writable = Yes でも同じ意味になります。

create mask = 0640

MS Windows NT ベースではないシステムの場合、 Unix のアクセス権 (パーミッション) に相当する考え方はなく、ファイルを作成する際にもアクセス権を設定することができません。 create mask パラメータでは、新しく作成したファイルに対して割り当てるアクセス権を指定します。この設定は書き込みのできる共有に対してのみ適用されます。そのため、上記の設定を行うと、所有者が読み込みと書き込みの権限を、所有者のプライマリグループに属するユーザが読み込みの権限を持つようになります。ただし、 valid users = %S という設定が存在しているため、グループに対して読み込みアクセスを許可していても、実際にはアクセスができなくなります。グループに対して読み込みや書き込みのアクセスを許可するには、 valid users = %S の行を無効化してください。

警告
警告: Samba における NFS マウントの共有設定について

NFS でマウントされているディレクトリは、 Samba で共有してしまうとデータの損失が発生する可能性がありますので、サポート対象外となります。対象のファイルが存在するサーバで直接 Samba を動作させるか、 iSCSI などをお使いください。

21.4.2.3 セキュリティレベル Edit source

セキュリティを強化する目的で、それぞれの共有にはパスワードを設定して保護することができます。 SMB では、アクセス許可を確認するための様々な方法が用意されています:

ユーザレベルセキュリティ ( security = user )

この設定は、 SMB に対してユーザの考え方を導入します。各ユーザはサーバに対して、あらかじめ登録を行ってパスワードを設定する必要があります。登録完了後は、設定したユーザ名に従って個別にアクセスを許可するようになります。

ADS レベルセキュリティ ( security = ADS )

このモードでは、 Samba を Active Directory 環境内のドメインメンバーとして動作させます。このモードでは、 Samba サーバ内に Kerberos をインストールして設定しておく必要があります。また、 Samba サーバは ADS の領域内に参加させておく必要もあります。 ADS への参加は、 YaST の Windows ドメインメンバーシップ モジュールで実施することができます。

ドメインレベルセキュリティ ( security = domain )

このモードは、 Samba サーバを Windows ドメインに参加させた場合にのみ正しく動作します。 Samba は指定されたユーザ名とパスワードを、 Windows NT Server のメンバーサーバと同様に、 Windows のプライマリもしくはバックアップドメインコントローラに送信して認証作業を行うようになります。また、このモードではパスワードの暗号化を yes に設定する必要があります。

上記のユーザレベル、 ADS レベル、ドメインレベルのセキュリティ設定は、サーバ全体に対して適用されます。一方の共有をユーザレベルに、他方の共有を ADS レベルに、などの設定を行うことはできません。しかしながら、システムに複数の IP アドレスが設定されていれば、それぞれに対して別々の Samba サーバを起動することは可能です。

本件について、より詳しい情報は Samba 3 HOWTO に記載されています。また、 1 つのシステム内で複数のサーバを動作させる場合は、 interfacesbind interfaces only のオプション設定にご注意ください。

21.5 クライアントの設定 Edit source

クライアント側から Samba サーバへのアクセスは、 TCP/IP 経由でのみ実施することができます。 NetBEUI や IPX などのプロトコルは、 Samba では使用できません。

21.5.1 YaST での Samba クライアントの設定 Edit source

Samba クライアントを設定することで、 Samba サーバや Windows サーバにあるファイルやプリンタなどの資源にアクセスすることができるようになります。また、 ネットワークサービス › Windows ドメインメンバーシップ ダイアログを使用することで、 Windows ドメインや Active Directory ドメインに参加することもできます。また、 Linux の認証に SMB の情報を使用する を選択すると、 Samba や Windows, Kerberos サーバなどの認証を使用することができるようになります。

熟練者向け設定 を押すと、より高度な設定オプションにアクセスすることができます。たとえば サーバディレクトリのマウント の表では、サーバのホームディレクトリの認証を指定して自動的にマウントする設定を行うことができます。この方法により、 CIFS で提供されているホームディレクトリをユーザからアクセスできるようになります。詳しくは pam_mount のマニュアルページをお読みください。

全ての設定が完了したら、 OK を押して閉じることで設定を保存することができます。

21.5.2 クライアント側での SMB1/CIFS 共有のマウント Edit source

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

21.6 ログインサーバとしての Samba Edit source

企業内の環境などでは、一般にユーザアカウントとパスワードを一括で管理する機能が求められます。 Windows ベースのネットワークの場合、この処理はプライマリドメインコントローラ (PDC) で処理を行います。 PDC として設定されている Windows Server が存在していればそれでもかまいませんが、 Samba サーバを PDC にすることもできます。このような構成は、 smb.conf 内の [global] セクションを、 例21.3「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

21.7 Active Directory ネットワーク環境での Samba サーバ Edit source

Linux サーバと Windows サーバを共存させているような環境では、それぞれが個別の認証システムや認証ネットワークを構成できるだけでなく、中央の 1 つの認証システムを利用するように構成することができます。 Samba では Active Directory ドメインとの協調作業を行うことができることから、 openSUSE Leap サーバを Active Directory (AD) のドメインに参加させることができます。

Active Directory ドメインに参加するには、下記の手順を実施します:

  1. root でログインして、 YaST を起動します。

  2. ネットワークサービス › Windows ドメインメンバーシップ を選択します。

  3. Windows ドメインメンバーシップ が表示されたら、 ドメインまたはワークグループ の欄に、参加したいドメインを入力します。

    ワークグループまたはドメインへの参加
    図 21.1: Windows ドメインメンバーシップの決定
  4. お使いのサーバの Linux 認証に SMB の認証を使用したい場合は、 Linux の認証に SMB の情報を使用する を選択します。

  5. OK を押して閉じ、ドメインへの参加確認メッセージが表示されたら、それに応答します。

  6. あとは Active Directory サーバの Windows 管理者のユーザ名と、パスワードを入力して OK を押します。

    これでお使いのサーバは、認証データを 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 をお読みください。

21.7.1 Active Directory を管理するための realmd の使用 Edit source

realmd はネットワーク認証やドメインメンバーシップを設定するための DBus サービスです。

21.7.1.1 Active Directory ドメインの検出 Edit source

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

21.8 高度なトピック Edit source

本章では、 Samba スイートのクライアントとサーバにおける、さらに高度な技術に関する説明を行っています。

21.8.1 systemd を利用した CIFS ファイルシステムの自動マウント Edit source

systemd を利用することで、 CIFS 共有を起動時にマウントすることができます。これを行うには、下記の手順を実施します:

  1. まずはマウントポイントを作成します:

    > mkdir -p マウントポイント

    以降は マウントポイント/cifs/shared を指定したものとします。

  2. 次に 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
  3. サービスを有効化します:

    > sudo systemctl enable cifs-shared.mount
  4. サービスを開始します:

    > sudo systemctl start cifs-shared.mount

    サービスが正しく開始できたかどうかを確認するには、下記のコマンドを実行します:

    > sudo systemctl status cifs-shared.mount
  5. 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

21.8.2 btrfs による透過型ファイル圧縮 Edit source

Samba では、 btrfs ファイルシステム内に存在する共有に対して、クライアント側からファイルやディレクトリの圧縮フラグを遠隔で操作できるようになっています。 Windows エクスプローラでは、 ファイル › プロパティ › 詳細設定 内で、透過圧縮の設定を行うことができます:

ファイルのプロパティ
図 21.2: Windows エクスプローラの 属性の詳細 ダイアログ

圧縮フラグの設定されたファイルは、そのファイルに対してアクセスや修正があるごとに、透過的に圧縮もしくは展開されます。これは通常ストレージの容量を削減する効果がありますが、ファイルにアクセスする際に CPU の負荷がかかります。また、新しいファイルやディレクトリは、 FILE_NO_COMPRESSION を指定して作成していない限り、親ディレクトリの圧縮フラグを引き継ぐようになっています。

Windows エクスプローラでは、圧縮されたファイルと圧縮されていないファイルを、視覚的に区別できる形で表示します:

Windows エクスプローラでのディレクトリ一覧
図 21.3: 圧縮されたファイルに対する Windows エクスプローラのディレクトリ一覧表示

Samba 共有での圧縮機能を有効化するには、

vfs objects = btrfs

/etc/samba/smb.conf 内の共有設定内に追加するか、もしくは YaST から ネットワークサービス › Samba サーバ › Add を選択して、 btrfs の機能を使用する にチェックを入れてもかまいません。

21.8.3 スナップショット Edit source

スナップショットはシャドウコピーとも呼ばれ、特定の時点におけるファイルシステムのサブボリュームのコピーを意味します。 Linux では、 Snapper を利用することで、これらのスナップショットを管理することができます。スナップショットは btrfs ファイルシステムのほか、シン・プロビジョン型の LVM ボリュームでも利用することができます。 Samba スイートでは、サーバとクライアントとの間で FSRVP プロトコルを利用することで、リモートのスナップショットを管理することができます。

21.8.3.1 以前のバージョン Edit source

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 ファイルを修正する必要があります。これは YaST › ネットワークサービス › Samba サーバ から行うことができるほか、手作業でも設定することができます。具体的には、対応する共有に対して、下記の設定を追加します:

vfs objects = snapper

なお、 smb.conf を手作業で修正した場合は、 Samba サービスを再起動する必要があります:

> sudo systemctl restart nmb smb
新しい Samba 共有の追加
図 21.4: スナップショットを有効化した新しい Samba 共有の追加

設定作業を行うことで、 Windows エクスプローラのファイルやディレクトリの 以前のバージョン タブ内に、 Snapper が作成したスナップショットが表示されるようになります。

「以前のバージョン」のタブ
図 21.5: Windows エクスプローラでの 以前のバージョン タブ

21.8.3.2 リモート共有のスナップショット Edit source

既定でのスナップショットは、 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 の特定の共有に対してスナップショットを作成することができるほか、スナップショットの削除や新しい共有としての公開などを行うことができるようになります。

21.8.3.3 rpcclient による Linux からのリモートスナップショット管理 Edit source

samba-client パッケージには、リモートの Windows Server や Samba サーバに対して、対応する共有のスナップショットを作成したり公開したりするためのリクエストを送信することができる、 FSRVP クライアントが含まれています。共有のマウントやバックアップなどは、 openSUSE Leap に付属する既存のツールを利用することができます。また、サーバへのリクエストは rpcclient バイナリを利用して行います。

例 21.4: 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)

21.8.3.4 DiskShadow.exe による Windows からのリモートスナップショット管理 Edit source

Windows 側からも、 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 共有のパスをそれぞれ表しています。

手順 21.1: より細かい Samba サーバの設定
  1. YaST を利用して Active Directory ドメインに参加します。 詳しくは 21.7項 「Active Directory ネットワーク環境での Samba サーバ」 をお読みください。

  2. Active Directory の DNS 項目が正しく設定されていることを確認します:

    fsrvp-server:~ # net -U 'Administrator' ads dns register \
    fsrvp-server.example.com <IP address>
    Successfully registered hostname with DNS
  3. /srv/smb 内に btrfs のサブボリュームを作成します:

    fsrvp-server:~ # btrfs subvolume create /srv/smb
  4. /srv/smb に対する Snapper の設定ファイルを作成します:

    fsrvp-server:~ # snapper -c <snapper_config> create-config /srv/smb
  5. YaST で /srv/smb に対する新しい共有を作成します。このとき、 スナップショットの公開 のチェックボックスにチェックが入っていることをご確認ください。また、 21.8.3.2項 「リモート共有のスナップショット」 で説明しているとおり、 /etc/samba/smb.conf のグローバルセクションに下記の内容が追加されていることも、あわせてご確認ください:

    [global]
     rpc_daemon:fssd = fork
     registry shares = yes
     include = registry
  6. あとは systemctl restart nmb smb を実行して Samba を再起動します。

  7. 続いて 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 リクエストを、このアカウントで認証して行います。

  8. Windows クライアントのアカウントに対して、必要な権限を許可します:

    fsrvp-server:~ # net -U 'Administrator' rpc rights grant \
    "EXAMPLE\\win-client$" SeBackupPrivilege
    Successfully granted rights.

    上記のコマンドは "EXAMPLE\Administrator" に対して実行する必要はありません。既に権限が許可されているためです。

手順 21.2: Windows クライアントの設定と DiskShadow.exe の実行
  1. Windows Server 2012 を起動します (この例では WIN-CLIENT というホスト名とします) 。

  2. openSUSE Leap と同じ Active Directory ドメイン (EXAMPLE) に参加します。

  3. 再起動します。

  4. PowerShell を起動します。

  5. 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
  6. プログラム終了後やリセット/再起動後にも、シャドウコピーが保持されるように設定します:

    DISKSHADOW> set context PERSISTENT
  7. 指定した共有でスナップショットが有効化されているかどうかを調べ、有効化されていればスナップショットを作成します:

    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
  8. 最後にバックアップを完了します:

    DISKSHADOW> end backup
  9. スナップショットを作成したら、削除を行ったあと、削除ができたことを確認します:

    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
    
    コンピューター上のすべてのシャドウ コピーを照会しています...
    システム内にシャドウ コピーが見つかりませんでした。

21.9 さらなる情報 Edit source

  • マニュアルページ: 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 からアクセスしてください。

このページを印刷