Samba
関連記事
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
共有を作成する
/etc/samba/smb.conf
を編集して、Share Definitions セクションまでスクロールしてください。デフォルトの設定では、それぞれのユーザーのホームディレクトリに共有を自動で作成します。また、プリンターの共有もデフォルトで作成します。サンプル設定には多数のコメントが付属しています。オプションに関する詳細は man smb.conf
で見ることができます。オンライン版は こちら になります。
Windows 側では、smb.conf
を Windows ワークグループに変更してください (Windows デフォルト: WORKGROUP)。
サービスを起動する
SMB の基本的なファイル共有をするには、smbd
と nmbd
サービスを起動してください。
詳しくは smbd と nmbd のマニュアルページを見て下さい。
以下のコマンドはオブジェクトの名前を後でコマンドを実行する環境に自動で 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 ユーザーのパスワードを変更する
ユーザーのパスワードを変更するには、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
を見て下さい。
共有を /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
オプションを利用することができます。これはサービスの起動を数秒早くできます。また、uid
と gid
オプションを使うことで、現在のユーザーとグループをマップして作業を少し楽にできます。
/etc/fstab
//SERVER/SHARENAME /mnt/mountpoint cifs credentials=/path/to/smbcredentials,comment=systemd.automount,uid=username,gid=usergroup 0 0
ユーザーマウント
/etc/fstab
//SERVER/SHARENAME /mnt/mountpoint cifs users,credentials=/path/to/smbcredentials,workgroup=workgroup,ip=serverip 0 0
これでマウントポイントがユーザーの制御下にあるディレクトリ (つまり、ユーザーのホーム) にある限りユーザーがマウントできるようになります。ユーザーのホームにないマウントポイントで Samba 共有をマウント・アンマウントできるようにするには、smbnetfs を使うか、sudo で権限をあげてください。
WINS ホスト名
smbclient パッケージには WINS を使ってホスト名を解決するドライバーが入っています。有効にするには、/etc/nsswitch.conf
の “hosts” 行に “wins” を追加してください。
自動マウント
簡単に共有リソースをブラウズする方法は複数存在します:
smbnetfs
まず、マウントしたい共有が全て見れるかどうか確認してください:
$ 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
- AUR から fusesmbAUR をインストールしてください。
- マウントポイントを作成:
mkdir /mnt/fusesmb
fuse
カーネルモジュールをロード。- 共有をマウント:
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 にもありません。公式にはサポートされていない(もしくは非公式サポートすらない)ため、動作がおかしかったり全く動かなかったりします。