「Samba」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎ユーザー定義共有を作成する: 不要な文言を削除)
(同期)
13行目: 13行目:
 
[[zh-TW:Samba]]
 
[[zh-TW:Samba]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related4|Samba/Tips and tricks}}
 
 
{{Related|Active Directory Integration}}
 
{{Related|Active Directory Integration}}
{{Related3|Samba 4 Active Directory domain controller|Samba 4 Active Directory ドメインコントローラ}}
+
{{Related|Samba/Active Directory ドメインコントローラ}}
{{Related3|OpenChange server|OpenChange サーバー}}
 
 
{{Related|NFS}}
 
{{Related|NFS}}
 
{{Related articles end}}
 
{{Related articles end}}
   
'''Samba''' は [[wikipedia:ja:Server_Message_Block|SMB/CIFS]] ネットワークプロトコルの再実装であり、NFS の代わりになるものとして Linux と Windows システム間でのファイルやプリンターの共有を容易にします。Samba の設定は簡単で操作もわかりやすいと言うユーザーもいますが、新規ユーザーの多くは複雑で直感的でないメカニズムが手を余らせることになります。ようなユーザー以下の指示よく読んで下さい
+
'''Samba''' は [[wikipedia:ja:Server_Message_Block|SMB/CIFS]] ネットワークプロトコルの再実装であり、NFS の代わりになるものとして Linux と Windows システム間でのファイルやプリンターの共有を容易にします。Samba の設定は簡単で操作もわかりやすいと言うユーザーもいますが、新規ユーザーの多くは複雑で直感的でないメカニズムが手を余らせることになります。記事で Samba セットアップする手順を説明します
   
 
== サーバーの設定 ==
 
== サーバーの設定 ==
26行目: 24行目:
 
