Samba (日本語) - ArchWiki

# Samba (日本語)

関連記事

- Samba/Tips and tricks
- Samba/トラブルシューティング
- Samba/Advanced file sharing with KDE4
- Samba Domain Controller
- Active Directory Integration
- Samba 4 Active Directory Domain Controller
- OpenChange Server
- NFS

Samba は SMB/CIFS ネットワークプロトコルの再実装であり、NFS の代わりになるものとして Linux と Windows システム間でのファイルやプリンターの共有を容易にします。Samba の設定は簡単で操作もわかりやすいと言うユーザーもいますが、新規ユーザーの多くは複雑で直感的でないメカニズムが手を余らせることになります。そのようなユーザーは以下の指示をよく読んで下さい。

## サーバーの設定

Samba を使ってファイルを共有するには、公式リポジトリから samba をインストールしてください。

Samba サーバーの設定は `/etc/samba/smb.conf` で行います。デフォルトの Samba 設定ファイルを `/etc/samba/smb.conf` にコピーしてください:

    # cp /etc/samba/smb.conf.default /etc/samba/smb.conf

Tip: `testparm` を実行することで samba 設定ファイルが正しいかどうか確認できます。
Warning: マシンに `Localhost` という名前を付けないで下さい、Windows では `127.0.0.1` として解決されていまいます。

### 共有を作成する

`/etc/samba/smb.conf` を編集して、Share Definitions セクションまでスクロールしてください。デフォルトの設定では、それぞれのユーザーのホームディレクトリに共有を自動で作成します。また、プリンターの共有もデフォルトで作成します。サンプル設定には多数のコメントが付属しています。オプションに関する詳細は `man smb.conf` で見ることができます。オンライン版は こちら になります。

Windows 側では、`smb.conf` を Windows ワークグループに変更してください (Windows デフォルト: WORKGROUP)。

### サービスを起動する

SMB の基本的なファイル共有をするには、`smbd` と `nmbd` サービスを起動してください。 詳しくは smbd と nmbd のマニュアルページを見て下さい。

Tip: Samba ソケットを有効にすると最初の接続時にデーモンが起動します:

    # systemctl disable smbd.service
    # systemctl enable smbd.socket

### user share path を作成する

以下のコマンドはオブジェクトの名前を後でコマンドを実行する環境に自動で export します:

    # export USERSHARES_DIR="/var/lib/samba/usershare"
    # export USERSHARES_GROUP="sambashare"

次のコマンドは `/var/lib/samba` に usershares ディレクトリを作成します:

    # mkdir -p ${USERSHARES_DIR}

次のコマンドは sambashare グループを作成します:

    # groupadd ${USERSHARES_GROUP}

次のコマンドは root に作成したディレクトリの所有者とグループを変更します:

    # chown root:${USERSHARES_GROUP} ${USERSHARES_DIR}

次のコマンドは usershares ディレクトリのパーミッションを変更して sambashare グループのユーザーがファイルを読み書き・実行できるようにします:

    # chmod 1770 ${USERSHARES_DIR}

`smb.conf` 設定ファイルに以下の変数を設定します:

    /etc/samba/smb.conf

    ...
    [global]
      usershare path = /var/lib/samba/usershare
      usershare max shares = 100
      usershare allow guests = yes
      usershare owner only = False
      ...

`sambashare` グループにあなたのユーザーを追加してください、`your_username` はあなたの linux ユーザーの名前に置き換えてください:

    # usermod -a -G ${USERSHARES_GROUP} your_username

`smbd` と `nmbd` サービスを再起動します。

一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、Thunar でディレクトリを右クリックしてネットワーク常に共有することが可能です。 エラー `You are not the owner of the folder` が表示されるときは、システムを再起動してみてください。

### ユーザーを追加する

samba ユーザーのための Linux ユーザーアカウントを作成してください。`samba_user` は好きな名前に置き換えられます:

    # useradd samba_user

そして同じ名前で Samba ユーザーアカウントを作成してください:

    # pdbedit -a -u samba_user

### samba ユーザーのパスワードを変更する

Note: バージョン 3.4.0 から、smbpasswd はデフォルトで使用されなくなっています。既存の smbpasswd データベースは新しいフォーマットに変換することが可能です。

ユーザーのパスワードを変更するには、`smbpasswd` を使って下さい:

    # smbpasswd samba_user

