Samba

提供: ArchWiki
2015年1月6日 (火) 21:37時点におけるKusakata (トーク | 投稿記録)による版 (1版 をインポートしました)
ナビゲーションに移動 検索に移動

関連記事

SambaSMB/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
ヒント: testparm を実行することで samba 設定ファイルが正しいかどうか確認できます。
警告: マシンに Localhost という名前を付けないで下さい、Windows では 127.0.0.1 として解決されていまいます。

共有を作成する

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

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

サービスを起動する

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

ヒント: 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

smbdnmbd サービスを再起動します。

一度ログアウトして再ログインしてください。これで 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 ユーザーのパスワードを変更する

ノート: バージョン 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 を見て下さい。
ノート:
  • 最後に / を使うのは止めて下さい。//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 を実行することで所有者のユーザーだけが読み書きできるようになりますy。ファイルには以下の情報が含まれている必要があります:

/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 オプションを利用することができます。これはサービスの起動を数秒早くできます。また、uidgid オプションを使うことで、現在のユーザーとグループをマップして作業を少し楽にできます。

警告: uidgid オプションを使うとネットワークデバイスからデータを取得するプログラムで入出力エラーが起こる可能性があります。
/etc/fstab
//SERVER/SHARENAME /mnt/mountpoint cifs credentials=/path/to/smbcredentials,comment=systemd.automount,uid=username,gid=usergroup 0 0
ノート: 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
ノート: 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

ノート: 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

そして smbdnmbd サービスを再起動してください。

全てが問題なく動作するようになったら、公式リポジトリから 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

ノート: 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 から fusesmbAUR をインストールしてください。
  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 にもありません。公式にはサポートされていない(もしくは非公式サポートすらない)ため、動作がおかしかったり全く動かなかったりします。

参照