Samba
Samba は SMB/CIFS ネットワークプロトコルの再実装であり、NFS の代わりになるものとして Linux と Windows システム間でのファイルやプリンターの共有を容易にします。Samba の設定は簡単で操作もわかりやすいと言うユーザーもいますが、新規ユーザーの多くは複雑で直感的でないメカニズムが手を余らせることになります。この記事では Samba をセットアップする手順を説明します。
目次
- 1 サーバーの設定
- 2 クライアントの設定
- 3 ヒントとテクニック
- 4 トラブルシューティング
- 4.1 Samba SMB/CIFS サーバーが起動できない
- 4.2 AppArmor におけるパーミッションの問題
- 4.3 ファイルを上書きできない、パーミッションエラー
- 4.4 ゲストパーミッションで Samba 共有を作成しても Windows クライアントがパスワードを要求する
- 4.5 Windows 7 の接続の問題 - mount error(12): cannot allocate memory
- 4.6 Windows 10 1709 以上で接続に問題が発生する - "Windows cannot access" 0x80004005
- 4.7 Error: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
- 4.8 フォルダの共有ができなくなる
- 4.9 "Failed to retrieve share list from server" というエラーでネットワークを閲覧できない
- 4.10 ネットワークを閲覧すると空のフォルダが表示される
- 4.11 Protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
- 4.12 Connection to SERVER failed: (Error NT_STATUS_UNSUCCESSFUL)
- 4.13 Connection to SERVER failed: (Error NT_STATUS_CONNECTION_REFUSED)
- 4.14 Protocol negotiation failed: NT_STATUS_CONNECTION_RESET
- 4.15 正しいはずなのにパスワードエラーが発生する (error 1326)
- 4.16 Windows の予約文字のマッピング
- 4.17 Mount error: Host is down
- 5 参照
サーバーの設定
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
利用可能なオプションは 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.conf
の workgroup
は使用する Windows のワークグループと同じ値に設定してください (デフォルト: WORKGROUP
)。
サービスを起動する
SMB の基本的なファイル共有をするには、smb
と nmb
サービスを起動してください。詳しくは 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.service
と nmb.service
サービスを再起動します。
一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、Thunar でディレクトリを右クリックしてネットワーク上に共有することが可能です。エラー You are not the owner of the folder
が表示されるときは、システムを再起動してみてください。
ユーザーを追加する
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 ユーザーのパスワードを変更する
ユーザーのパスワードを変更するには、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
設定の変更を適用するために smb
や nmb
サービスを再起動してください。
高度な設定
スループットを向上させる
ほとんどのユーザにとってデフォルトの設定で十分なはずです。しかし、'ソケットオプション'を正しく設定することでパフォーマンスが向上する可能性がありますが、設定を間違うと同じくらいパフォーマンスが低下してしまう可能性があります。大きな変更を加える前に効果をテストしてください。
以下のオプションを適用する前に 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
クライアントの設定
FTP ライクなコマンドラインインターフェイスを使うには smbclient をインストールします。よく使うコマンドは smbclient(1) を見てください。
公開されている共有の確認などをする必要がない場合、/usr/bin/mount.cifs
が含まれている cifs-utils だけをインストールしてください。
デスクトップ環境によっては、GUI で設定することができます。ファイルマネージャを使用する方法はファイルマネージャの設定を見てください。
公開されている共有の確認
以下のコマンドでパブリックな共有を確認できます:
$ 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
マウントオプションを追加することでユーザーにマウントを許可できます。
SERVER
- サーバーの名前。
sharename
- 共有ディレクトリ。
mountpoint
- 共有をマウントするローカルのディレクトリ。
-o [options]
- 詳しくは mount.cifs(8) を見て下さい。
共有パスワードの保存
誰でも読み取れるファイルにパスワードを保存することは推奨しません。credentials ファイルを作成するのが安全です:
/path/to/credentials/share
username=myuser password=mypass
マウントコマンドの username=myuser,password=mypass
を credentials=/path/to/credentials/share
に置き換えてください。
credential ファイルは root からしか読込・書込できないように設定するべきです:
# chmod 600 /path/to/credentials/share
自動マウント
マウントエントリ
以下は認証が必要な cifs
マウントエントリの例です:
/etc/fstab
//SERVER/sharename /mnt/mountpoint cifs username=myuser,password=mypass 0 0
サービスの起動を高速化するために、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
まず、マウントしたい共有が全て見れるかどうか確認してください:
$ smbtree -U remote_user
見れない場合、/etc/samba/smb.conf
内の次の行を見つけて修正してください:
domain master = auto
そして smb
と nmb
サービスを再起動してください。
全てが問題なく動作するようになったら、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
に書いてあります。
Dolphin や Nautilus ファイルマネージャを使用する場合、以下を ~/.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
プリンター共有を無効化
プリンターを共有したくない場合、以下の設定を使ってください:
/etc/samba/smb.conf
[global] load printers = no
使用する Samba のバージョンによっては、printcap name = /dev/null
と disable spools = yes
オプションによってさらにリソースを節約できます。
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 を使って 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(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
CUPS を無効にして Samba をビルド
Samba Wiki より:
- Samba には CUPS のサポートが組み込まれています。コンパイル時に CUPS のヘッダーファイルやライブラリが存在した場合、自動的に CUPS が有効になります。
CUPS を無効化するには PKGBUILD を修正する必要があります。depends
と makedepends
から 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.conf
の global
セクションに 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 to1
)HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size
(set to3
)
もしくは、管理者モードでコマンドプロンプトを起動して以下を実行してください:
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 lanmanserver
とnet start lanmanserver
。サーバーは停止後に自動的に再起動します。
オリジナルの記事 。
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 を有効にしてください。
(学校や大学、ホテルなどの) ローカルネットワークが信頼できないためにファイアウォール (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.conf
の hosts 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.conf
に client 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
マウントオプションを使うことで解決します。