## クライアントの設定

Samba/SMB/CIFS サーバーからファイルにアクセスするのに必要なのは smbclient だけです。これは公式リポジトリからインストールできます。

LAN 上の他のコンピュータの共有リソースには GUI や CLI を使ってローカルでアクセス・マウントすることが可能です。ほとんどの軽量デスクトップ環境には共有リソースのアクセスを容易にする固有の方法がないため、グラフィカルな方法には制限があります。

共有アクセスは2つの部分に別れます。1つはバックのファイルシステムのメカニズムで、2つ目はユーザーが共有リソースをマウントするのを選択できるようにするインターフェイスです。環境によっては1つ目の部分はすでに初めから備わっていることがあります。

### 手動マウント

公式リポジトリから smbclient をインストールしてください。軽量な方法を使いたい場合で、公開共有を表示する必要がないときは `/usr/bin/mount.cifs` が入っている cifs-utils だけをインストールします。

サーバーの公開されている共有を表示するには:

    $ smbclient -L hostname -U%

共有のマウントポイントを作成:

    # mkdir /mnt/mountpoint

`mount.cifs` タイプを使って共有をマウント。下で示しているオプションが全て必要・推奨というわけではありません (ie. `password`)。

    # mount -t cifs //SERVER/sharename /mnt/mountpoint -o user=username,password=password,workgroup=workgroup,ip=serverip

SERVER

  Windows マシンの名前。

sharename

  共有ディレクトリ。

mountpoint

  共有をマウントするローカルのディレクトリ。

`-o [options]`

  詳しくは `man mount.cifs` を見て下さい。

Note:

- 最後に `/` を使うのは止めて下さい。`//SERVER/sharename/` は動作しません。
- マウントが不安定で、途切れたりフリーズする場合、`vers=` オプションを使って他の SMB プロトコルバージョンを有効にしてみてください。例えば、Windows Vista のマウントには `vers=2.0` を使ってみて下さい。

#### 共有を /etc/fstab に追加

fstab エントリを追加する一番簡単な方法は以下の通りです:

    /etc/fstab

    //SERVER/sharename /mnt/mountpoint cifs username=username,password=password 0 0

ただし、誰でも読み取りできるファイルにパスワードを保存するのは推奨されません。証明書ファイルを使うほうが安全です。例えば、ファイルを作成して `chmod 600 filename` を実行することで所有者のユーザーだけが読み書きできるようになりますｙ。ファイルには以下の情報が含まれている必要があります:

    /path/to/credentials/sambacreds

    username=username
    password=password

そして fstab での行は以下のようになります:

    /etc/fstab

    //SERVER/SHARENAME /mnt/mountpoint cifs credentials=/path/to/credentials/sambacreds 0 0

systemd を使っている場合 (最近のインストールではデフォルト)、`comment=systemd.automount` オプションを利用することができます。これはサービスの起動を数秒早くできます。また、`uid` と `gid` オプションを使うことで、現在のユーザーとグループをマップして作業を少し楽にできます。

Warning: `uid` と `gid` オプションを使うとネットワークデバイスからデータを取得するプログラムで入出力エラーが起こる可能性があります。

    /etc/fstab

    //SERVER/SHARENAME /mnt/mountpoint cifs credentials=/path/to/smbcredentials,comment=systemd.automount,uid=username,gid=usergroup 0 0

Note: sharename の中の空白は `\040` (八進数で空白の ASCII コード) に置き換える必要があります。例えば、`/etc/fstab` でコマンドラインの `//SERVER/share name` は `//SERVER/share\040name` にしてください。

#### ユーザーマウント

    /etc/fstab

    //SERVER/SHARENAME /mnt/mountpoint cifs users,credentials=/path/to/smbcredentials,workgroup=workgroup,ip=serverip 0 0

Note: The option is users (plural). For other filesystem types handled by mount, this option is usually user; sans the "s".

これでマウントポイントがユーザーの制御下にあるディレクトリ (つまり、ユーザーのホーム) にある限りユーザーがマウントできるようになります。ユーザーのホームにないマウントポイントで Samba 共有をマウント・アンマウントできるようにするには、smbnetfs を使うか、sudo で権限をあげてください。

### WINS ホスト名

smbclient パッケージには WINS を使ってホスト名を解決するドライバーが入っています。有効にするには、`/etc/nsswitch.conf` の “hosts” 行に “wins” を追加してください。