Samba を使ってファイルを共有するには、[[公式リポジトリ]]から {{Pkg|samba}} を[[pacman#特定のパッケージのインストール|インストール]]してください。
 
Samba を使ってファイルを共有するには、[[公式リポジトリ]]から {{Pkg|samba}} を[[pacman#特定のパッケージのインストール|インストール]]してください。
   
  +
=== smb.conf ===
Samba サーバーの設定は {{ic|/etc/samba/smb.conf}} で行います。デフォルトの Samba 設定ファイルを {{ic|/etc/samba/smb.conf}} にコピーしてください:
 
# cp /etc/samba/smb.conf.default /etc/samba/smb.conf
 
   
{{Tip|{{ic|testparm}} を実行することで samba 設定ファイルがしいかどうか確認できます。}}
+
Samba サーバーの設定は {{ic|/etc/samba/smb.conf}} いまファイルが存在と smbd は起動に失敗します。
   
  +
デフォルトの Samba 設定ファイル ({{ic|/etc/samba/smb.conf.default}}) を {{ic|/etc/samba/smb.conf}} にコピーしてください:
{{Warning|マシンに {{ic|Localhost}} という名前を付けないで下さい、Windows では {{ic|127.0.0.1}} として解決されていまいます。}}
 
  +
# cp /etc/samba/smb.conf.default /etc/samba/smb.conf
  +
  +
利用可能なオプションは {{ic|smb.conf}} の man ページを参照してください [http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html]。また、{{ic|testparm}} を実行することで samba 設定ファイルが正しいかどうか確認できます。
   
 
=== 共有を作成する ===
 
=== 共有を作成する ===
   
{{ic|/etc/samba/smb.conf}} を編集して、'''Share Definitions''' セクションまでスクロールしてください。デフォルトの設定では、それぞれのユーザーのホームディレクトリに共有を自動で作成します。た、プリンタの共有もデフォルトで作成ます。サンプル設定に多数のコメトが付属していま。オプションに関する詳細は {{ic|man smb.conf}} で見ることができます。オンライン版は [http://www.samba.gr.jp/project/translation/3.5/htmldocs/manpages-3/smb.conf.5.html こちら] になります。
+
{{ic|/etc/samba/smb.conf}} を編集して、'''Share Definitions''' セクションまでスクロールしてください。デフォルトの設定では、それぞれのユーザーのホームディレクトリに共有を自動で作成します。ただしusers ワイルドカドを追加ないとユーザーログインすることができません:
  +
{{hc|/etc/samba/smb.conf|2=
  +
...
  +
[homes]
  +
comment = Home Directories
  +
browseable = no
  +
writable = yes
  +
valid users = %S
  +
}}
   
Windows 側では、{{ic|smb.conf}} Windows ワークグループに変更してください (Windows デフォルト: WORKGROUP)。
+
{{ic|smb.conf}} の {{ic|workgroup}} は使用する Windows ワークグループと同じ値設定してください (デフォルト: {{ic|WORKGROUP}})。
   
 
=== サービスを起動する ===
 
=== サービスを起動する ===
44行目: 52行目:
 
詳しくは [http://www.samba.org/samba/docs/man/manpages-3/smbd.8.html smbd] と [http://www.samba.org/samba/docs/man/manpages-3/nmbd.8.html nmbd] のマニュアルページを見て下さい。
 
詳しくは [http://www.samba.org/samba/docs/man/manpages-3/smbd.8.html smbd] と [http://www.samba.org/samba/docs/man/manpages-3/nmbd.8.html nmbd] のマニュアルページを見て下さい。
   
{{Tip|Samba ソケットを有効にすると最初の接続時にデーモンが起動します:
+
{{Tip|Samba ソケットを有効にすると最初の接続時にデーモンが起動します: {{ic|# systemctl enable smbd.socket}}。}}
# systemctl disable smbd.service
 
# systemctl enable smbd.socket
 
}}
 
   
 
=== ユーザー定義共有を作成する===
 
=== ユーザー定義共有を作成する===
86行目: 91行目:
 
# gpasswd sambashare -a ''your_username''
 
# gpasswd sambashare -a ''your_username''
   
{{ic|smbd}} と {{ic|nmbd}} サービスを再起動します。
+
{{ic|smbd.service}} と {{ic|nmbd.service}} サービスを再起動します。
   
 
一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、[[Thunar]] でディレクトリを右クリックしてネットワーク上に共有することが可能です。エラー {{ic|You are not the owner of the folder}} が表示されるときは、システムを再起動してみてください。
 
一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、[[Thunar]] でディレクトリを右クリックしてネットワーク上に共有することが可能です。エラー {{ic|You are not the owner of the folder}} が表示されるときは、システムを再起動してみてください。
94行目: 99行目:
 
=== ユーザーを追加する ===
 
=== ユーザーを追加する ===
   
samba ユーザーのための [[ユーザーとグループ|Linux ユーザーアカウント]]を作成してください。{{ic|''samba_user''}} は好な名前に置き換えられます:
+
Samba は Linux ユーザーアカウントを必要とします。既存ユーザーアカウントを使用することもできますし、新しく[[ユーザーとグループ#ユーザー管理|ユーザーを作成]]することもできます
   
  +
ユーザー名は Linux 環境と共有しますが、パスワードは Linux のユーザーアカウントと Samba で異なります。{{ic|samba_user}} は Samba ユーザーアカウントに置き換えてください:
# useradd ''samba_user''
 
   
  +
# smbpasswd -a ''samba_user''
そして同じ名前で Samba ユーザーアカウントを作成してください:
 
   
  +
[https://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html#SERVERROLE サーバーロール] によっては、Samba ユーザーアカウントの既存の[[ファイルのパーミッションと属性]]を変更する必要があります。
# pdbedit -a -u ''samba_user''
 
  +
  +
新規ユーザーだけが Samba のファイルサーバー共有にリモートからアクセスできるようにしたい場合、他のログインオプションを制限します:
  +
* シェルを無効化 - {{ic|usermod --shell /usr/bin/nologin --lock username}}。
  +
* SSH ログインを無効化 - {{ic|/etc/ssh/sshd_conf}} を編集して {{ic|AllowUsers}} オプションを変更。
  +
  +
システムの堅牢化については[[セキュリティ]]を見てください。
   
 
=== samba ユーザーのパスワードを変更する ===
 
=== samba ユーザーのパスワードを変更する ===
119行目: 130行目:
 
{{hc|/etc/samba/smb.conf|<nowiki>
 
{{hc|/etc/samba/smb.conf|<nowiki>
 
[global]
 
[global]
  +
deadtime = 60 ; This is useful to stop a server's resources being exhausted by a large number of inactive connections
deadtime = 15
 
disable netbios = yes
+
disable netbios = yes ; Disable netbios announcing
  +
dns proxy = no ; nmbd spawns a second copy of itself to do the DNS name lookup requests on 'yes'
dns proxy = no
 
hosts allow = 192.168.1. 127. 10.
+
hosts allow = 192.168.1. 127. 10. ; This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service
  +
invalid users = root ; This is a list of users that should not be allowed to login to this service
invalid users = nobody root
 
  +
security = user ; Use as standalone file server
load printers = no
 
  +
map to guest = Bad User ; Means user logins with an invalid password are rejected, or allow guest login and mapped into the guest account
map to guest = Bad User
 
max connections = 10
+
max connections = 100 ; Number of simultaneous connections to a service to be limited
  +
workgroup = WORKGROUP ; Workgroup the server will appear to be in when queried by clients
printing = bsd
 
printcap name = /dev/null
 
security = user
 
server string = My Samba Server
 
workgroup = WORKGROUP
 
   
  +
; Uncomment the following lines to disable printer support
create mask = 0664
 
  +
;load printers = no
directory mask = 0775
 
  +
;printing = bsd
force create mode = 0664
 
  +
;printcap name = /dev/null
force directory mode = 0775
 
  +
;disable spoolss = yes
;force group = +myusergroup
 
   
  +
; Default permissions for all shares
[private]
 
  +
inherit owner = yes ; Take the ownership of the parent directory when creating files/folders
comment = Private Share
 
  +
create mask = 0664 ; Create file mask
path = /mnt/data
 
  +
directory mask = 0775 ; Create director mask
read only = no
 
  +
force create mode = 0664 ; Force create file mask
valid users = myuser
 
  +
force directory mode = 0775 ; Force create directory mask
 
  +
  +
; Private Share
  +
[private] ; translate into: \\server\private
  +
comment = My Private Share ; Seen next to a share when a client queries the server
  +
path = /path/to/data ; Directory to which the user of the service is to be given access
  +
read only = no ; An inverted synonym to writeable.
  +
valid users = user1 user2 @group1 @group2; restrict a service to a particular set of users and/or groups
  +
  +
; Public Share
  +
;[public]
  +
; comment = My Public Share
  +
; path = /path/to/public
  +
; read only = yes
  +
; guest ok = yes; No password required to connect to the service
 
</nowiki>}}
 
</nowiki>}}
   
 
設定の変更を適用するために {{ic|smbd}} や {{ic|nmb}} サービスを再起動してください。
 
設定の変更を適用するために {{ic|smbd}} や {{ic|nmb}} サービスを再起動してください。
   
=== 設定の検証 ===
+
== クライアントの設定 ==
{{ic|testparm}} コマンドで {{ic|smb.conf}} の設定を検証できます:
 
   
  +
公開されている共有の確認などをする必要がない場合、{{ic|/usr/bin/mount.cifs}} が含まれている {{Pkg|cifs-utils}} だけをインストールしてください。
# testparm -s
 
   
  +
FTP ライクなコマンドラインインターフェイスを使うには {{Pkg|smbclient}} をインストールします。よく使うコマンドは {{ic|man smbclient}} を見てください。
== クライアントの設定 ==
 
   
  +
[[デスクトップ環境]]によっては、GUI で設定することができます。ファイルマネージャを使用する方法は[[#ファイルマネージャの設定|ファイルマネージャの設定]]を見てください。
Samba/SMB/CIFS サーバーからファイルにアクセスするのに必要なのは {{Pkg|smbclient}} だけです。これは公式リポジトリからインストールできます。
 
   
  +
{{Note|{{Pkg|cifs-utils}} や {{Pkg|smbclient}} をインストールしたら、{{ic|cifs}} [[カーネルモジュール]]をロードするか再起動が必要です。}}
LAN 上の他のコンピュータの共有リソースには GUI や CLI を使ってローカルでアクセス・マウントすることが可能です。ほとんどの軽量デスクトップ環境には共有リソースのアクセスを容易にする固有の方法がないため、グラフィカルな方法には制限があります。
 
   
  +
=== 公開されている共有の確認 ===
共有アクセスは2つの部分に別れます。1つはバックのファイルシステムのメカニズムで、2つ目はユーザーが共有リソースをマウントするのを選択できるようにするインターフェイスです。環境によっては1つ目の部分はすでに初めから備わっていることがあります。
 
  +
以下のコマンドでパブリックな共有を確認できます:
   
  +
$ smbclient -L ''hostname'' -U%
=== 手動マウント ===
 
   
  +
もしくは、''smbtree'' を実行して共有のツリー図を表示します。コンピュータが多数接続されているネットワークでは推奨しませんが、共有名が正しいかどうか確認するのに役立ちます:
公式リポジトリから {{Pkg|smbclient}} をインストールしてください。軽量な方法を使いたい場合で、公開共有を表示する必要がないときは {{ic|/usr/bin/mount.cifs}} が入っている {{Pkg|cifs-utils}} だけをインストールします。
 
   
  +
$ smbtree -b -N
サーバーの公開されている共有を表示するには:
 
   
  +
{{ic|-b}} ({{ic|--broadcast}}) オプションはマスターブラウザの代わりにブロードキャストを使用し、{{ic|-N}} ({{ic|-no-pass}}) はパスワードを要求しないオプションです。
$ smbclient -L ''hostname'' -U%
 
  +
  +
=== NetBIOS/WINS ホストネーム ===
  +
  +
ホストネームを解決するには {{ic|winbindd}} を[[起動]]・[[有効化]]する必要があります。
  +
  +
{{pkg|smbclient}} パッケージに WINS を使用してホストネームを解決するドライバーが含まれています。有効にするには、{{ic|/etc/nsswitch.conf}} の "hosts" 行に {{ic|wins}} を追加してください。
  +
  +
=== 手動マウント ===
   
 
共有のマウントポイントを作成:
 
共有のマウントポイントを作成:
174行目: 203行目:
 
# mkdir /mnt/''mountpoint''
 
# mkdir /mnt/''mountpoint''
   
{{ic|mount.cifs}} タイプを使って共有をマウント。下で示しているオプションが全て必要・推奨というわけではありません (ie. {{ic|password}})。
+
{{ic|mount.cifs}} タイプを使って共有をマウントします。下で示しているオプションが全て必要・推奨というわけではありません:
 
 
{{bc|1=
 
{{bc|1=
# mount -t cifs //''SERVER''/''sharename'' /mnt/''mountpoint'' -o user=''username'',password=''password'',workgroup=''workgroup'',ip=''serverip''
+
# mount -t cifs //''SERVER''/''sharename'' /mnt/''mountpoint'' -o user=''username'',password=''password'',uid=''username'',gid=''group'',workgroup=''workgroup'',ip=''serverip'',iocharset=''utf8''
 
}}
 
}}
  +
  +
マウントポイントがユーザーの制御下にあるディレクトリ (例: ユーザーのホームディレクトリ) の場合、{{ic|users}} マウントオプションを追加することでユーザーにマウントを許可できます。
  +
  +
{{Note|オプションは user'''s''' です (複数形)。他のファイルシステムでは通常 ''user'' オプションを使用します。}}
  +
{{Warning|{{ic|uid}} や {{ic|gid}} マウントオプションを使用して I/O エラーが発生する場合、[[ファイルのパーミッションと属性]]を設定・確認することを推奨します。}}
   
 
''SERVER''
 
''SERVER''
: Windows マシンの名前。
+
: サーバーの名前。
   
 
''sharename''
 
''sharename''
195行目: 228行目:
 
* 最後に {{ic|/}} を使うのは止めて下さい。{{ic|//''SERVER''/''sharename'''''/'''}} は動作しません。
 
* 最後に {{ic|/}} を使うのは止めて下さい。{{ic|//''SERVER''/''sharename'''''/'''}} は動作しません。
 
* マウントが不安定で、途切れたりフリーズする場合、{{ic|1=vers=}} オプションを使って他の SMB プロトコルバージョンを有効にしてみてください。例えば、Windows Vista のマウントには {{ic|1=vers=2.0}} を使ってみて下さい。
 
* マウントが不安定で、途切れたりフリーズする場合、{{ic|1=vers=}} オプションを使って他の SMB プロトコルバージョンを有効にしてみてください。例えば、Windows Vista のマウントには {{ic|1=vers=2.0}} を使ってみて下さい。
  +
* シャットダウン時に cifs でマウントしたネットワーク共有のタイムアウトが発生する場合、[[WPA supplicant#ネットワーク共有 (cifs) をマウントしたときにシャットダウン時に起こる問題]]を参照。
 
}}
 
}}
   
==== 共有を /etc/fstab に追加 ====
+
===== 共有パスワードの保存 =====
  +
誰でも読み取れるファイルにパスワードを保存することは推奨しません。credentials ファイルを作成するのが安全です:
 
  +
{{hc|/path/to/credentials/share|2=
fstab エントリを追加する一番簡単な方法は以下の通りです:
 
  +
username=''myuser''
 
  +
password=''mypass''
{{hc|/etc/fstab|2=
 
//''SERVER''/''sharename'' /mnt/''mountpoint'' cifs username=''username'',password=''password'' 0 0
 
 
}}
 
}}
  +
マウントコマンドの {{ic|<nowiki>username=myuser,password=mypass</nowiki>}} を {{ic|<nowiki>credentials=/path/to/credentials/share</nowiki>}} に置き換えてください。
   
  +
credential ファイルは root からしか読込・書込できないように設定するべきです:
ただし、誰でも読み取りできるファイルにパスワードを保存するのは推奨されません。証明書ファイルを使うほうが安全です。例えば、ファイルを作成して {{ic|chmod 600 ''filename''}} を実行することで所有者のユーザーだけが読み書きできるようになりますy。ファイルには以下の情報が含まれている必要があります:
 
  +
# chmod 600 /path/to/credentials/share
   
  +
=== 自動マウント ===
{{hc|/path/to/credentials/sambacreds|2=
 
  +
{{Note|起動時に正しくマウントするには {{ic|systemd-networkd-wait-online.service}} ([[systemd-networkd]] を使用している場合) や {{ic|NetworkManager-wait-online.service}} ([[NetworkManager]] を使用している場合) を[[有効化]]する必要があります。}}
username=''username''
 
password=''password''
 
}}
 
   
  +
==== マウントエントリ ====
そして fstab での行は以下のようになります:
 
   
  +
以下は認証が必要な {{ic|cifs}} [[fstab|マウントエントリ]]の例です:
 
{{hc|/etc/fstab|2=
 
{{hc|/etc/fstab|2=
//SERVER/SHARENAME /mnt/''mountpoint'' cifs credentials=''/path/to/credentials/sambacreds'' 0 0
+
//''SERVER''/''sharename'' /mnt/''mountpoint'' cifs username=''myuser'',password=''mypass'' 0 0
 
}}
 
}}
   
  +
{{Note|共有名に含まれている空白は {{ic|\040}} に置き換えてください (8進数の ASCII コード)。例えば、コマンドラインで {{ic|//''SERVER''/share name}} だったら {{ic|/etc/fstab}} では {{ic|//''SERVER''/share\040name}} となります。}}
''systemd'' を使っている場合 (最近のインストールではデフォルト)、{{ic|1=x-systemd.automount}} オプションを利用することができます。これはサービスの起動を数秒早くできます。また、{{ic|uid}} と {{ic|gid}} オプションを使うことで、現在のユーザーとグループをマップして作業を少し楽にできます。
 
 
{{Warning|{{ic|uid}} と {{ic|gid}} オプションを使うとネットワークデバイスからデータを取得するプログラムで入出力エラーが起こる可能性があります。}}
 
   
  +
サービスの起動を高速化するために、{{ic|1=x-systemd.automount}} オプションをエントリに追加してください:
 
{{hc|/etc/fstab|2=
 
{{hc|/etc/fstab|2=
//''SERVER''/''SHARENAME'' /mnt/''mountpoint'' cifs credentials=''/path/to/smbcredentials'',x-systemd.automount,uid=''username'',gid=''usergroup'' 0 0
+
//''SERVER''/''SHARENAME'' /mnt/''mountpoint'' cifs credentials=''/path/to/smbcredentials/share'',x-systemd.automount 0 0
 
}}
 
}}
   
  +
==== systemd ユニット ====
{{Note|sharename の中の空白は {{ic|\040}} (八進数で空白の ASCII コード) に置き換える必要があります。例えば、{{ic|/etc/fstab}} でコマンドラインの {{ic|//''SERVER''/share name}} は {{ic|//''SERVER''/share\040name}} にしてください。}}
 
  +
{{ic|/etc/systemd/system}} に新しい {{ic|.mount}} ファイルを作成してください。例: {{ic|mnt-myshare.mount}}。
   
  +
* {{ic|1=Requires=}} は使用している[[ネットワーク|ネットワーク設定]]に置き換えてください。
==== ユーザーマウント ====
 
  +
* {{ic|1=What=}} は共有パスに置き換えてください。
  +
* {{ic|1=Where=}} は共有をマウントするパスに置き換えてください。
  +
* {{ic|1=Options=}} は共有のマウントオプションです。
   
{{hc|/etc/fstab|2=
+
{{hc|/etc/systemd/system/mnt-myshare.mount|<nowiki>
  +
[Unit]
//''SERVER''/''SHARENAME'' /mnt/''mountpoint'' cifs users,credentials=''/path/to/smbcredentials'',workgroup=''workgroup'',ip=''serverip'' 0 0
 
  +
Description=Mount Share at boot
}}
 
  +
Requires=systemd-networkd.service
  +
After=network-online.target
  +
Wants=network-online.target
   
  +
[Mount]
{{Note|The option is user'''s''' (plural). For other filesystem types handled by mount, this option is usually ''user''; sans the "'''s'''".}}
 
  +
What=//server/share
  +
Where=/mnt/myshare
  +
Options=credentials=/etc/samba/creds/myshare,iocharset=utf8,rw,x-systemd.automount
  +
Type=cifs
  +
TimeoutSec=30
   
  +
[Install]
これでマウントポイントがユーザーの制御下にあるディレクトリ (つまり、ユーザーのホーム) にある限りユーザーがマウントできるようになります。ユーザーのホームにないマウントポイントで Samba 共有をマウント・アンマウントできるようにするには、[[#smbnetfs|smbnetfs]] を使うか、[[sudo]] で権限をあげてください。
 
  +
WantedBy=multi-user.target
 
  +
</nowiki>}}
=== WINS ホスト名 ===
 
 
{{pkg|smbclient}} パッケージには WINS を使ってホスト名を解決するドライバーが入っています。有効にするには、{{ic|/etc/nsswitch.conf}} の “hosts” 行に “wins” を追加してください。
 
 
=== 自動マウント ===
 
   
  +
{{ic|mnt-myshare.mount}} を使用するにはユニットを[[起動]]します。[[有効化]]すると起動時に共有がマウントされます。
簡単に共有リソースをブラウズする方法は複数存在します:
 
   
 
==== smbnetfs ====
 
==== smbnetfs ====
   
  +
{{Note|1=smbnetfs は Samba のサーバー設定を必要とします。設定方法は上を見てください。}}
{{Note|1=smbnetfs needs an intact Samba server setup.
 
See above on how to do that.}}
 
   
 
まず、マウントしたい共有が全て見れるかどうか確認してください:
 
まず、マウントしたい共有が全て見れるかどうか確認してください:
284行目: 324行目:
 
}}
 
}}
   
必要な場合、smbnetfs によってマウントする特定のホストのエントリを追加することも可能です。
+
必要な場合、smbnetfs によってマウントする特定のホストのエントリを追加することも可能です。詳しくは {{ic|~/.smb/smbnetfs.conf}} に書いてあります。
詳しくは {{ic|~/.smb/smbnetfs.conf}} に書いてあります。
 
   
Dolphin や Nautilus ファイルマネージャを使用する場合、以下を {{ic|~/.smb/smbnetfs.conf}} に追加することで "Disk full" エラーを表示しないようにすることができます。デフォルトでは smbnetfs は空き容量が0バイトだと報告します:
+
[[Dolphin]][[Nautilus]] ファイルマネージャを使用する場合、以下を {{ic|~/.smb/smbnetfs.conf}} に追加することで "Disk full" エラーを表示しないようにすることができます。デフォルトでは smbnetfs は空き容量が0バイトだと報告します:
 
{{hc|~/.smb/smbnetfs.conf|
 
{{hc|~/.smb/smbnetfs.conf|
 
free_space_size 1073741824
 
free_space_size 1073741824
294行目: 333行目:
 
設定が完了したら、次を実行する必要があります:
 
設定が完了したら、次を実行する必要があります:
 
$ chmod 600 ~/.smb/smbnetfs.*
 
$ chmod 600 ~/.smb/smbnetfs.*
設定に問題があると、smbnetfs は 'insecure config file permissions' とエラーを吐きます。
+
設定に問題があると、smbnetfs は {{ic|insecure config file permissions}} とエラーを吐きます。
   
 
最後に、Samba ネットワークを指定したディレクトリにマウントするために、次を実行してください:
 
最後に、Samba ネットワークを指定したディレクトリにマウントするために、次を実行してください:
304行目: 343行目:
   
 
そして、{{ic|smbnetfs}} [[デーモン]]を通常通りに起動・有効化できます。システム共通のマウントポイントは {{ic|/mnt/smbnet/}} になります。
 
そして、{{ic|smbnetfs}} [[デーモン]]を通常通りに起動・有効化できます。システム共通のマウントポイントは {{ic|/mnt/smbnet/}} になります。
 
==== fusesmb ====
 
 
{{Note|1=Because {{ic|smbclient 3.2.X}} is malfunctioning with {{ic|fusesmb}}, revert to using older versions if necessary. See the [https://bbs.archlinux.org/viewtopic.php?id=58434 relevant forum topic] for details.}}
 
 
# [[AUR]] から {{AUR|fusesmb}} をインストールしてください。
 
# マウントポイントを作成: {{ic|mkdir /mnt/fusesmb}}
 
# {{ic|fuse}} [[カーネルモジュール]]をロード。
 
# 共有をマウント: {{bc|fusesmb -o allow_other /mnt/fusesmb}}
 
   
 
==== autofs ====
 
==== autofs ====
320行目: 350行目:
 
=== ファイルマネージャの設定 ===
 
=== ファイルマネージャの設定 ===
   
==== GNOME Files, Nemo, Thunar, PCManFM ====
+
==== GNOME Files, Nemo, Caja, Thunar, PCManFM ====
   
GNOME Files, Nemo, Thunar, PCManFM で samba 共有にアクセスするには[[公式リポジトリ]]の {{Pkg|gvfs-smb}} パッケージをインストールしてください。
+
[[GNOME Files]], [[Nemo]], Caja, [[Thunar]], [[PCManFM]] で samba 共有にアクセスするには[[公式リポジトリ]]の {{Pkg|gvfs-smb}} パッケージをインストールしてください。
   
 
{{ic|Ctrl+l}} を押してロケーションバーに {{ic|smb://''servername''/''share''}} と入力して共有にアクセスします。
 
{{ic|Ctrl+l}} を押してロケーションバーに {{ic|smb://''servername''/''share''}} と入力して共有にアクセスします。
363行目: 393行目:
   
 
2. {{ic|nmap}} で開いているポートを確認:
 
2. {{ic|nmap}} で開いているポートを確認:
# nmap -p 139 -sT 192.168.1.*
+
# nmap -p 139 -sT "192.168.1.*"
   
 
上記の例では 192.168.1.* の範囲の IP アドレスとポート 139 をスキャンします。以下のような結果が得られます:
 
上記の例では 192.168.1.* の範囲の IP アドレスとポート 139 をスキャンします。以下のような結果が得られます:
 
{{hc
 
{{hc
|$ nmap -sT 192.168.1.*
+
|$ nmap -sT "192.168.1.*"
 
|Starting nmap 3.78 ( http://www.insecure.org/nmap/ ) at 2005-02-15 11:45 PHT
 
|Starting nmap 3.78 ( http://www.insecure.org/nmap/ ) at 2005-02-15 11:45 PHT
 
Interesting ports on 192.168.1.1:
 
Interesting ports on 192.168.1.1:
438行目: 468行目:
   
 
$ net rpc
 
$ net rpc
  +
  +
===ユーザー名やパスワードが不要なファイル共有===
  +
{{ic|/etc/samba/smb.conf}} を編集して以下の行を追加してください:
  +
{{bc|<nowiki>map to guest = Bad User</nowiki>}}
  +
  +
上記の行は以下の行の後ろに追加します:
  +
{{bc|<nowiki>security = user</nowiki>}}
  +
  +
共有データを特定のインターフェイスに制限するため以下の行を:
  +
{{bc|<nowiki>; interfaces = 192.168.12.2/24 192.168.13.2/24</nowiki>}}
  +
  +
以下のように置き換えてください:
  +
  +
{{bc|<nowiki>
  +
interfaces = lo eth0
  +
bind interfaces only = true</nowiki>}}
  +
  +
任意で共有にアクセスするアカウントを編集します。以下の行を編集してください:
  +
{{bc|<nowiki>; guest account = nobody</nowiki>}}
  +
  +
例:
  +
{{bc|<nowiki> guest account = pcguest</nowiki>}}
  +
  +
それから以下のようにユーザーを作成します:
  +
{{bc|<nowiki># useradd -c "Guest User" -d /dev/null -s /bin/false pcguest</nowiki>}}
  +
  +
{{ic|pcguest}} ユーザーのパスワードは "" (空) に設定してください。
  +
  +
最後に共有ディレクトリを作成 (書き込みを許可したい場合は {{ic|1=writable = yes}} としてください):
  +
  +
{{bc|<nowiki>
  +
[Public Share]
  +
path = /path/to/public/share
  +
available = yes
  +
browsable = yes
  +
public = yes
  +
writable = no
  +
</nowiki>}}
  +
  +
{{note|ゲストが {{ic|/path}}, {{ic|/path/to}}, {{ic|/path/to/public}} にアクセスできることを確認してください [http://unix.stackexchange.com/questions/13858/do-the-parent-directorys-permissions-matter-when-accessing-a-subdirectory]。}}
  +
  +
=== CUPS を無効にして Samba をビルド ===
  +
  +
[https://wiki.samba.org/index.php/Samba_as_a_print_server Samba Wiki] より:
  +
:Samba には CUPS のサポートが組み込まれています。コンパイル時に CUPS のヘッダーファイルやライブラリが存在した場合、自動的に CUPS が有効になります。
  +
  +
CUPS を無効化するには PKGBUILD を修正する必要があります。{{ic|depends}} と {{ic|makedepends}} から {{ic|libcups}} を消して cups や印刷に関する行を無くしてください。4.1.9-1 の PKGBUILD の場合、169・170・236行目が該当します:
  +
mkdir -p ${pkgdir}/usr/lib/cups/backend
  +
ln -sf /usr/bin/smbspool ${pkgdir}/usr/lib/cups/backend/smb
  +
install -d -m1777 ${pkgdir}/var/spool/samba
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
446行目: 526行目:
   
 
# chmod 0755 /var/cache/samba/msg
 
# chmod 0755 /var/cache/samba/msg
  +
  +
=== ファイルを上書きできない、パーミッションエラー ===
  +
以下の方法を試してみてください:
  +
*{{ic|/etc/fstab}} の[[#マウントエントリ|エントリ]]に {{ic|nodfs}} マウントオプションを追加。
  +
*サーバーの {{ic|/etc/samba/smb.conf}} の {{ic|[global]}} セクションに {{ic|<nowiki>msdfs root = no</nowiki>}} を追加。
   
 
=== ゲストパーミッションで Samba 共有を作成しても Windows クライアントがパスワードを要求する ===
 
=== ゲストパーミッションで Samba 共有を作成しても Windows クライアントがパスワードを要求する ===
453行目: 538行目:
 
=== Windows 7 の接続の問題 - mount error(12): cannot allocate memory ===
 
=== Windows 7 の接続の問題 - mount error(12): cannot allocate memory ===
   
Windows 7 には既知のバグが存在し、Linux では全く問題ない cifs 共有であっても "mount error(12): cannot allocate memory" が発生します。以下のように Windows のレジストリキーを設定することで修正できます:
+
Windows 7 には既知のバグが存在し、Linux では全く問題ない cifs 共有であっても {{ic|mount error(12): cannot allocate memory}} が発生します。以下のように Windows のレジストリキーを設定することで修正できます:
   
 
*{{ic|HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache}} (set to {{ic|1}})
 
*{{ic|HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache}} (set to {{ic|1}})
465行目: 550行目:
 
* Windows の再起動
 
* Windows の再起動
 
* services.msc でサーバーサービスを再起動
 
* services.msc でサーバーサービスを再起動
* コマンドプロンプトから次を実行: 'net stop lanmanserver''net start lanmanserver'。サーバーは停止後に自動的に再起動します。
+
* コマンドプロンプトから次を実行: {{ic|net stop lanmanserver}}{{ic|net start lanmanserver}}。サーバーは停止後に自動的に再起動します。
   
 
{{Note|Google で検索すると "IRPStackSize" のサイズを変更することを推奨するような記事が見つかりますが、これは Windows 7 の問題を修正するということについては間違っています。試さないで下さい。}}
 
{{Note|Google で検索すると "IRPStackSize" のサイズを変更することを推奨するような記事が見つかりますが、これは Windows 7 の問題を修正するということについては間違っています。試さないで下さい。}}
   
 
[http://alan.lamielle.net/2009/09/03/windows-7-nonpaged-pool-srv-error-2017 オリジナルの記事] 。
 
[http://alan.lamielle.net/2009/09/03/windows-7-nonpaged-pool-srv-error-2017 オリジナルの記事] 。
 
=== Windows からパスワードで保護された共有にアクセスするときに問題が発生する ===
 
 
{{Note|追加する必要があるのはローカルの {{ic|smb.conf}} です。サーバーの {{ic|smb.conf}} ではありません。}}
 
 
パスワードで保護された共有に Windows からアクセスしようとすると問題が発生する場合、以下を {{ic|/etc/samba/smb.conf}} に追加してみてください [http://blogs.computerworld.com/networking_nightmare_ii_adding_linux]:
 
 
[global]
 
# lanman fix
 
client lanman auth = yes
 
client ntlmv2 auth = no
 
 
=== ダイアログボックスの表示に長い時間がかかる ===
 
 
Windows XP/Windows 7 から接続しようとするとパスワードのダイアログボックスが表示されるのに30秒程度かかることがあります。サーバーの {{ic|error.log}} を解析すると以下が確認できます:
 
 
[2009/11/11 06:20:12, 0] printing/print_cups.c:cups_connect(103)
 
Unable to connect to CUPS server localhost:631 - Interrupted system call
 
 
以下のように設定することで {{ic|/etc/printcap}} が見つからないことについてエラーを発生させないようにすることができます:
 
 
printing = bsd
 
printcap name = /dev/null
 
   
 
=== Error: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL ===
 
=== Error: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL ===
504行目: 566行目:
 
</nowiki>}}
 
</nowiki>}}
 
Samba サービス {{ic|smbd.service}} を[[再起動]]してログを確認してください:
 
Samba サービス {{ic|smbd.service}} を[[再起動]]してログを確認してください:
{{bc|cat /var/log/samba/smbd.log}}
+
# cat /var/log/samba/smbd.log
 
エラーが表示されなくなったはずです。
 
エラーが表示されなくなったはずです。
   
520行目: 582行目:
 
}}
 
}}
   
  +
=== Protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE ===
=== You are not the owner of the folder ===
 
 
システムを再起動してみてください。
 
 
=== protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE ===
 
   
 
おそらくクライアントが共有にアクセスする権限がありません。クライアントの IP アドレスが {{ic|/etc/samba/smb.conf}} の {{ic|1=hosts allow =}} 行に記述されているか確認してください。
 
おそらくクライアントが共有にアクセスする権限がありません。クライアントの IP アドレスが {{ic|/etc/samba/smb.conf}} の {{ic|1=hosts allow =}} 行に記述されているか確認してください。
535行目: 593行目:
   
 
サーバーが起動していることを確認してください。共有ディレクトリが存在していること、アクセスできることを確認してください。
 
サーバーが起動していることを確認してください。共有ディレクトリが存在していること、アクセスできることを確認してください。
  +
  +
=== 正しいはずなのにパスワードエラーが発生する (error 1326) ===
  +
[https://www.samba.org/samba/history/samba-4.5.0.html Samba 4.5] ではデフォルトで NTLMv1 認証が無効になっています。クライアントに最新のバージョンをインストールしてサポートされていないクライアントのアクセスは拒否することが推奨されています。
  +
  +
それでも NTLMv2 をサポートしていない古いクライアント (例: Windows XP) を使う必要がある場合、NTLMv1 を有効化することができます (セキュリティの観点から非推奨の設定です):
  +
{{hc|/etc/samba/smb.conf|2=
  +
[global]
  +
lanman auth = yes
  +
ntlm auth = yes
  +
}}
  +
  +
NTLMv1 を有効にしたことで NTLMv2 クライアントが認証できなくなった場合、クライアントに以下のファイルを作成してください:
  +
{{hc|/home/user/.smb/smb.conf|2=
  +
[global]
  +
sec = ntlmv2
  +
client ntlmv2 auth = yes
  +
}}
  +
  +
上記の設定は {{ic|mount.cifs}} でマウントされた samba の共有にも影響します。Samba 4.5 にアップグレードしてマウントできなくなった場合、mount コマンドに {{ic|1=sec=ntlmssp}} オプションを追加してください。例:
  +
  +
# mount.cifs //server/share /mnt/point -o sec=ntlmssp,...
  +
  +
詳しくは [https://www.samba.org/samba/docs/man/manpages-3/mount.cifs.8.html man 8 mount.cifs] を見てください。3.8 未満のカーネルでは {{ic|1=sec=ntlm}} がデフォルトでしたが、3.8 から {{ic|1=sec=ntlmssp}} に変更されています。
   
 
== 参照 ==
 
== 参照 ==

2016年10月20日 (木) 01:25時点における版

関連記事

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

目次

サーバーの設定

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

smb.conf

Samba サーバーの設定は /etc/samba/smb.conf で行います。ファイルが存在しないと smbd は起動に失敗します。

デフォルトの Samba 設定ファイル (/etc/samba/smb.conf.default) を /etc/samba/smb.conf にコピーしてください:

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

利用可能なオプションは smb.conf の man ページを参照してください [1]。また、testparm を実行することで samba 設定ファイルが正しいかどうか確認できます。

共有を作成する

/etc/samba/smb.conf を編集して、Share Definitions セクションまでスクロールしてください。デフォルトの設定では、それぞれのユーザーのホームディレクトリに共有を自動で作成します。ただし、users ワイルドカードを追加しないとユーザーはログインすることができません:

/etc/samba/smb.conf
...
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   valid users = %S

smb.confworkgroup は使用する Windows のワークグループと同じ値に設定してください (デフォルト: WORKGROUP)。

サービスを起動する

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

ヒント: Samba ソケットを有効にすると最初の接続時にデーモンが起動します: # systemctl enable smbd.socket

ユーザー定義共有を作成する

ノート: これはオプション機能です。必要なければこのセクションをスキップしてください。

"Usershare" は root 以外のユーザーで共有の定義を追加、変更、および削除できるようにする機能です。

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

# mkdir -p /var/lib/samba/usershare

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

# groupadd -r sambashare

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

# chown root:sambashare /var/lib/samba/usershare

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

# chmod 1770 /var/lib/samba/usershare

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

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

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

# gpasswd sambashare -a your_username

smbd.servicenmbd.service サービスを再起動します。

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

ノート: Thunar で上記の操作をするためには、AUR から thunar-shares-pluginAUR をインストールする必要があります。また、他のユーザーにも共有する場合は、上記設定を usershare owner only = no に変更し、共有するディレクトリにはアクセス権限を付与してください。

ユーザーを追加する

Samba は Linux ユーザーアカウントを必要とします。既存のユーザーアカウントを使用することもできますし、新しくユーザーを作成することもできます。

ユーザー名は Linux 環境と共有しますが、パスワードは Linux のユーザーアカウントと Samba で異なります。samba_user は Samba ユーザーアカウントに置き換えてください:

# smbpasswd -a samba_user

サーバーロール によっては、Samba ユーザーアカウントの既存のファイルのパーミッションと属性を変更する必要があります。

新規ユーザーだけが Samba のファイルサーバー共有にリモートからアクセスできるようにしたい場合、他のログインオプションを制限します:

  • シェルを無効化 - usermod --shell /usr/bin/nologin --lock username
  • SSH ログインを無効化 - /etc/ssh/sshd_conf を編集して AllowUsers オプションを変更。

システムの堅牢化についてはセキュリティを見てください。

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

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

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

# smbpasswd samba_user

必要なポート

ファイアウォールを使う場合は、必要なポートを開くことを忘れないでください (通常は、137-139 + 445)。必要なポートのリストは次を参照: Samba port usage

サンプル設定

設定オプションの詳しい説明は man smb.conf を見て下さい。オンライン版は こちら になります。

/etc/samba/smb.conf
[global]
  deadtime = 60 ; This is useful to stop a server's resources being exhausted by a large number of inactive connections
  disable netbios = yes ; Disable netbios announcing
  dns proxy = no ; nmbd spawns a second copy of itself to do the DNS name lookup requests on 'yes'
  hosts allow = 192.168.1. 127. 10. ; This parameter is a comma, space, or tab delimited set of hosts which are permitted to access a service
  invalid users = root ; This is a list of users that should not be allowed to login to this service
  security = user ; Use as standalone file server
  map to guest = Bad User ; Means user logins with an invalid password are rejected, or allow guest login and mapped into the guest account
  max connections = 100 ; Number of simultaneous connections to a service to be limited
  workgroup = WORKGROUP ; Workgroup the server will appear to be in when queried by clients

  ; Uncomment the following lines to disable printer support
  ;load printers = no
  ;printing = bsd
  ;printcap name = /dev/null
  ;disable spoolss = yes

  ; Default permissions for all shares  
  inherit owner = yes ; Take the ownership of the parent directory when creating files/folders
  create mask = 0664 ; Create file mask
  directory mask = 0775 ; Create director mask
  force create mode = 0664 ; Force create file mask
  force directory mode = 0775 ; Force create directory mask

; Private Share
[private] ; translate into: \\server\private
  comment = My Private Share ; Seen next to a share when a client queries the server
  path = /path/to/data ; Directory to which the user of the service is to be given access
  read only = no ; An inverted synonym to writeable.
  valid users = user1 user2 @group1 @group2; restrict a service to a particular set of users and/or groups

; Public Share
;[public]
; comment = My Public Share
; path = /path/to/public
; read only = yes
; guest ok = yes; No password required to connect to the service

設定の変更を適用するために smbdnmb サービスを再起動してください。

クライアントの設定

公開されている共有の確認などをする必要がない場合、/usr/bin/mount.cifs が含まれている cifs-utils だけをインストールしてください。

FTP ライクなコマンドラインインターフェイスを使うには smbclient をインストールします。よく使うコマンドは man smbclient を見てください。

デスクトップ環境によっては、GUI で設定することができます。ファイルマネージャを使用する方法はファイルマネージャの設定を見てください。

ノート: cifs-utilssmbclient をインストールしたら、cifs カーネルモジュールをロードするか再起動が必要です。

公開されている共有の確認

以下のコマンドでパブリックな共有を確認できます:

$ smbclient -L hostname -U%

もしくは、smbtree を実行して共有のツリー図を表示します。コンピュータが多数接続されているネットワークでは推奨しませんが、共有名が正しいかどうか確認するのに役立ちます:

$ smbtree -b -N

-b (--broadcast) オプションはマスターブラウザの代わりにブロードキャストを使用し、-N (-no-pass) はパスワードを要求しないオプションです。

NetBIOS/WINS ホストネーム

ホストネームを解決するには winbindd起動有効化する必要があります。

smbclient パッケージに WINS を使用してホストネームを解決するドライバーが含まれています。有効にするには、/etc/nsswitch.conf の "hosts" 行に wins を追加してください。

手動マウント

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

# mkdir /mnt/mountpoint

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

# mount -t cifs //SERVER/sharename /mnt/mountpoint -o user=username,password=password,uid=username,gid=group,workgroup=workgroup,ip=serverip,iocharset=utf8

マウントポイントがユーザーの制御下にあるディレクトリ (例: ユーザーのホームディレクトリ) の場合、users マウントオプションを追加することでユーザーにマウントを許可できます。

ノート: オプションは users です (複数形)。他のファイルシステムでは通常 user オプションを使用します。
警告: uidgid マウントオプションを使用して I/O エラーが発生する場合、ファイルのパーミッションと属性を設定・確認することを推奨します。

SERVER

サーバーの名前。

sharename

共有ディレクトリ。

mountpoint

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

-o [options]

詳しくは man mount.cifs を見て下さい。
ノート:
  • 最後に / を使うのは止めて下さい。//SERVER/sharename/ は動作しません。
  • マウントが不安定で、途切れたりフリーズする場合、vers= オプションを使って他の SMB プロトコルバージョンを有効にしてみてください。例えば、Windows Vista のマウントには vers=2.0 を使ってみて下さい。
  • シャットダウン時に cifs でマウントしたネットワーク共有のタイムアウトが発生する場合、WPA supplicant#ネットワーク共有 (cifs) をマウントしたときにシャットダウン時に起こる問題を参照。
共有パスワードの保存

誰でも読み取れるファイルにパスワードを保存することは推奨しません。credentials ファイルを作成するのが安全です:

/path/to/credentials/share
username=myuser
password=mypass

マウントコマンドの username=myuser,password=mypasscredentials=/path/to/credentials/share に置き換えてください。

credential ファイルは root からしか読込・書込できないように設定するべきです:

# chmod 600 /path/to/credentials/share

自動マウント

ノート: 起動時に正しくマウントするには systemd-networkd-wait-online.service (systemd-networkd を使用している場合) や NetworkManager-wait-online.service (NetworkManager を使用している場合) を有効化する必要があります。

マウントエントリ

以下は認証が必要な cifs マウントエントリの例です:

/etc/fstab
//SERVER/sharename /mnt/mountpoint cifs username=myuser,password=mypass 0 0
ノート: 共有名に含まれている空白は \040 に置き換えてください (8進数の ASCII コード)。例えば、コマンドラインで //SERVER/share name だったら /etc/fstab では //SERVER/share\040name となります。

サービスの起動を高速化するために、x-systemd.automount オプションをエントリに追加してください:

/etc/fstab
//SERVER/SHARENAME /mnt/mountpoint cifs credentials=/path/to/smbcredentials/share,x-systemd.automount 0 0

systemd ユニット

/etc/systemd/system に新しい .mount ファイルを作成してください。例: mnt-myshare.mount

  • Requires= は使用しているネットワーク設定に置き換えてください。
  • What= は共有パスに置き換えてください。
  • Where= は共有をマウントするパスに置き換えてください。
  • Options= は共有のマウントオプションです。
/etc/systemd/system/mnt-myshare.mount
[Unit]
Description=Mount Share at boot
Requires=systemd-networkd.service
After=network-online.target
Wants=network-online.target

[Mount]
What=//server/share
Where=/mnt/myshare
Options=credentials=/etc/samba/creds/myshare,iocharset=utf8,rw,x-systemd.automount
Type=cifs
TimeoutSec=30

[Install]
WantedBy=multi-user.target

mnt-myshare.mount を使用するにはユニットを起動します。有効化すると起動時に共有がマウントされます。

smbnetfs

ノート: smbnetfs は Samba のサーバー設定を必要とします。設定方法は上を見てください。

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

$ 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 -sf /etc/samba/smb.conf ~/.smb/smb.conf

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

~/.smb/smbnetfs.auth
auth			"hostname" "username" "password"

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

DolphinNautilus ファイルマネージャを使用する場合、以下を ~/.smb/smbnetfs.conf に追加することで "Disk full" エラーを表示しないようにすることができます。デフォルトでは smbnetfs は空き容量が0バイトだと報告します:

~/.smb/smbnetfs.conf
free_space_size 1073741824

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

$ chmod 600 ~/.smb/smbnetfs.*

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

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

$ smbnetfs mount_point
デーモン

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

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

autofs

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

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

GNOME Files, Nemo, Caja, Thunar, PCManFM

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

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

マウントされた共有はファイルシステムで /run/user/your_UID/gvfs~/.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 にもありません。公式にはサポートされていない(もしくは非公式サポートすらない)ため、動作がおかしかったり全く動かなかったりします。

Tips and tricks

Samba 共有で特定のファイル拡張子をブロック

ノート: このパラメータを設定すると、全てのファイルとディスプレイをスキャンしてチェックしなくてはならなくなるため、Samba のパフォーマンスに影響が出ます。

Samba にはファイルの拡張子など、特定のパターンを使ってファイルをブロックするオプションが存在します。このオプションを使うことでウイルスが繁殖するのを防いだり、特定のファイルで容量が食われるのを防ぐことができます。オプションの詳細は man smb.conf を見て下さい。

/etc/samba/smb.conf
...
[myshare]
  comment = Private
  path = /mnt/data
  read only = no
  veto files = /*.exe/*.com/*.dll/*.bat/*.vbs/*.tmp/*.mp3/*.avi/*.mp4/*.wmv/*.wma/

ネットワーク共有の探知

ローカルネットワーク上の他のシステムについて何も知らない場合、smbnetfs などの自動化ツールも使えないときは、以下の方法で Samba の共有を手動で調べることができます。

1. まず pacman を使って nmapsmbclient をインストール:

# pacman -S nmap smbclient

2. nmap で開いているポートを確認:

# nmap -p 139 -sT "192.168.1.*"

上記の例では 192.168.1.* の範囲の IP アドレスとポート 139 をスキャンします。以下のような結果が得られます:

$ nmap -sT "192.168.1.*"
Starting nmap 3.78 ( http://www.insecure.org/nmap/ ) at 2005-02-15 11:45 PHT
Interesting ports on 192.168.1.1:
(The 1661 ports scanned but not shown below are in state: closed)
PORT     STATE SERVICE
139/tcp  open  netbios-ssn
5000/tcp open  UPnP

Interesting ports on 192.168.1.5:
(The 1662 ports scanned but not shown below are in state: closed)
PORT     STATE SERVICE
6000/tcp open  X11

Nmap run completed -- 256 IP addresses (2 hosts up) scanned in 7.255 seconds

最初の結果は他のシステムです。2番目の結果はスキャンを実行したクライアントです。

3. ポート 139 が開いているシステムが見つかったので、nmblookup を使って NetBIOS の名前をチェック:

$ nmblookup -A 192.168.1.1
Looking up status of 192.168.1.1
        PUTER           <00> -         B <ACTIVE>
        HOMENET         <00> - <GROUP> B <ACTIVE>
        PUTER           <03> -         B <ACTIVE>
        PUTER           <20> -         B <ACTIVE>
        HOMENET         <1e> - <GROUP> B <ACTIVE>
        USERNAME        <03> -         B <ACTIVE>
        HOMENET         <1d> -         B <ACTIVE>
        MSBROWSE        <01> - <GROUP> B <ACTIVE>

<20> を見て下さい。これはホストがサービスを開いていることを示します。

4. smbclient を使って PUTER で共有されているサービスを確認します。パスワードの入力が求められたら、エンターを押すとリストが表示されます:

$ smbclient -L \\PUTER
Sharename       Type      Comment
---------       ----      -------
MY_MUSIC        Disk
SHAREDDOCS      Disk
PRINTER$        Disk
PRINTER         Printer
IPC$            IPC       Remote Inter Process Communication

Server               Comment
---------            -------
PUTER

Workgroup            Master
---------            -------
HOMENET               PUTER

Windows コンピュータの遠隔操作

Samba には Windows と対話するためのツールが含まれています。リモートデスクトップで Windows コンピュータにアクセスできない場合に便利です。以下に例を示します。

コメントとシャットダウンコマンドを送信:

$ net rpc shutdown -C "comment" -I IPADDRESS -U USERNAME%PASSWORD

-C とコメントを -f に変えることで強制的にシャットダウンさせることができます。再起動させるには、-C-f の後に -r を追加します。

サービスを停止・起動:

$ net rpc service stop SERVICENAME -I IPADDRESS -U USERNAME%PASSWORD

利用可能な net rpc コマンドを全て確認するには:

$ net rpc

ユーザー名やパスワードが不要なファイル共有

/etc/samba/smb.conf を編集して以下の行を追加してください:

map to guest = Bad User

上記の行は以下の行の後ろに追加します:

security = user

共有データを特定のインターフェイスに制限するため以下の行を:

;   interfaces = 192.168.12.2/24 192.168.13.2/24

以下のように置き換えてください:

interfaces = lo eth0
bind interfaces only = true

任意で共有にアクセスするアカウントを編集します。以下の行を編集してください:

;   guest account = nobody

例:

   guest account = pcguest

それから以下のようにユーザーを作成します:

# useradd -c "Guest User" -d /dev/null -s /bin/false pcguest

pcguest ユーザーのパスワードは "" (空) に設定してください。

最後に共有ディレクトリを作成 (書き込みを許可したい場合は writable = yes としてください):

[Public Share]
path = /path/to/public/share
available = yes
browsable = yes
public = yes
writable = no
ノート: ゲストが /path, /path/to, /path/to/public にアクセスできることを確認してください [2]

CUPS を無効にして Samba をビルド

Samba Wiki より:

Samba には CUPS のサポートが組み込まれています。コンパイル時に CUPS のヘッダーファイルやライブラリが存在した場合、自動的に CUPS が有効になります。

CUPS を無効化するには PKGBUILD を修正する必要があります。dependsmakedepends から libcups を消して cups や印刷に関する行を無くしてください。4.1.9-1 の PKGBUILD の場合、169・170・236行目が該当します:

mkdir -p ${pkgdir}/usr/lib/cups/backend
ln -sf /usr/bin/smbspool ${pkgdir}/usr/lib/cups/backend/smb
install -d -m1777 ${pkgdir}/var/spool/samba

トラブルシューティング

Samba SMB/CIFS サーバーが起動できない

/var/cache/samba/ のパーミッションが正しく設定されているか確認して smbd.servicesmbd.socket を再起動してください:

# chmod 0755 /var/cache/samba/msg

ファイルを上書きできない、パーミッションエラー

以下の方法を試してみてください:

  • /etc/fstabエントリnodfs マウントオプションを追加。
  • サーバーの /etc/samba/smb.conf[global] セクションに msdfs root = no を追加。

ゲストパーミッションで Samba 共有を作成しても Windows クライアントがパスワードを要求する

/etc/samba/smb.confglobal セクションに map to guest を設定してください:

map to guest = Bad User

Windows 7 の接続の問題 - mount error(12): cannot allocate memory

Windows 7 には既知のバグが存在し、Linux では全く問題ない cifs 共有であっても mount error(12): cannot allocate memory が発生します。以下のように Windows のレジストリキーを設定することで修正できます:

  • HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache (set to 1)
  • HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size (set to 3)

もしくは、管理者モードでコマンドプロンプトを起動して以下を実行してください:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "LargeSystemCache" /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v "Size" /t REG_DWORD /d 3 /f

設定を適用するには以下のどれかを実行する必要があります:

  • Windows の再起動
  • services.msc でサーバーサービスを再起動
  • コマンドプロンプトから次を実行: net stop lanmanservernet start lanmanserver。サーバーは停止後に自動的に再起動します。
ノート: Google で検索すると "IRPStackSize" のサイズを変更することを推奨するような記事が見つかりますが、これは Windows 7 の問題を修正するということについては間違っています。試さないで下さい。

オリジナルの記事

Error: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL

ホームユーザーで Samba をサーバーや NAS とのファイル共有のためだけに使っている場合、Samba によるプリンターの共有は必要ないと思うかもしれません。そのような場合、以下の行を /etc/samba/smb.conf に追加することでエラーが発生しないようにできます:

load printers = No
printing = bsd
printcap name = /dev/null
disable spoolss = Yes

Samba サービス smbd.service再起動してログを確認してください:

# cat /var/log/samba/smbd.log

エラーが表示されなくなったはずです。

フォルダの共有ができなくなる

Dolphin (ファイルマネージャ) でフォルダを共有したときに、最初は問題なく共有できたのに、Dolphin を再起動すると共有フォルダの共有アイコンが消えてしまい、ターミナル (Konsole) に以下のような出力がされることがあります:

‘net usershare’ returned error 255: net usershare: usershares are currently disabled

この問題を修正するには、#ユーザー定義共有を作成するに書かれているように usershare を有効にしてください。

"Failed to retrieve share list from server" というエラーでネットワークを閲覧できない

(学校や大学、ホテルなどの) ローカルネットワークが信頼できないためにファイアウォール (iptables) を使っている場合、次のような理由が考えられます: smbclient がローカルネットワークを閲覧するとき udp ポート 137 でブロードキャストリクエストが送信されます。ネットワーク上のサーバーはクライアントに返答しますが、返答の送信元アドレスが送信先アドレスと食い違うため、iptables は返答を "ESTABLISHED" や "RELATED" と認識できず、パケットをドロップします。iptables の設定に以下を追加することで解決できます:

iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns

Protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE

おそらくクライアントが共有にアクセスする権限がありません。クライアントの IP アドレスが /etc/samba/smb.confhosts allow = 行に記述されているか確認してください。

Connection to SERVER failed: (Error NT_STATUS_UNSUCCESSFUL)

おそらく smbclient に間違ったサーバー名を指定しています。サーバー名を確認するには、サーバーで hostnamectl を実行して "Transient hostname" の行を見て下さい。

Connection to SERVER failed: (Error NT_STATUS_CONNECTION_REFUSED)

サーバーが起動していることを確認してください。共有ディレクトリが存在していること、アクセスできることを確認してください。

正しいはずなのにパスワードエラーが発生する (error 1326)

Samba 4.5 ではデフォルトで NTLMv1 認証が無効になっています。クライアントに最新のバージョンをインストールしてサポートされていないクライアントのアクセスは拒否することが推奨されています。

それでも NTLMv2 をサポートしていない古いクライアント (例: Windows XP) を使う必要がある場合、NTLMv1 を有効化することができます (セキュリティの観点から非推奨の設定です):

/etc/samba/smb.conf
[global]
   lanman auth = yes
   ntlm auth = yes

NTLMv1 を有効にしたことで NTLMv2 クライアントが認証できなくなった場合、クライアントに以下のファイルを作成してください:

/home/user/.smb/smb.conf
[global]
   sec = ntlmv2
   client ntlmv2 auth = yes

上記の設定は mount.cifs でマウントされた samba の共有にも影響します。Samba 4.5 にアップグレードしてマウントできなくなった場合、mount コマンドに sec=ntlmssp オプションを追加してください。例:

# mount.cifs //server/share /mnt/point -o sec=ntlmssp,...

詳しくは man 8 mount.cifs を見てください。3.8 未満のカーネルでは sec=ntlm がデフォルトでしたが、3.8 から sec=ntlmssp に変更されています。

参照