「Samba」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎トラブルシューティング: 英語版に追記されている項目を追加)
(カテゴリを追加)
 
(7人の利用者による、間の54版が非表示)
1行目: 1行目:
  +
{{Translateme|翻訳が古くなっています。}}
[[Category:ネットワーク]]
 
  +
[[Category:ネットワーク共有]]
  +
[[Category:サーバー]]
 
[[cs:Samba]]
 
[[cs:Samba]]
 
[[da:Samba]]
 
[[da:Samba]]
9行目: 11行目:
 
[[ru:Samba]]
 
[[ru:Samba]]
 
[[sr:Samba]]
 
[[sr:Samba]]
[[tr:Samba]]
+
[[zh-hans:Samba]]
[[zh-CN:Samba]]
+
[[zh-hant:Samba]]
[[zh-TW:Samba]]
 
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|Active Directory integration}}
{{Related4|Samba/Tips and tricks}}
 
{{Related|Active Directory Integration}}
+
{{Related|Samba/Active Directory ドメインコントローラ}}
{{Related3|Samba 4 Active Directory domain controller|Samba 4 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 セットアップする手順を説明します
   
== サーバーの設定 ==
+
==サーバーの設定==
   
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 は起動に失敗します。
   
  +
[https://git.samba.org/samba.git/?p=samba.git;a=blob_plain;f=examples/smb.conf.default;hb=HEAD こちら] にあるデフォルトの Samba 設定ファイルを {{ic|/etc/samba/smb.conf}} にコピーしてください:
{{Warning|マシンに {{ic|Localhost}} という名前を付けないで下さい、Windows では {{ic|127.0.0.1}} として解決されていまいます。}}
 
  +
# wget "https://git.samba.org/samba.git/?p=samba.git;a=blob_plain;f=examples/smb.conf.default;hb=HEAD" -O /etc/samba/smb.conf
   
  +
{{Tip|デフォルト設定ではログファイルが書き込みできない場所に設定されているため、エラーが発生します。次のように変更すると良いでしょう: {{ic|log file <nowiki>=</nowiki> /var/log/samba/%m.log}}。}}
=== 共有を作成する ===
 
   
  +
利用可能なオプションは {{man|5|smb.conf}} の man ページを参照してください。また、{{man|1|testparm}} コマンドを実行することで samba 設定ファイルが正しいかどうか確認できます。
{{ic|/etc/samba/smb.conf}} を編集して、'''Share Definitions''' セクションまでスクロールしてください。デフォルトの設定では、それぞれのユーザーのホームディレクトリに共有を自動で作成します。また、プリンターの共有もデフォルトで作成します。サンプル設定には多数のコメントが付属しています。オプションに関する詳細は {{ic|man smb.conf}} で見ることができます。オンライン版は [http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html こちら] になります。
 
   
  +
===共有を作成する===
Windows 側では、{{ic|smb.conf}} を Windows ワークグループに変更してください (Windows デフォルト: WORKGROUP)。
 
   
  +
{{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
  +
}}
   
  +
{{ic|smb.conf}} の {{ic|workgroup}} は使用する Windows のワークグループと同じ値に設定してください (デフォルト: {{ic|WORKGROUP}})。
SMB の基本的なファイル共有をするには、{{ic|smbd}} と {{ic|nmbd}} サービスを[[Systemd#ユニットを使う|起動]]してください。
 
詳しくは [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 ソケットを有効にすると最初の接続時にデーモンが起動します:
 
  +
# systemctl disable smbd.service
 
  +
{{Note|{{Pkg|samba}} 4.8.0-1 からユニットの名前が {{ic|smbd.service}}, {{ic|nmbd.service}}, {{ic|winbindd.service}} から {{ic|smb.service}}, {{ic|nmb.service}}, {{ic|winbind.service}} に変更になっています。}}
# systemctl enable smbd.socket
 
}}
 
   
  +
SMB の基本的なファイル共有をするには、{{ic|smb}} と {{ic|nmb}} サービスを[[Systemd#ユニットを使う|起動]]してください。詳しくは {{man|8|smbd}} と {{man|8|nmbd}} のマニュアルページを見て下さい。
=== user share path を作成する===
 
   
  +
===ユーザー定義共有を作成する===
以下のコマンドはオブジェクトの名前を後でコマンドを実行する環境に自動で export します:
 
  +
{{Note|これはオプション機能です。必要なければこのセクションをスキップしてください。}}
   
  +
"Usershares" は root 以外のユーザーで共有の定義を追加、変更、および削除できるようにする機能です。
# export USERSHARES_DIR="/var/lib/samba/usershare"
 
# export USERSHARES_GROUP="sambashare"
 
   
 
次のコマンドは {{ic|/var/lib/samba}} に usershares ディレクトリを作成します:
 
次のコマンドは {{ic|/var/lib/samba}} に usershares ディレクトリを作成します:
   
# mkdir -p ${USERSHARES_DIR}
+
# mkdir -p /var/lib/samba/usershares
   
 
次のコマンドは sambashare グループを作成します:
 
次のコマンドは sambashare グループを作成します:
   
# groupadd ${USERSHARES_GROUP}
+
# groupadd -r sambashare
   
 
次のコマンドは root に作成したディレクトリの所有者とグループを変更します:
 
次のコマンドは root に作成したディレクトリの所有者とグループを変更します:
   
# chown root:${USERSHARES_GROUP} ${USERSHARES_DIR}
+
# chown root:sambashare /var/lib/samba/usershares
   
 
次のコマンドは usershares ディレクトリのパーミッションを変更して sambashare グループのユーザーがファイルを読み書き・実行できるようにします:
 
次のコマンドは usershares ディレクトリのパーミッションを変更して sambashare グループのユーザーがファイルを読み書き・実行できるようにします:
   
# chmod 1770 ${USERSHARES_DIR}
+
# chmod 1770 /var/lib/samba/usershares
   
 
{{ic|smb.conf}} 設定ファイルに以下の変数を設定します:
 
{{ic|smb.conf}} 設定ファイルに以下の変数を設定します:
77行目: 82行目:
 
...
 
...
 
[global]
 
[global]
usershare path = /var/lib/samba/usershare
+
usershare path = /var/lib/samba/usershares
 
usershare max shares = 100
 
usershare max shares = 100
 
usershare allow guests = yes
 
usershare allow guests = yes
86行目: 91行目:
 
{{ic|sambashare}} グループにあなたのユーザーを追加してください、{{ic|''your_username''}} はあなたの linux ユーザーの名前に置き換えてください:
 
{{ic|sambashare}} グループにあなたのユーザーを追加してください、{{ic|''your_username''}} はあなたの linux ユーザーの名前に置き換えてください:
   
# usermod -a -G ${USERSHARES_GROUP} ''your_username''
+
# gpasswd sambashare -a ''your_username''
   
{{ic|smbd}} と {{ic|nmbd}} サービスを再起動します。
+
{{ic|smb.service}} と {{ic|nmb.service}} サービスを再起動します。
   
一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、[[Thunar]] でディレクトリを右クリックしてネットワークに共有することが可能です。
+
一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、[[Thunar]] でディレクトリを右クリックしてネットワークに共有することが可能です。エラー {{ic|You are not the owner of the folder}} が表示されるときは、システムを再起動してみてください
エラー {{ic|You are not the owner of the folder}} が表示されるときは、システムを再起動してみてください。
 
   
  +
{{Note|[[Thunar]] で上記の操作をするためには、{{AUR|thunar-shares-plugin}} パッケージをインストールする必要があります。また、他のユーザーにも共有する場合は、上記設定を {{ic|<nowiki>usershare owner only = no</nowiki>}} に変更し、共有するディレクトリにはアクセス権限を付与してください。}}
=== ユーザーを追加する ===
 
   
  +
===ユーザーを追加する===
samba ユーザーのための [[ユーザーとグループ|Linux ユーザーアカウント]]を作成してください。{{ic|''samba_user''}} は好きな名前に置き換えられます:
 
   
  +
Samba は Linux ユーザーアカウントを必要とします。既存のユーザーアカウントを使用することもできますし、新しく[[ユーザーとグループ#ユーザー管理|ユーザーを作成]]することもできます。
# useradd ''samba_user''
 
   
そして同じで Samba ユーザーアカウントを作成してください:
+
ユーザーは Linux 環境と共有しますが、パスワードは Linux のユーザーアカウントと Samba 異なります。{{ic|samba_user}} は Samba ユーザーアカウントに置き換えてください:
   
 
# pdbedit -a -u ''samba_user''
 
# pdbedit -a -u ''samba_user''
   
  +
[https://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html#SERVERROLE サーバーロール] によっては、Samba ユーザーアカウントの既存の[[ファイルのパーミッションと属性]]を変更する必要があります。
=== samba ユーザーのパスワードを変更する ===
 
  +
  +
新規ユーザーだけが Samba のファイルサーバー共有にリモートからアクセスできるようにしたい場合、他のログインオプションを制限します:
  +
  +
*シェルを無効化 - {{ic|usermod --shell /usr/bin/nologin --lock username}}。
  +
*SSH ログインを無効化 - {{ic|/etc/ssh/sshd_conf}} を編集して {{ic|AllowUsers}} オプションを変更。
  +
  +
システムの堅牢化については[[セキュリティ]]を見てください。
  +
  +
===ユーザーを一覧する===
  +
  +
Samba のユーザーは {{man|8|pdbedit}} コマンドで確認できます:
  +
  +
# pdbedit -L -v
  +
  +
===samba ユーザーのパスワードを変更する===
   
 
{{Note|バージョン 3.4.0 から、smbpasswd はデフォルトで使用されなくなっています。既存の smbpasswd データベースは新しいフォーマットに変換することが可能です。}}
 
{{Note|バージョン 3.4.0 から、smbpasswd はデフォルトで使用されなくなっています。既存の smbpasswd データベースは新しいフォーマットに変換することが可能です。}}
111行目: 130行目:
 
# smbpasswd ''samba_user''
 
# smbpasswd ''samba_user''
   
== クライアンの設定 ==
+
===必要なポー===
   
  +
[[ファイアウォール]]を使う場合は、必要なポートを開くことを忘れないでください (通常は、137-139 + 445)。必要なポートのリストは次を参照: [https://www.samba.org/~tpot/articles/firewall.html Samba port usage]。
Samba/SMB/CIFS サーバーからファイルにアクセスするのに必要なのは {{Pkg|smbclient}} だけです。これは公式リポジトリからインストールできます。
 
   
  +
===サンプル設定===
LAN 上の他のコンピュータの共有リソースには GUI や CLI を使ってローカルでアクセス・マウントすることが可能です。ほとんどの軽量デスクトップ環境には共有リソースのアクセスを容易にする固有の方法がないため、グラフィカルな方法には制限があります。
 
  +
設定オプションの詳しい説明は {{man|5|smb.conf}} を見て下さい。オンライン版は [http://www.samba.gr.jp/project/translation/3.5/htmldocs/manpages-3/smb.conf.5.html こちら] になります。
   
  +
{{hc|/etc/samba/smb.conf|<nowiki>
共有アクセスは2つの部分に別れます。1つはバックのファイルシステムのメカニズムで、2つ目はユーザーが共有リソースをマウントするのを選択できるようにするインターフェイスです。環境によっては1つ目の部分はすでに初めから備わっていることがあります。
 
  +
[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
公式リポジトリから {{Pkg|smbclient}} をインストールしてください。軽量な方法を使いたい場合で、公開共有を表示する必要がないときは {{ic|/usr/bin/mount.cifs}} が入っている {{Pkg|cifs-utils}} だけをインストールします。
 
  +
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
  +
</nowiki>}}
  +
  +
設定の変更を適用するために {{ic|smb}} や {{ic|nmb}} サービスを再起動してください。
  +
  +
=== 高度な設定 ===
  +
  +
==== スループットを向上させる ====
  +
  +
{{Warning|この設定によりデータの破損や接続の問題が発生する場合があり、TCP/IP スタックが機能不全を起こす可能性があることに注意してください。}}
  +
  +
ほとんどのユーザにとってデフォルトの設定で十分なはずです。しかし、'ソケットオプション'を正しく設定することでパフォーマンスが向上する可能性がありますが、設定を間違うと同じくらいパフォーマンスが低下してしまう可能性があります。大きな変更を加える前に効果をテストしてください。
  +
  +
以下のオプションを適用する前に {{man|5|smb.conf}} man ページを読んでください。
  +
  +
以下の設定は {{ic|/etc/samba/smb.conf}} の {{ic|[global]}} セクションに[[追加]]する必要があります。
  +
  +
deadtime を設定することで、大量の非アクティブな接続によってサーバのリソースが浪費されることを防ぐことができます:
  +
  +
deadtime = 30
  +
  +
sendfile を使うことで、システムの CPU をより効率的に使用することができ、Samba をより高速化できます:
  +
  +
use sendfile = yes
  +
  +
min receivefile size を設定することで、ネットワークソケットのバッファからファイルシステムのバッファキャッシュへのゼロコピーの直接書き込みが可能になります。パフォーマンスが向上する場合がありますが、ユーザによるテストが推奨されます:
  +
  +
min receivefile size = 16384
  +
  +
受信側と送信側のバッファサイズを増やし、ソケット最適化フラグを使用することで、スループットが向上するかもしれません。フラグは一部のネットワークで問題を引き起こす場合があるので、それぞれのフラグをテストすることが推奨されます:
  +
  +
socket options = IPTOS_LOWDELAY TCP_NODELAY IPTOS_THROUGHPUT SO_RCVBUF=131072 SO_SNDBUF=131072
  +
  +
{{Note|一部のオプションは機能させるためにネットワークインターフェイスの調整が必要です。[[Sysctl#ネットワーク]] を参照してください。}}
  +
  +
==クライアントの設定==
  +
  +
FTP ライクなコマンドラインインターフェイスを使うには {{Pkg|smbclient}} をインストールします。よく使うコマンドは {{man|1|smbclient}} を見てください。
  +
  +
公開されている共有の確認などをする必要がない場合、{{ic|/usr/bin/mount.cifs}} が含まれている {{Pkg|cifs-utils}} だけをインストールしてください。
  +
  +
[[デスクトップ環境]]によっては、GUI で設定することができます。ファイルマネージャを使用する方法は[[#ファイルマネージャの設定|ファイルマネージャの設定]]を見てください。
  +
  +
{{Note|
  +
* {{Pkg|smbclient}} は {{ic|/etc/samba/smb.conf}} ファイルを必要とします。touch で空のファイルを作成するか、あるいはデフォルトの [[#smb.conf|smb.conf]] からコピーしてください。
  +
* {{Pkg|cifs-utils}} や {{Pkg|smbclient}} をインストールしたら、{{ic|cifs}} [[カーネルモジュール]]をロードするか再起動が必要です。
  +
}}
   
サーバーの公開されている共有を表示するには:
+
===公開されている共有の確認===
  +
以下のコマンドでパブリックな共有を確認できます:
   
 
$ smbclient -L ''hostname'' -U%
 
$ smbclient -L ''hostname'' -U%
  +
  +
もしくは、''smbtree'' を実行して共有のツリー図を表示します。コンピュータが多数接続されているネットワークでは推奨しませんが、共有名が正しいかどうか確認するのに役立ちます:
  +
  +
$ smbtree -N
  +
  +
{{ic|-N}} ({{ic|-no-pass}}) はパスワードを要求しないオプションです。
  +
  +
===NetBIOS/WINS ホストネーム===
  +
  +
ホストネームを解決するには {{ic|winbind}} を[[起動]]・[[有効化]]する必要があります。
  +
  +
{{pkg|smbclient}} パッケージに WINS を使用してホストネームを解決するドライバーが含まれています。有効にするには、{{ic|/etc/nsswitch.conf}} の "hosts" 行に {{ic|wins}} を追加してください。
  +
  +
===手動マウント===
   
 
共有のマウントポイントを作成:
 
共有のマウントポイントを作成:
131行目: 245行目:
 
# 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 username=''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''
  +
: 共有ディレクトリ。
 
  +
:共有ディレクトリ。
   
 
''mountpoint''
 
''mountpoint''
  +
: 共有をマウントするローカルのディレクトリ。
 
  +
:共有をマウントするローカルのディレクトリ。
   
 
{{ic|<nowiki>-o [options]</nowiki>}}
 
{{ic|<nowiki>-o [options]</nowiki>}}
  +
: 詳しくは {{ic|man mount.cifs}} を見て下さい。
 
  +
:詳しくは {{man|8|mount.cifs}} を見て下さい。
   
 
{{Note|
 
{{Note|
 
* 最後に {{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}}。
   
  +
{{Note|ファイル名はマウントポイントにあわせてください。例えば共有フォルダを {{ic|/mnt/myshare}} にマウントする場合はユニット名は {{ic|mnt-myshare.mount}} となります。違うユニット名だと {{ic|1=systemd[1]: mnt-myshare.mount: Where= setting does not match unit name. Refusing.}} というエラーが発生します。}}
==== ユーザーマウント ====
 
   
  +
*{{ic|1=Requires=}} は使用している[[ネットワーク|ネットワーク設定]]に置き換えてください。
{{hc|/etc/fstab|2=
 
  +
*{{ic|1=What=}} は共有パスに置き換えてください。
//''SERVER''/''SHARENAME'' /mnt/''mountpoint'' cifs users,credentials=''/path/to/smbcredentials'',workgroup=''workgroup'',ip=''serverip'' 0 0
 
  +
*{{ic|1=Where=}} は共有をマウントするパスに置き換えてください。
}}
 
  +
*{{ic|1=Options=}} は共有のマウントオプションです。
   
  +
{{hc|/etc/systemd/system/mnt-myshare.mount|<nowiki>
{{Note|The option is user'''s''' (plural). For other filesystem types handled by mount, this option is usually ''user''; sans the "'''s'''".}}
 
  +
[Unit]
  +
Description=Mount Share at boot
  +
Requires=systemd-networkd.service
  +
After=network-online.target
  +
Wants=network-online.target
   
  +
[Mount]
これでマウントポイントがユーザーの制御下にあるディレクトリ (つまり、ユーザーのホーム) にある限りユーザーがマウントできるようになります。ユーザーのホームにないマウントポイントで Samba 共有をマウント・アンマウントできるようにするには、[[#smbnetfs|smbnetfs]] を使うか、[[sudo]] で権限をあげてください。
 
  +
What=//server/share
  +
Where=/mnt/myshare
  +
Options=credentials=/etc/samba/creds/myshare,iocharset=utf8,rw,x-systemd.automount
  +
Type=cifs
  +
TimeoutSec=30
   
  +
[Install]
=== WINS ホスト名 ===
 
  +
WantedBy=multi-user.target
 
  +
</nowiki>}}
{{pkg|smbclient}} パッケージには WINS を使ってホスト名を解決するドライバーが入っています。有効にするには、{{ic|/etc/nsswitch.conf}} の “hosts” 行に “wins” を追加してください。
 
   
  +
{{ic|mnt-myshare.mount}} を使用するにはユニットを[[起動]]します。[[有効化]]すると起動時に共有がマウントされます。
=== 自動マウント ===
 
   
  +
{{Note|(IP アドレスの代わりに) サーバーのホストネームを使って共有したい場合、{{ic|1=systemd-resolved.service}} を {{ic|1=After}} と {{ic|1=Wants}} に追加してください。起動時にマウントエラーが発生しなくなります。}}
簡単に共有リソースをブラウズする方法は複数存在します:
 
   
==== smbnetfs ====
+
====smbnetfs====
   
  +
{{Note|1=smbnetfs は Samba のサーバー設定を必要とします。設定方法は上を見てください。}}
{{Note|1=smbnetfs needs an intact Samba server setup.
 
See above on how to do that.}}
 
   
 
まず、マウントしたい共有が全て見れるかどうか確認してください:
 
まず、マウントしたい共有が全て見れるかどうか確認してください:
215行目: 348行目:
 
domain master = auto
 
domain master = auto
   
そして {{ic|smbd}} と {{ic|nmbd}} サービスを再起動してください。
+
そして {{ic|smb}} と {{ic|nmb}} サービスを再起動してください。
   
全てが問題なく動作するようになったら、公式リポジトリから {{Pkg|smbnetfs}} を[[pacman#特定のパッケージのインストール|インストール]]してください。
+
全てが問題なく動作するようになったら、{{Pkg|smbnetfs}} パッケージを[[pacman#特定のパッケージのインストール|インストール]]してください。
   
 
次に、次の行を {{ic|/etc/fuse.conf}} に追加して:
 
次に、次の行を {{ic|/etc/fuse.conf}} に追加して:
241行目: 374行目:
 
}}
 
}}
   
必要な場合、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
251行目: 383行目:
 
設定が完了したら、次を実行する必要があります:
 
設定が完了したら、次を実行する必要があります:
 
$ chmod 600 ~/.smb/smbnetfs.*
 
$ chmod 600 ~/.smb/smbnetfs.*
設定に問題があると、smbnetfs は 'insecure config file permissions' とエラーを吐きます。
+
設定に問題があると、smbnetfs は {{ic|insecure config file permissions}} とエラーを吐きます。
   
 
最後に、Samba ネットワークを指定したディレクトリにマウントするために、次を実行してください:
 
最後に、Samba ネットワークを指定したディレクトリにマウントするために、次を実行してください:
 
$ smbnetfs ''mount_point''
 
$ smbnetfs ''mount_point''
   
===== デーモン =====
+
=====デーモン=====
   
 
Arch Linux パッケージは smbnetfs にシステム共通のオペレーションモードを追加しています。有効にするには、{{ic|/etc/smbnetfs/.smb}} ディレクトリで上記の修正を行う必要があります。
 
Arch Linux パッケージは smbnetfs にシステム共通のオペレーションモードを追加しています。有効にするには、{{ic|/etc/smbnetfs/.smb}} ディレクトリで上記の修正を行う必要があります。
262行目: 394行目:
 
そして、{{ic|smbnetfs}} [[デーモン]]を通常通りに起動・有効化できます。システム共通のマウントポイントは {{ic|/mnt/smbnet/}} になります。
 
そして、{{ic|smbnetfs}} [[デーモン]]を通常通りに起動・有効化できます。システム共通のマウントポイントは {{ic|/mnt/smbnet/}} になります。
   
==== fusesmb ====
+
====autofs====
 
{{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 ====
 
   
 
Linux におけるカーネルベースの自動マウントの情報は [[Autofs]] を見て下さい。
 
Linux におけるカーネルベースの自動マウントの情報は [[Autofs]] を見て下さい。
   
=== ファイルマネージャの設定 ===
+
===ファイルマネージャの設定===
   
==== 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''}} と入力して共有にアクセスします。
285行目: 408行目:
 
マウントされた共有はファイルシステムで {{ic|/run/user/''your_UID''/gvfs}} や {{ic|~/.gvfs}} にあるように見えます。
 
マウントされた共有はファイルシステムで {{ic|/run/user/''your_UID''/gvfs}} や {{ic|~/.gvfs}} にあるように見えます。
   
==== KDE ====
+
====KDE====
   
KDE には Samba 共有をブラウズするための機能が内蔵されています。したがってパッケージの追加は必要ありません。ただし、KDE システム設定で GUI を使うには、公式リポジトリから {{Pkg|kdenetwork-filesharing}} パッケージをインストールしてください。
+
KDE には Samba 共有をブラウズするための機能が内蔵されています。したがってパッケージの追加は必要ありません。ただし、KDE システム設定で GUI を使うには、{{Pkg|kdenetwork-filesharing}} パッケージをインストールしてください。
   
 
Dolphin でアクセスした時に "Time Out" エラーが表示される場合、{{ic|smb.conf}} で次の行をアンコメント・編集してください: {{bc|1=name resolve order = lmhosts bcast host wins}}
 
Dolphin でアクセスした時に "Time Out" エラーが表示される場合、{{ic|smb.conf}} で次の行をアンコメント・編集してください: {{bc|1=name resolve order = lmhosts bcast host wins}}
[http://ubuntuforums.org/showthread.php?t=1605499 このページ] を参照。
+
[https://ubuntuforums.org/showthread.php?t=1605499 このページ] を参照。
   
==== 他のグラフィカル環境 ====
+
====他のグラフィカル環境====
   
 
有用なプログラムは多数ありますが、プログラムのパッケージを作成しなくてはなりません。Arch のパッケージビルドシステムを使ってパッケージを作れます。インストールするのに特定の環境を必要としないために簡単に持ち運ぶことができます。
 
有用なプログラムは多数ありますが、プログラムのパッケージを作成しなくてはなりません。Arch のパッケージビルドシステムを使ってパッケージを作れます。インストールするのに特定の環境を必要としないために簡単に持ち運ぶことができます。
   
* {{Pkg|pyneighborhood}} は公式リポジトリから利用できます。
+
*{{AUR|pyneighborhood}} は公式リポジトリから利用できます。
* Xffm の LinNeighborhood, RUmba, xffm-samba プラグインは公式リポジトリにも AUR にもありません。公式にはサポートされていない(もしくは非公式サポートすらない)ため、動作がおかしかったり全く動かなかったりします。
+
*Xffm の LinNeighborhood, RUmba, xffm-samba プラグインは公式リポジトリにも AUR にもありません。公式にはサポートされていない(もしくは非公式サポートすらない)ため、動作がおかしかったり全く動かなかったりします。
  +
  +
==ヒントとテクニック==
  +
  +
===セキュリティを高めるために SMB1 プロトコルを無効化===
  +
  +
SMB1 プロトコルのセキュリティは問題があるため、大抵のクライアントは SMB2 以上をサポートしています。SMB1 プロトコルによるサーバーへの接続を拒否することでセキュリティを向上できます:
  +
  +
{{hc|/etc/samba/smb.conf|2=
  +
[global]
  +
server min protocol = SMB2
  +
}}
  +
  +
===パフォーマンスを改善する===
  +
  +
{{hc|/etc/samba/smb.conf|2=
  +
[global]
  +
server multi channel support = yes
  +
socket options = IPTOS_THROUGHPUT SO_KEEPALIVE
  +
deadtime = 30
  +
use sendfile = Yes
  +
write cache size = 262144
  +
min receivefile size = 16384
  +
aio read size = 16384
  +
aio write size = 16384
  +
nt pipe support = no
  +
}}
  +
  +
{{Warning|1=nt pipe support = no を設定すると Windows の機能が破壊されることがあるので注意してください。}}
  +
  +
===プリンター共有を無効化===
  +
プリンターを共有したくない場合、以下の設定を使ってください:
  +
{{hc|/etc/samba/smb.conf|2=
  +
[global]
  +
load printers = no
  +
}}
  +
  +
使用する Samba のバージョンによっては、{{ic|1=printcap name = /dev/null}} と {{ic|1=disable spools = yes}} オプションによってさらにリソースを節約できます。
   
  +
===Samba 共有で特定のファイル拡張子をブロック===
== Tips and tricks ==
 
=== Samba 共有で特定のファイル拡張子をブロック ===
 
 
{{Note|このパラメータを設定すると、全てのファイルとディスプレイをスキャンしてチェックしなくてはならなくなるため、Samba のパフォーマンスに影響が出ます。}}
 
{{Note|このパラメータを設定すると、全てのファイルとディスプレイをスキャンしてチェックしなくてはならなくなるため、Samba のパフォーマンスに影響が出ます。}}
Samba にはファイルの拡張子など、特定のパターンを使ってファイルをブロックするオプションが存在します。このオプションを使うことでウイルスが繁殖するのを防いだり、特定のファイルで容量が食われるのを防ぐことができます。オプションの詳細は {{ic|man smb.conf}} を見て下さい。
+
Samba にはファイルの拡張子など、特定のパターンを使ってファイルをブロックするオプションが存在します。このオプションを使うことでウイルスが繁殖するのを防いだり、特定のファイルで容量が食われるのを防ぐことができます。オプションの詳細は {{man|5|smb.conf}} を見て下さい。
   
 
{{hc|/etc/samba/smb.conf|2=
 
{{hc|/etc/samba/smb.conf|2=
313行目: 472行目:
 
}}
 
}}
   
=== ネットワーク共有の探知 ===
+
===ネットワーク共有の探知===
 
ローカルネットワーク上の他のシステムについて何も知らない場合、[[#smbnetfs|smbnetfs]] などの自動化ツールも使えないときは、以下の方法で Samba の共有を手動で調べることができます。
 
ローカルネットワーク上の他のシステムについて何も知らない場合、[[#smbnetfs|smbnetfs]] などの自動化ツールも使えないときは、以下の方法で Samba の共有を手動で調べることができます。
   
1. まず [[pacman]] を使って {{Pkg|nmap}} と {{Pkg|smbclient}} をインストール:
+
1. まず [[pacman]] を使って {{Pkg|nmap}} と {{Pkg|smbclient}} パッケージをインストール
# pacman -S nmap smbclient
 
   
 
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|$ nmap -sT "192.168.1.*"|
{{hc
 
  +
Starting nmap 3.78 ( http://www.insecure.org/nmap/ ) at 2005-02-15 11:45 PHT
|$ 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:
 
Interesting ports on 192.168.1.1:
 
(The 1661 ports scanned but not shown below are in state: closed)
 
(The 1661 ports scanned but not shown below are in state: closed)
342行目: 499行目:
 
最初の結果は他のシステムです。2番目の結果はスキャンを実行したクライアントです。
 
最初の結果は他のシステムです。2番目の結果はスキャンを実行したクライアントです。
   
3. ポート 139 が開いているシステムが見つかったので、{{ic|nmblookup}} を使って NetBIOS の名前をチェック:
+
3. ポート 139 が開いているシステムが見つかったので、{{man|1|nmblookup}} を使って NetBIOS の名前をチェック:
  +
{{hc|$ nmblookup -A 192.168.1.1|
{{hc
 
|$ nmblookup -A 192.168.1.1
+
Looking up status of 192.168.1.1
|Looking up status of 192.168.1.1
 
 
PUTER <00> - B <ACTIVE>
 
PUTER <00> - B <ACTIVE>
 
HOMENET <00> - <GROUP> B <ACTIVE>
 
HOMENET <00> - <GROUP> B <ACTIVE>
359行目: 515行目:
   
 
4. {{ic|smbclient}} を使って ''PUTER'' で共有されているサービスを確認します。パスワードの入力が求められたら、エンターを押すとリストが表示されます:
 
4. {{ic|smbclient}} を使って ''PUTER'' で共有されているサービスを確認します。パスワードの入力が求められたら、エンターを押すとリストが表示されます:
  +
{{hc|$ smbclient -L \\PUTER|<nowiki>
{{hc
 
|$ smbclient -L \\PUTER
 
|<nowiki>
 
 
Sharename Type Comment
 
Sharename Type Comment
 
--------- ---- -------
 
--------- ---- -------
379行目: 533行目:
 
</nowiki>}}
 
</nowiki>}}
   
=== Windows コンピュータの遠隔操作 ===
+
===Windows コンピュータの遠隔操作===
 
Samba には Windows と対話するためのツールが含まれています。リモートデスクトップで Windows コンピュータにアクセスできない場合に便利です。以下に例を示します。
 
Samba には Windows と対話するためのツールが含まれています。リモートデスクトップで Windows コンピュータにアクセスできない場合に便利です。以下に例を示します。
   
396行目: 550行目:
 
$ net rpc
 
$ net rpc
   
  +
===ユーザー名やパスワードが不要なファイル共有===
== トラブルシューティング ==
 
  +
{{ic|/etc/samba/smb.conf}} を編集して以下の行を追加してください:
  +
map to guest = Bad User
   
  +
上記の行は以下の行の後ろに追加します:
=== Samba SMB/CIFS サーバーが起動できない ===
 
  +
security = user
   
  +
共有データを特定のインターフェイスに制限するため以下の行を:
{{ic|/var/cache/samba/}} のパーミッションが正しく設定されているか確認して {{ic|smbd.service}} や {{ic|smbd.socket}} を再起動してください:
 
  +
; interfaces = 192.168.12.2/24 192.168.13.2/2
  +
  +
以下のように置き換えてください:
  +
  +
{{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}} にアクセスできることを確認してください [https://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
  +
  +
==トラブルシューティング==
  +
  +
===Samba SMB/CIFS サーバーが起動できない===
  +
  +
{{ic|/var/cache/samba/}} のパーミッションが正しく設定されているか確認して {{ic|smb.service}} を再起動してください:
   
 
# chmod 0755 /var/cache/samba/msg
 
# chmod 0755 /var/cache/samba/msg
   
  +
===AppArmor におけるパーミッションの問題===
=== ゲストパーミッションで Samba 共有を作成しても Windows クライアントがパスワードを要求する ===
 
  +
  +
[[#共有を作成する|共有パス]]をホームディレクトリ以外に設定した場合、{{ic|/etc/apparmor.d/local/usr.sbin.smbd}} でホワイトリストに指定してください。例:
  +
  +
{{hc|/etc/apparmor.d/local/usr.sbin.smbd|
  +
/data/** lrwk,
  +
}}
  +
  +
===ファイルを上書きできない、パーミッションエラー===
  +
以下の方法を試してみてください:
  +
  +
*{{ic|/etc/fstab}} の[[#マウントエントリ|エントリ]]に {{ic|nodfs}} マウントオプションを追加。
  +
*サーバーの {{ic|/etc/samba/smb.conf}} の {{ic|[global]}} セクションに {{ic|<nowiki>msdfs root = no</nowiki>}} を追加。
  +
  +
===ゲストパーミッションで Samba 共有を作成しても Windows クライアントがパスワードを要求する===
 
{{ic|/etc/samba/smb.conf}} の {{ic|global}} セクションに {{ic|map to guest}} を設定してください:
 
{{ic|/etc/samba/smb.conf}} の {{ic|global}} セクションに {{ic|map to guest}} を設定してください:
 
map to guest = Bad User
 
map to guest = Bad User
   
=== 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}})
420行目: 639行目:
   
 
設定を適用するには以下のどれかを実行する必要があります:
 
設定を適用するには以下のどれかを実行する必要があります:
  +
* 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 の問題を修正するということについては間違っています。試さないで下さい。}}
428行目: 648行目:
 
[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 からパスワード保護された共有にアクセスするときに問題が発生する ===
+
===Windows 10 1709 以上接続に問題が発生する - "Windows cannot access" 0x80004005===
   
  +
Windows 10 バージョン 1709 を使っている一部のマシンで発生するエラーです。このエラーは SMB1 が無効になっていることとは関係がなく、Microsoft によってセキュアでないゲストログインが一部で無効化されたことが原因です。
{{Note|追加する必要があるのはローカルの {{ic|smb.conf}} です。サーバーの {{ic|smb.conf}} ではありません。}}
 
   
  +
解決するには、グループポリシーエディタ ({{ic|gpedit.msc}}) を開いて ''Computer configuration\administrative templates\network\Lanman Workstation > Enable insecure guest logons'' を有効にしてください。もしくは、レジストリの以下の値を変更してください:
パスワードで保護された共有に Windows からアクセスしようとすると問題が発生する場合、以下を {{ic|/etc/samba/smb.conf}} に追加してみてください [http://blogs.computerworld.com/networking_nightmare_ii_adding_linux]:
 
   
  +
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
[global]
 
  +
"AllowInsecureGuestAuth"=dword:1
# lanman fix
 
client lanman auth = yes
 
client ntlmv2 auth = no
 
   
  +
===Error: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL===
=== ダイアログボックスの表示に長い時間がかかる ===
 
 
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 ===
 
   
 
ホームユーザーで Samba をサーバーや NAS とのファイル共有のためだけに使っている場合、Samba によるプリンターの共有は必要ないと思うかもしれません。そのような場合、以下の行を {{ic|/etc/samba/smb.conf}} に追加することでエラーが発生しないようにできます:
 
ホームユーザーで Samba をサーバーや NAS とのファイル共有のためだけに使っている場合、Samba によるプリンターの共有は必要ないと思うかもしれません。そのような場合、以下の行を {{ic|/etc/samba/smb.conf}} に追加することでエラーが発生しないようにできます:
460行目: 666行目:
 
disable spoolss = Yes
 
disable spoolss = Yes
 
</nowiki>}}
 
</nowiki>}}
Samba サービス {{ic|smbd.service}} を[[再起動]]してログを確認してください:
+
Samba サービス {{ic|smb.service}} を[[再起動]]してログを確認してください:
{{bc|cat /var/log/samba/smbd.log}}
+
# cat /var/log/samba/smbd.log
 
エラーが表示されなくなったはずです。
 
エラーが表示されなくなったはずです。
   
  +
===フォルダの共有ができなくなる===
=== Sharing a folder fails ===
 
   
  +
[[Dolphin]] (ファイルマネージャ) でフォルダを共有したときに、最初は問題なく共有できたのに、''Dolphin'' を再起動すると共有フォルダの共有アイコンが消えてしまい、ターミナル (''Konsole'') に以下のような出力がされることがあります:
It means that while you are sharing a folder from ''Dolphin'' (file manager) and everything seems ok at first, after restarting ''Dolphin'' the share icon is gone from the shared folder, and also some output like this in terminal (''Konsole'') output:
 
   
 
‘net usershare’ returned error 255: net usershare: usershares are currently disabled
 
‘net usershare’ returned error 255: net usershare: usershares are currently disabled
   
  +
この問題を修正するには、[[#ユーザー定義共有を作成する]]に書かれているように usershare を有効にしてください。
To fix it, enable usershare as described in [[#Creating usershare path]].
 
   
=== "Browsing" network fails with "Failed to retrieve share list from server" ===
+
==="Failed to retrieve share list from server" というエラーでネットワークを閲覧できない===
  +
(学校や大学、ホテルなどの) ローカルネットワークが信頼できないためにファイアウォール (iptables) を使っている場合、次のような理由が考えられます: smbclient がローカルネットワークを閲覧するとき udp ポート 137 でブロードキャストリクエストが送信されます。ネットワーク上のサーバーはクライアントに返答しますが、返答の送信元アドレスが送信先アドレスと食い違うため、iptables は返答を "ESTABLISHED" や "RELATED" と認識できず、パケットをドロップします。iptables の設定に以下を追加することで解決できます:{{bc|
And you are using a firewall (iptables) because you do not trust your local (school, university, hotel) local network. This may be due to the following: When the smbclient is browsing the local network it sends out a broadcast request on udp port 137. The servers on the network then reply to your client but as the source address of this reply is different from the destination address iptables saw when sending the request for the listing out, iptables will not recognize the reply as being "ESTABLISHED" or "RELATED", and hence the packet is dropped. A possible solution is to add:{{bc|
 
 
iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns
 
iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns
 
}}
 
}}
to your iptables setup.
 
   
  +
===ネットワークを閲覧すると空のフォルダが表示される===
=== You are not the owner of the folder ===
 
  +
Samba を正しく設定しても、{{Pkg|gvfs}} ベースのファイルマネージャ ([[Nautilus]], [[PCManFM]] など) を使用して Windows 共有のネットワークを見ても空のフォルダしか表示されません。Samba 4.7 でデフォルトプロトコルが変更されたためにファイルブラウザで問題が発生するようになっています。一時的な解決策として {{ic|smb.conf}} 設定ファイルに以下のパラメータを追加してください:
   
  +
{{hc|/etc/samba/smb.conf|2=
システムを再起動してみてください。
 
  +
...
  +
[global]
  +
client max protocol = NT1
  +
...
  +
}}
   
=== protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE ===
+
===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 =}} 行に記述されているか確認してください。
   
=== Connection to SERVER failed: (Error NT_STATUS_UNSUCCESSFUL) ===
+
===Connection to SERVER failed: (Error NT_STATUS_UNSUCCESSFUL)===
   
 
おそらく {{ic|smbclient}} に間違ったサーバー名を指定しています。サーバー名を確認するには、サーバーで {{ic|hostnamectl}} を実行して "Transient hostname" の行を見て下さい。
 
おそらく {{ic|smbclient}} に間違ったサーバー名を指定しています。サーバー名を確認するには、サーバーで {{ic|hostnamectl}} を実行して "Transient hostname" の行を見て下さい。
   
=== Connection to SERVER failed: (Error NT_STATUS_CONNECTION_REFUSED) ===
+
===Connection to SERVER failed: (Error NT_STATUS_CONNECTION_REFUSED)===
   
 
サーバーが起動していることを確認してください。共有ディレクトリが存在していること、アクセスできることを確認してください。
 
サーバーが起動していることを確認してください。共有ディレクトリが存在していること、アクセスできることを確認してください。
   
  +
===Protocol negotiation failed: NT_STATUS_CONNECTION_RESET===
== 参照 ==
 
  +
おそらく SMB1 プロトコルが使えないようにサーバーが設定されています。{{ic|/etc/samba/smb.conf}} に {{ic|1=client max protocol = SMB2}} オプションを追加してください。もしくは {{ic|smbclient}} に引数として {{ic|-m SMB2}} を指定してください。
  +
  +
===正しいはずなのにパスワードエラーが発生する (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,...
  +
  +
詳しくは {{man|8|mount.cifs}} を見てください。3.8 未満のカーネルでは {{ic|1=sec=ntlm}} がデフォルトでしたが、3.8 から {{ic|1=sec=ntlmssp}} に変更されています。
  +
  +
===Windows の予約文字のマッピング===
  +
  +
カーネル 3.18 から cifs モジュールはデフォルトで "mapposix" オプションを使用します [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=2baa2682531ff02928e2d3904800696d9e7193db]。unix 拡張を使って Samba のデフォルト設定で共有をマウントした場合、Windows の7個の予約文字 {{ic|<nowiki>: \ * < > ? |</nowiki>}} が含まれているファイルやディレクトリにアクセスできなくなります。以下の方法で解決することができます:
  +
  +
*cifs の {{ic|nomapposix}} マウントオプションを使用する:
  +
  +
# mount.cifs //server/share /mnt/point -o nomapposix
  +
  +
*[https://www.mankier.com/8/vfs_fruit fruit] を使って {{ic|mapposix}} ("SFM", Services for Mac) 文字を適切な文字にマッピングするように Samba を設定:
  +
  +
{{hc|/etc/samba/smb.conf|2=
  +
[global]
  +
vfs objects = catia fruit
  +
fruit:encoding = native
  +
}}
  +
  +
*[https://www.mankier.com/8/vfs_catia catia] を使って禁則文字を手動でマッピング:
  +
  +
{{hc|/etc/samba/smb.conf|2=
  +
[global]
  +
vfs objects = catia
  +
catia:mappings = 0x22:0xf022, 0x2a:0xf02a, 0x2f:0xf02f, 0x3a:0xf03a, 0x3c:0xf03c, 0x3e:0xf03e, 0x3f:0xf03f, 0x5c:0xf05c, 0x7c:0xf07c, 0x20:0xf020
  +
}}
  +
  +
catia や fruit を使用する方法には出力不可文字でファイルがフィルタリングされるという欠点があります。
  +
  +
===Mount error: Host is down===
  +
Synology NAS サーバーの共有フォルダをマウントしようとしたときに発生するエラーです。{{ic|1=vers=1.0}} マウントオプションを使うことで解決します。
  +
  +
==参照==
   
* [http://www.samba.org/samba/docs/SambaIntro.html Samba: An Introduction]
+
*[http://www.samba.org/samba/docs/SambaIntro.html Samba: An Introduction]
* [http://www.samba.org/ Samba 公式サイト]
+
*[http://www.samba.org/ Samba 公式サイト]

2024年4月11日 (木) 20:18時点における最新版

この記事あるいはセクションは翻訳の途中です。
ノート: 翻訳が古くなっています。 (議論: トーク:Samba#)

関連記事

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

目次

サーバーの設定

Samba を使ってファイルを共有するには、samba パッケージをインストールしてください。

smb.conf

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

こちら にあるデフォルトの Samba 設定ファイルを /etc/samba/smb.conf にコピーしてください:

# wget "https://git.samba.org/samba.git/?p=samba.git;a=blob_plain;f=examples/smb.conf.default;hb=HEAD" -O /etc/samba/smb.conf
ヒント: デフォルト設定ではログファイルが書き込みできない場所に設定されているため、エラーが発生します。次のように変更すると良いでしょう: log file = /var/log/samba/%m.log

利用可能なオプションは smb.conf(5) の man ページを参照してください。また、testparm(1) コマンドを実行することで 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)。

サービスを起動する

ノート: samba 4.8.0-1 からユニットの名前が smbd.service, nmbd.service, winbindd.service から smb.service, nmb.service, winbind.service に変更になっています。

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

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

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

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

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

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

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

# groupadd -r sambashare

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

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

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

# chmod 1770 /var/lib/samba/usershares

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

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

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

# gpasswd sambashare -a your_username

smb.servicenmb.service サービスを再起動します。

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

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

ユーザーを追加する

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

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

# pdbedit -a -u samba_user

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

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

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

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

ユーザーを一覧する

Samba のユーザーは pdbedit(8) コマンドで確認できます:

# pdbedit -L -v

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

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

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

# smbpasswd samba_user

必要なポート

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

サンプル設定

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

/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

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

高度な設定

スループットを向上させる

警告: この設定によりデータの破損や接続の問題が発生する場合があり、TCP/IP スタックが機能不全を起こす可能性があることに注意してください。

ほとんどのユーザにとってデフォルトの設定で十分なはずです。しかし、'ソケットオプション'を正しく設定することでパフォーマンスが向上する可能性がありますが、設定を間違うと同じくらいパフォーマンスが低下してしまう可能性があります。大きな変更を加える前に効果をテストしてください。

以下のオプションを適用する前に smb.conf(5) man ページを読んでください。

以下の設定は /etc/samba/smb.conf[global] セクションに追加する必要があります。

deadtime を設定することで、大量の非アクティブな接続によってサーバのリソースが浪費されることを防ぐことができます:

deadtime = 30

sendfile を使うことで、システムの CPU をより効率的に使用することができ、Samba をより高速化できます:

use sendfile = yes

min receivefile size を設定することで、ネットワークソケットのバッファからファイルシステムのバッファキャッシュへのゼロコピーの直接書き込みが可能になります。パフォーマンスが向上する場合がありますが、ユーザによるテストが推奨されます:

min receivefile size = 16384

受信側と送信側のバッファサイズを増やし、ソケット最適化フラグを使用することで、スループットが向上するかもしれません。フラグは一部のネットワークで問題を引き起こす場合があるので、それぞれのフラグをテストすることが推奨されます:

socket options = IPTOS_LOWDELAY TCP_NODELAY IPTOS_THROUGHPUT SO_RCVBUF=131072 SO_SNDBUF=131072
ノート: 一部のオプションは機能させるためにネットワークインターフェイスの調整が必要です。Sysctl#ネットワーク を参照してください。

クライアントの設定

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

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

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

ノート:
  • smbclient/etc/samba/smb.conf ファイルを必要とします。touch で空のファイルを作成するか、あるいはデフォルトの smb.conf からコピーしてください。
  • cifs-utilssmbclient をインストールしたら、cifs カーネルモジュールをロードするか再起動が必要です。

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

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

$ smbclient -L hostname -U%

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

$ smbtree -N

-N (-no-pass) はパスワードを要求しないオプションです。

NetBIOS/WINS ホストネーム

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

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

手動マウント

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

# mkdir /mnt/mountpoint

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

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

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

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

SERVER

サーバーの名前。

sharename

共有ディレクトリ。

mountpoint

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

-o [options]

詳しくは mount.cifs(8) を見て下さい。
ノート:
  • 最後に / を使うのは止めて下さい。//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

ノート: ファイル名はマウントポイントにあわせてください。例えば共有フォルダを /mnt/myshare にマウントする場合はユニット名は mnt-myshare.mount となります。違うユニット名だと systemd[1]: mnt-myshare.mount: Where= setting does not match unit name. Refusing. というエラーが発生します。
  • 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 を使用するにはユニットを起動します。有効化すると起動時に共有がマウントされます。

ノート: (IP アドレスの代わりに) サーバーのホストネームを使って共有したい場合、systemd-resolved.serviceAfterWants に追加してください。起動時にマウントエラーが発生しなくなります。

smbnetfs

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

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

$ smbtree -U remote_user

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

domain master = auto

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

全てが問題なく動作するようになったら、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 のパッケージビルドシステムを使ってパッケージを作れます。インストールするのに特定の環境を必要としないために簡単に持ち運ぶことができます。

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

ヒントとテクニック

セキュリティを高めるために SMB1 プロトコルを無効化

SMB1 プロトコルのセキュリティは問題があるため、大抵のクライアントは SMB2 以上をサポートしています。SMB1 プロトコルによるサーバーへの接続を拒否することでセキュリティを向上できます:

/etc/samba/smb.conf
[global]
server min protocol = SMB2

パフォーマンスを改善する

/etc/samba/smb.conf
[global]
        server multi channel support = yes
        socket options = IPTOS_THROUGHPUT SO_KEEPALIVE
        deadtime = 30
        use sendfile = Yes
        write cache size = 262144
        min receivefile size = 16384
        aio read size = 16384
        aio write size = 16384
        nt pipe support = no
警告: nt pipe support = no を設定すると Windows の機能が破壊されることがあるので注意してください。

プリンター共有を無効化

プリンターを共有したくない場合、以下の設定を使ってください:

/etc/samba/smb.conf
[global]
        load printers = no

使用する Samba のバージョンによっては、printcap name = /dev/nulldisable spools = yes オプションによってさらにリソースを節約できます。

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

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

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

/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 パッケージをインストール。

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(1) を使って 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/2

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

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 にアクセスできることを確認してください [1]

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/ のパーミッションが正しく設定されているか確認して smb.service を再起動してください:

# chmod 0755 /var/cache/samba/msg

AppArmor におけるパーミッションの問題

共有パスをホームディレクトリ以外に設定した場合、/etc/apparmor.d/local/usr.sbin.smbd でホワイトリストに指定してください。例:

/etc/apparmor.d/local/usr.sbin.smbd
/data/** lrwk,

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

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

  • /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 の問題を修正するということについては間違っています。試さないで下さい。

オリジナルの記事

Windows 10 1709 以上で接続に問題が発生する - "Windows cannot access" 0x80004005

Windows 10 バージョン 1709 を使っている一部のマシンで発生するエラーです。このエラーは SMB1 が無効になっていることとは関係がなく、Microsoft によってセキュアでないゲストログインが一部で無効化されたことが原因です。

解決するには、グループポリシーエディタ (gpedit.msc) を開いて Computer configuration\administrative templates\network\Lanman Workstation > Enable insecure guest logons を有効にしてください。もしくは、レジストリの以下の値を変更してください:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"AllowInsecureGuestAuth"=dword:1

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 サービス smb.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

ネットワークを閲覧すると空のフォルダが表示される

Samba を正しく設定しても、gvfs ベースのファイルマネージャ (Nautilus, PCManFM など) を使用して Windows 共有のネットワークを見ても空のフォルダしか表示されません。Samba 4.7 でデフォルトプロトコルが変更されたためにファイルブラウザで問題が発生するようになっています。一時的な解決策として smb.conf 設定ファイルに以下のパラメータを追加してください:

/etc/samba/smb.conf
...
[global]
  client max protocol = NT1
  ...

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)

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

Protocol negotiation failed: NT_STATUS_CONNECTION_RESET

おそらく SMB1 プロトコルが使えないようにサーバーが設定されています。/etc/samba/smb.confclient max protocol = SMB2 オプションを追加してください。もしくは smbclient に引数として -m SMB2 を指定してください。

正しいはずなのにパスワードエラーが発生する (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,...

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

Windows の予約文字のマッピング

カーネル 3.18 から cifs モジュールはデフォルトで "mapposix" オプションを使用します [2]。unix 拡張を使って Samba のデフォルト設定で共有をマウントした場合、Windows の7個の予約文字 : \ * < > ? | が含まれているファイルやディレクトリにアクセスできなくなります。以下の方法で解決することができます:

  • cifs の nomapposix マウントオプションを使用する:
# mount.cifs //server/share /mnt/point -o nomapposix
  • fruit を使って mapposix ("SFM", Services for Mac) 文字を適切な文字にマッピングするように Samba を設定:
/etc/samba/smb.conf
[global]
   vfs objects = catia fruit
   fruit:encoding = native
  • catia を使って禁則文字を手動でマッピング:
/etc/samba/smb.conf
[global]
   vfs objects = catia
   catia:mappings = 0x22:0xf022, 0x2a:0xf02a, 0x2f:0xf02f, 0x3a:0xf03a, 0x3c:0xf03c, 0x3e:0xf03e, 0x3f:0xf03f, 0x5c:0xf05c, 0x7c:0xf07c, 0x20:0xf020

catia や fruit を使用する方法には出力不可文字でファイルがフィルタリングされるという欠点があります。

Mount error: Host is down

Synology NAS サーバーの共有フォルダをマウントしようとしたときに発生するエラーです。vers=1.0 マウントオプションを使うことで解決します。

参照