### 自動マウント

簡単に共有リソースをブラウズする方法は複数存在します:

#### smbnetfs

Note: smbnetfs needs an intact Samba server setup. See above on how to do that.

まず、マウントしたい共有が全て見れるかどうか確認してください:

    $ smbtree -U remote_user

見れない場合、`/etc/samba/smb.conf` 内の次の行を見つけて修正してください:

    domain master = auto

そして `smbd` と `nmbd` サービスを再起動してください。

全てが問題なく動作するようになったら、公式リポジトリから smbnetfs をインストールしてください。

次に、次の行を `/etc/fuse.conf` に追加して:

    user_allow_other

`fuse` カーネルモジュールをロードしてください:

    # modprobe fuse

さらに `/etc/smbnetfs/.smb` ディレクトリをホームディレクトリにコピーします:

    $ cp -a /etc/smbnetfs/.smb ~

そして `smb.conf` へのリンクを作成してください:

    $ ln -s /etc/samba/smb.conf ~/.smb/smb.conf

共有フォルダにアクセスするのにユーザー名とパスワードが必要な場合は、`~/.smb/smbnetfs.auth` を編集して以下のように一つ以上エントリを含めて下さい:

    ~/.smb/smbnetfs.auth

    auth			"hostname" "username" "password"

必要な場合、smbnetfs によってマウントする特定のホストのエントリを追加することも可能です。 詳しくは `~/.smb/smbnetfs.conf` に書いてあります。

設定が完了したら、次を実行する必要があります:

    $ chmod 600 ~/.smb/smbnetfs.*

設定に問題があると、smbnetfs は 'insecure config file permissions' とエラーを吐きます。

最後に、Samba ネットワークを指定したディレクトリにマウントするために、次を実行してください:

    $ smbnetfs mount_point

##### デーモン

Arch Linux パッケージは smbnetfs にシステム共通のオペレーションモードを追加しています。有効にするには、`/etc/smbnetfs/.smb` ディレクトリで上記の修正を行う必要があります。

そして、`smbnetfs` デーモンを通常通りに起動・有効化できます。システム共通のマウントポイントは `/mnt/smbnet/` になります。

#### fusesmb

Note: Because `smbclient 3.2.X` is malfunctioning with `fusesmb`, revert to using older versions if necessary. See the relevant forum topic for details.

1. AUR から fusesmb をインストールしてください。
2. マウントポイントを作成: `mkdir /mnt/fusesmb`
3. `fuse` カーネルモジュールをロード。
4. 共有をマウント:

       fusesmb -o allow_other /mnt/fusesmb

#### autofs

Linux におけるカーネルベースの自動マウントの情報は Autofs を見て下さい。

### ファイルマネージャの設定

#### GNOME Files, Nemo, Thunar, PCManFM

GNOME Files, Nemo, Thunar, PCManFM で samba 共有にアクセスするには公式リポジトリの gvfs-smb パッケージをインストールしてください。

`Ctrl+l` を押してロケーションバーに `smb://servername/share` と入力して共有にアクセスします。

マウントされた共有はファイルシステムで `/run/user/your_UID/gvfs` にあるように見えます。

#### KDE

KDE には Samba 共有をブラウズするための機能が内蔵されています。したがってパッケージの追加は必要ありません。ただし、KDE システム設定で GUI を使うには、公式リポジトリから kdenetwork-filesharing パッケージをインストールしてください。

Dolphin でアクセスした時に "Time Out" エラーが表示される場合、`smb.conf` で次の行をアンコメント・編集してください:

    name resolve order = lmhosts bcast host wins

このページ を参照。

#### 他のグラフィカル環境

有用なプログラムは多数ありますが、プログラムのパッケージを作成しなくてはなりません。Arch のパッケージビルドシステムを使ってパッケージを作れます。インストールするのに特定の環境を必要としないために簡単に持ち運ぶことができます。

- pyneighborhood は公式リポジトリから利用できます。
- Xffm の LinNeighborhood, RUmba, xffm-samba プラグインは公式リポジトリにも AUR にもありません。公式にはサポートされていない（もしくは非公式サポートすらない）ため、動作がおかしかったり全く動かなかったりします。

## 参照

- Samba: An Introduction
- Samba 公式サイト

Category:

- Networking (日本語)