「Samba」の版間の差分
細 (1版 をインポートしました) |
|||
14行目: | 14行目: | ||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|Samba/Tips and tricks}} |
{{Related|Samba/Tips and tricks}} |
||
− | {{Related2|Samba/Troubleshooting|Samba/トラブルシューティング}} |
||
− | {{Related|Samba/Advanced file sharing with KDE4}} |
||
− | {{Related|Samba Domain Controller}} |
||
{{Related|Active Directory Integration}} |
{{Related|Active Directory Integration}} |
||
− | {{ |
+ | {{Related3|Samba 4 Active Directory domain controller|Samba 4 Active Directory ドメインコントローラ}} |
− | {{ |
+ | {{Related3|OpenChange server|OpenChange サーバー}} |
− | {{ |
+ | {{Related|NFS}} |
{{Related articles end}} |
{{Related articles end}} |
||
83行目: | 80行目: | ||
usershare max shares = 100 |
usershare max shares = 100 |
||
usershare allow guests = yes |
usershare allow guests = yes |
||
− | usershare owner only = |
+ | usershare owner only = yes |
... |
... |
||
}} |
}} |
||
93行目: | 90行目: | ||
{{ic|smbd}} と {{ic|nmbd}} サービスを再起動します。 |
{{ic|smbd}} と {{ic|nmbd}} サービスを再起動します。 |
||
− | 一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、[[ |
+ | 一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、[[Thunar]] でディレクトリを右クリックしてネットワーク常に共有することが可能です。 |
エラー {{ic|You are not the owner of the folder}} が表示されるときは、システムを再起動してみてください。 |
エラー {{ic|You are not the owner of the folder}} が表示されるときは、システムを再起動してみてください。 |
||
=== ユーザーを追加する === |
=== ユーザーを追加する === |
||
− | samba ユーザーのための [[ |
+ | samba ユーザーのための [[ユーザーとグループ|Linux ユーザーアカウント]]を作成してください。{{ic|''samba_user''}} は好きな名前に置き換えられます: |
# useradd ''samba_user'' |
# useradd ''samba_user'' |
||
108行目: | 105行目: | ||
=== samba ユーザーのパスワードを変更する === |
=== samba ユーザーのパスワードを変更する === |
||
− | {{Note|バージョン 3.4.0 から、smbpasswd はデフォルトで使用されなくなっています。既存の smbpasswd データベースは |
+ | {{Note|バージョン 3.4.0 から、smbpasswd はデフォルトで使用されなくなっています。既存の smbpasswd データベースは新しいフォーマットに変換することが可能です。}} |
ユーザーのパスワードを変更するには、{{ic|smbpasswd}} を使って下さい: |
ユーザーのパスワードを変更するには、{{ic|smbpasswd}} を使って下さい: |
||
178行目: | 175行目: | ||
}} |
}} |
||
− | ''systemd'' を使っている場合 (最近のインストールではデフォルト)、{{ic|1= |
+ | ''systemd'' を使っている場合 (最近のインストールではデフォルト)、{{ic|1=x-systemd.automount}} オプションを利用することができます。これはサービスの起動を数秒早くできます。また、{{ic|uid}} と {{ic|gid}} オプションを使うことで、現在のユーザーとグループをマップして作業を少し楽にできます。 |
{{Warning|{{ic|uid}} と {{ic|gid}} オプションを使うとネットワークデバイスからデータを取得するプログラムで入出力エラーが起こる可能性があります。}} |
{{Warning|{{ic|uid}} と {{ic|gid}} オプションを使うとネットワークデバイスからデータを取得するプログラムで入出力エラーが起こる可能性があります。}} |
||
{{hc|/etc/fstab|2= |
{{hc|/etc/fstab|2= |
||
− | //''SERVER''/''SHARENAME'' /mnt/''mountpoint'' cifs credentials=''/path/to/smbcredentials'', |
+ | //''SERVER''/''SHARENAME'' /mnt/''mountpoint'' cifs credentials=''/path/to/smbcredentials'',x-systemd.automount,uid=''username'',gid=''usergroup'' 0 0 |
}} |
}} |
||
196行目: | 193行目: | ||
{{Note|The option is user'''s''' (plural). For other filesystem types handled by mount, this option is usually ''user''; sans the "'''s'''".}} |
{{Note|The option is user'''s''' (plural). For other filesystem types handled by mount, this option is usually ''user''; sans the "'''s'''".}} |
||
− | これでマウントポイントがユーザーの制御下にあるディレクトリ (つまり、ユーザーのホーム) にある限りユーザーがマウントできるようになります。ユーザーのホームにないマウントポイントで Samba 共有をマウント・アンマウントできるようにするには、[[#smbnetfs|smbnetfs]] を使うか、[[ |
+ | これでマウントポイントがユーザーの制御下にあるディレクトリ (つまり、ユーザーのホーム) にある限りユーザーがマウントできるようになります。ユーザーのホームにないマウントポイントで Samba 共有をマウント・アンマウントできるようにするには、[[#smbnetfs|smbnetfs]] を使うか、[[sudo]] で権限をあげてください。 |
=== WINS ホスト名 === |
=== WINS ホスト名 === |
||
226行目: | 223行目: | ||
user_allow_other |
user_allow_other |
||
− | {{ic|fuse}} [[ |
+ | {{ic|fuse}} [[カーネルモジュール]]をロードしてください: |
# modprobe fuse |
# modprobe fuse |
||
236行目: | 233行目: | ||
そして {{ic|smb.conf}} へのリンクを作成してください: |
そして {{ic|smb.conf}} へのリンクを作成してください: |
||
− | $ ln - |
+ | $ ln -sf /etc/samba/smb.conf ~/.smb/smb.conf |
共有フォルダにアクセスするのにユーザー名とパスワードが必要な場合は、{{ic|~/.smb/smbnetfs.auth}} を編集して以下のように一つ以上エントリを含めて下さい: |
共有フォルダにアクセスするのにユーザー名とパスワードが必要な場合は、{{ic|~/.smb/smbnetfs.auth}} を編集して以下のように一つ以上エントリを含めて下さい: |
||
258行目: | 255行目: | ||
Arch Linux パッケージは smbnetfs にシステム共通のオペレーションモードを追加しています。有効にするには、{{ic|/etc/smbnetfs/.smb}} ディレクトリで上記の修正を行う必要があります。 |
Arch Linux パッケージは smbnetfs にシステム共通のオペレーションモードを追加しています。有効にするには、{{ic|/etc/smbnetfs/.smb}} ディレクトリで上記の修正を行う必要があります。 |
||
− | そして、{{ic|smbnetfs}} [[ |
+ | そして、{{ic|smbnetfs}} [[デーモン]]を通常通りに起動・有効化できます。システム共通のマウントポイントは {{ic|/mnt/smbnet/}} になります。 |
==== fusesmb ==== |
==== fusesmb ==== |
||
264行目: | 261行目: | ||
{{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.}} |
{{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|mkdir /mnt/fusesmb}} |
||
− | # {{ic|fuse}} [[ |
+ | # {{ic|fuse}} [[カーネルモジュール]]をロード。 |
# 共有をマウント: {{bc|fusesmb -o allow_other /mnt/fusesmb}} |
# 共有をマウント: {{bc|fusesmb -o allow_other /mnt/fusesmb}} |
||
281行目: | 278行目: | ||
{{ic|Ctrl+l}} を押してロケーションバーに {{ic|smb://''servername''/''share''}} と入力して共有にアクセスします。 |
{{ic|Ctrl+l}} を押してロケーションバーに {{ic|smb://''servername''/''share''}} と入力して共有にアクセスします。 |
||
− | マウントされた共有はファイルシステムで {{ic|/run/user/''your_UID''/gvfs}} にあるように見えます。 |
+ | マウントされた共有はファイルシステムで {{ic|/run/user/''your_UID''/gvfs}} や {{ic|~/.gvfs}} にあるように見えます。 |
==== KDE ==== |
==== KDE ==== |
||
296行目: | 293行目: | ||
* {{Pkg|pyneighborhood}} は公式リポジトリから利用できます。 |
* {{Pkg|pyneighborhood}} は公式リポジトリから利用できます。 |
||
* Xffm の LinNeighborhood, RUmba, xffm-samba プラグインは公式リポジトリにも AUR にもありません。公式にはサポートされていない(もしくは非公式サポートすらない)ため、動作がおかしかったり全く動かなかったりします。 |
* Xffm の LinNeighborhood, RUmba, xffm-samba プラグインは公式リポジトリにも AUR にもありません。公式にはサポートされていない(もしくは非公式サポートすらない)ため、動作がおかしかったり全く動かなかったりします。 |
||
+ | |||
+ | == Tips and tricks == |
||
+ | === Samba 共有で特定のファイル拡張子をブロック === |
||
+ | {{Note|このパラメータを設定すると、全てのファイルとディスプレイをスキャンしてチェックしなくてはならなくなるため、Samba のパフォーマンスに影響が出ます。}} |
||
+ | Samba にはファイルの拡張子など、特定のパターンを使ってファイルをブロックするオプションが存在します。このオプションを使うことでウイルスが繁殖するのを防いだり、特定のファイルで容量が食われるのを防ぐことができます。オプションの詳細は {{ic|man smb.conf}} を見て下さい。 |
||
+ | |||
+ | {{hc|/etc/samba/smb.conf|2= |
||
+ | ... |
||
+ | [myshare] |
||
+ | comment = Private |
||
+ | path = /mnt/data |
||
+ | read only = no |
||
+ | veto files = /*.exe/*.com/*.dll/*.bat/*.vbs/*.tmp/*.mp3/*.avi/*.mp4/*.wmv/*.wma/ |
||
+ | }} |
||
+ | |||
+ | === ネットワーク共有の探知 === |
||
+ | ローカルネットワーク上の他のシステムについて何も知らない場合、[[#smbnetfs|smbnetfs]] などの自動化ツールも使えないときは、以下の方法で Samba の共有を手動で調べることができます。 |
||
+ | |||
+ | 1. まず [[pacman]] を使って {{Pkg|nmap}} と {{Pkg|smbclient}} をインストール: |
||
+ | # pacman -S nmap smbclient |
||
+ | |||
+ | 2. {{ic|nmap}} で開いているポートを確認: |
||
+ | # nmap -p 139 -sT 192.168.1.* |
||
+ | |||
+ | 上記の例では 192.168.1.* の範囲の IP アドレスとポート 139 をスキャンします。以下のような結果が得られます: |
||
+ | {{hc |
||
+ | |$ 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 が開いているシステムが見つかったので、{{ic|nmblookup}} を使って NetBIOS の名前をチェック: |
||
+ | {{hc |
||
+ | |$ 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. {{ic|smbclient}} を使って ''PUTER'' で共有されているサービスを確認します。パスワードの入力が求められたら、エンターを押すとリストが表示されます: |
||
+ | {{hc |
||
+ | |$ smbclient -L \\PUTER |
||
+ | |<nowiki> |
||
+ | 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 |
||
+ | </nowiki>}} |
||
+ | |||
+ | === Windows コンピュータの遠隔操作 === |
||
+ | Samba には Windows と対話するためのツールが含まれています。リモートデスクトップで Windows コンピュータにアクセスできない場合に便利です。以下に例を示します。 |
||
+ | |||
+ | コメントとシャットダウンコマンドを送信: |
||
+ | |||
+ | $ net rpc shutdown -C "comment" -I IPADDRESS -U USERNAME%PASSWORD |
||
+ | |||
+ | {{ic|-C}} とコメントを {{ic|-f}} に変えることで強制的にシャットダウンさせることができます。再起動させるには、{{ic|-C}} や {{ic|-f}} の後に {{ic|-r}} を追加します。 |
||
+ | |||
+ | サービスを停止・起動: |
||
+ | |||
+ | $ net rpc service stop SERVICENAME -I IPADDRESS -U USERNAME%PASSWORD |
||
+ | |||
+ | 利用可能な net rpc コマンドを全て確認するには: |
||
+ | |||
+ | $ net rpc |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | === Samba SMB/CIFS サーバーが起動できない === |
||
+ | |||
+ | {{ic|/var/cache/samba/}} のパーミッションが正しく設定されているか確認して {{ic|smbd.service}} や {{ic|smbd.socket}} を再起動してください: |
||
+ | |||
+ | # chmod 0755 /var/cache/samba/msg |
||
+ | |||
+ | === ゲストパーミッションで Samba 共有を作成しても Windows クライアントがパスワードを要求する === |
||
+ | {{ic|/etc/samba/smb.conf}} の {{ic|global}} セクションに {{ic|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 のレジストリキーを設定することで修正できます: |
||
+ | |||
+ | *{{ic|HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\LargeSystemCache}} (set to {{ic|1}}) |
||
+ | *{{ic|HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\Size}} (set to {{ic|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 lanmanserver' と 'net start lanmanserver'。サーバーは停止後に自動的に再起動します。 |
||
+ | |||
+ | {{Note|Google で検索すると "IRPStackSize" のサイズを変更することを推奨するような記事が見つかりますが、これは Windows 7 の問題を修正するということについては間違っています。試さないで下さい。}} |
||
+ | |||
+ | [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 === |
||
+ | |||
+ | ホームユーザーで Samba をサーバーや NAS とのファイル共有のためだけに使っている場合、Samba によるプリンターの共有は必要ないと思うかもしれません。そのような場合、以下の行を {{ic|/etc/samba/smb.conf}} に追加することでエラーが発生しないようにできます: |
||
+ | {{bc|<nowiki> |
||
+ | load printers = No |
||
+ | printing = bsd |
||
+ | printcap name = /dev/null |
||
+ | disable spoolss = Yes |
||
+ | </nowiki>}} |
||
+ | Samba サービス {{ic|smbd.service}} を[[再起動]]してログを確認してください: |
||
+ | {{bc|cat /var/log/samba/smbd.log}} |
||
+ | エラーが表示されなくなったはずです。 |
||
+ | |||
+ | === 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 =}} 行に記述されているか確認してください。 |
||
+ | |||
+ | === Connection to SERVER failed: (Error NT_STATUS_UNSUCCESSFUL) === |
||
+ | |||
+ | おそらく {{ic|smbclient}} に間違ったサーバー名を指定しています。サーバー名を確認するには、サーバーで {{ic|hostnamectl}} を実行して "Transient hostname" の行を見て下さい。 |
||
+ | |||
+ | === Connection to SERVER failed: (Error NT_STATUS_CONNECTION_REFUSED) === |
||
+ | |||
+ | サーバーが起動していることを確認してください。共有ディレクトリが存在していること、アクセスできることを確認してください。 |
||
== 参照 == |
== 参照 == |
2015年10月31日 (土) 16:06時点における版
関連記事
Samba は SMB/CIFS ネットワークプロトコルの再実装であり、NFS の代わりになるものとして Linux と Windows システム間でのファイルやプリンターの共有を容易にします。Samba の設定は簡単で操作もわかりやすいと言うユーザーもいますが、新規ユーザーの多くは複雑で直感的でないメカニズムが手を余らせることになります。そのようなユーザーは以下の指示をよく読んで下さい。
目次
- 1 サーバーの設定
- 2 クライアントの設定
- 3 Tips and tricks
- 4 トラブルシューティング
- 4.1 Samba SMB/CIFS サーバーが起動できない
- 4.2 ゲストパーミッションで Samba 共有を作成しても Windows クライアントがパスワードを要求する
- 4.3 Windows 7 の接続の問題 - mount error(12): cannot allocate memory
- 4.4 Windows からパスワードで保護された共有にアクセスするときに問題が発生する
- 4.5 ダイアログボックスの表示に長い時間がかかる
- 4.6 Error: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
- 4.7 You are not the owner of the folder
- 4.8 protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
- 4.9 Connection to SERVER failed: (Error NT_STATUS_UNSUCCESSFUL)
- 4.10 Connection to SERVER failed: (Error NT_STATUS_CONNECTION_REFUSED)
- 5 参照
サーバーの設定
Samba を使ってファイルを共有するには、公式リポジトリから samba をインストールしてください。
Samba サーバーの設定は /etc/samba/smb.conf
で行います。デフォルトの Samba 設定ファイルを /etc/samba/smb.conf
にコピーしてください:
# cp /etc/samba/smb.conf.default /etc/samba/smb.conf
共有を作成する
/etc/samba/smb.conf
を編集して、Share Definitions セクションまでスクロールしてください。デフォルトの設定では、それぞれのユーザーのホームディレクトリに共有を自動で作成します。また、プリンターの共有もデフォルトで作成します。サンプル設定には多数のコメントが付属しています。オプションに関する詳細は man smb.conf
で見ることができます。オンライン版は こちら になります。
Windows 側では、smb.conf
を Windows ワークグループに変更してください (Windows デフォルト: WORKGROUP)。
サービスを起動する
SMB の基本的なファイル共有をするには、smbd
と nmbd
サービスを起動してください。
詳しくは smbd と nmbd のマニュアルページを見て下さい。
以下のコマンドはオブジェクトの名前を後でコマンドを実行する環境に自動で export します:
# export USERSHARES_DIR="/var/lib/samba/usershare" # export USERSHARES_GROUP="sambashare"
次のコマンドは /var/lib/samba
に usershares ディレクトリを作成します:
# mkdir -p ${USERSHARES_DIR}
次のコマンドは sambashare グループを作成します:
# groupadd ${USERSHARES_GROUP}
次のコマンドは root に作成したディレクトリの所有者とグループを変更します:
# chown root:${USERSHARES_GROUP} ${USERSHARES_DIR}
次のコマンドは usershares ディレクトリのパーミッションを変更して sambashare グループのユーザーがファイルを読み書き・実行できるようにします:
# chmod 1770 ${USERSHARES_DIR}
smb.conf
設定ファイルに以下の変数を設定します:
/etc/samba/smb.conf
... [global] usershare path = /var/lib/samba/usershare usershare max shares = 100 usershare allow guests = yes usershare owner only = yes ...
sambashare
グループにあなたのユーザーを追加してください、your_username
はあなたの linux ユーザーの名前に置き換えてください:
# usermod -a -G ${USERSHARES_GROUP} your_username
smbd
と nmbd
サービスを再起動します。
一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、Thunar でディレクトリを右クリックしてネットワーク常に共有することが可能です。
エラー You are not the owner of the folder
が表示されるときは、システムを再起動してみてください。
ユーザーを追加する
samba ユーザーのための Linux ユーザーアカウントを作成してください。samba_user
は好きな名前に置き換えられます:
# useradd samba_user
そして同じ名前で Samba ユーザーアカウントを作成してください:
# pdbedit -a -u samba_user
samba ユーザーのパスワードを変更する
ユーザーのパスワードを変更するには、smbpasswd
を使って下さい:
# smbpasswd samba_user
クライアントの設定
Samba/SMB/CIFS サーバーからファイルにアクセスするのに必要なのは smbclient だけです。これは公式リポジトリからインストールできます。
LAN 上の他のコンピュータの共有リソースには GUI や CLI を使ってローカルでアクセス・マウントすることが可能です。ほとんどの軽量デスクトップ環境には共有リソースのアクセスを容易にする固有の方法がないため、グラフィカルな方法には制限があります。
共有アクセスは2つの部分に別れます。1つはバックのファイルシステムのメカニズムで、2つ目はユーザーが共有リソースをマウントするのを選択できるようにするインターフェイスです。環境によっては1つ目の部分はすでに初めから備わっていることがあります。
手動マウント
公式リポジトリから smbclient をインストールしてください。軽量な方法を使いたい場合で、公開共有を表示する必要がないときは /usr/bin/mount.cifs
が入っている cifs-utils だけをインストールします。
サーバーの公開されている共有を表示するには:
$ smbclient -L hostname -U%
共有のマウントポイントを作成:
# mkdir /mnt/mountpoint
mount.cifs
タイプを使って共有をマウント。下で示しているオプションが全て必要・推奨というわけではありません (ie. password
)。
# mount -t cifs //SERVER/sharename /mnt/mountpoint -o user=username,password=password,workgroup=workgroup,ip=serverip
SERVER
- Windows マシンの名前。
sharename
- 共有ディレクトリ。
mountpoint
- 共有をマウントするローカルのディレクトリ。
-o [options]
- 詳しくは
man mount.cifs
を見て下さい。
共有を /etc/fstab に追加
fstab エントリを追加する一番簡単な方法は以下の通りです:
/etc/fstab
//SERVER/sharename /mnt/mountpoint cifs username=username,password=password 0 0
ただし、誰でも読み取りできるファイルにパスワードを保存するのは推奨されません。証明書ファイルを使うほうが安全です。例えば、ファイルを作成して chmod 600 filename
を実行することで所有者のユーザーだけが読み書きできるようになりますy。ファイルには以下の情報が含まれている必要があります:
/path/to/credentials/sambacreds
username=username password=password
そして fstab での行は以下のようになります:
/etc/fstab
//SERVER/SHARENAME /mnt/mountpoint cifs credentials=/path/to/credentials/sambacreds 0 0
systemd を使っている場合 (最近のインストールではデフォルト)、x-systemd.automount
オプションを利用することができます。これはサービスの起動を数秒早くできます。また、uid
と gid
オプションを使うことで、現在のユーザーとグループをマップして作業を少し楽にできます。
/etc/fstab
//SERVER/SHARENAME /mnt/mountpoint cifs credentials=/path/to/smbcredentials,x-systemd.automount,uid=username,gid=usergroup 0 0
ユーザーマウント
/etc/fstab
//SERVER/SHARENAME /mnt/mountpoint cifs users,credentials=/path/to/smbcredentials,workgroup=workgroup,ip=serverip 0 0
これでマウントポイントがユーザーの制御下にあるディレクトリ (つまり、ユーザーのホーム) にある限りユーザーがマウントできるようになります。ユーザーのホームにないマウントポイントで Samba 共有をマウント・アンマウントできるようにするには、smbnetfs を使うか、sudo で権限をあげてください。
WINS ホスト名
smbclient パッケージには WINS を使ってホスト名を解決するドライバーが入っています。有効にするには、/etc/nsswitch.conf
の “hosts” 行に “wins” を追加してください。
自動マウント
簡単に共有リソースをブラウズする方法は複数存在します:
smbnetfs
まず、マウントしたい共有が全て見れるかどうか確認してください:
$ smbtree -U remote_user
見れない場合、/etc/samba/smb.conf
内の次の行を見つけて修正してください:
domain master = auto
そして smbd
と nmbd
サービスを再起動してください。
全てが問題なく動作するようになったら、公式リポジトリから smbnetfs をインストールしてください。
次に、次の行を /etc/fuse.conf
に追加して:
user_allow_other
fuse
カーネルモジュールをロードしてください:
# modprobe fuse
さらに /etc/smbnetfs/.smb
ディレクトリをホームディレクトリにコピーします:
$ cp -a /etc/smbnetfs/.smb ~
そして smb.conf
へのリンクを作成してください:
$ ln -sf /etc/samba/smb.conf ~/.smb/smb.conf
共有フォルダにアクセスするのにユーザー名とパスワードが必要な場合は、~/.smb/smbnetfs.auth
を編集して以下のように一つ以上エントリを含めて下さい:
~/.smb/smbnetfs.auth
auth "hostname" "username" "password"
必要な場合、smbnetfs によってマウントする特定のホストのエントリを追加することも可能です。
詳しくは ~/.smb/smbnetfs.conf
に書いてあります。
設定が完了したら、次を実行する必要があります:
$ chmod 600 ~/.smb/smbnetfs.*
設定に問題があると、smbnetfs は 'insecure config file permissions' とエラーを吐きます。
最後に、Samba ネットワークを指定したディレクトリにマウントするために、次を実行してください:
$ smbnetfs mount_point
デーモン
Arch Linux パッケージは smbnetfs にシステム共通のオペレーションモードを追加しています。有効にするには、/etc/smbnetfs/.smb
ディレクトリで上記の修正を行う必要があります。
そして、smbnetfs
デーモンを通常通りに起動・有効化できます。システム共通のマウントポイントは /mnt/smbnet/
になります。
fusesmb
- AUR から fusesmbAUR をインストールしてください。
- マウントポイントを作成:
mkdir /mnt/fusesmb
fuse
カーネルモジュールをロード。- 共有をマウント:
fusesmb -o allow_other /mnt/fusesmb
autofs
Linux におけるカーネルベースの自動マウントの情報は Autofs を見て下さい。
ファイルマネージャの設定
GNOME Files, Nemo, Thunar, PCManFM
GNOME Files, Nemo, Thunar, PCManFM で samba 共有にアクセスするには公式リポジトリの gvfs-smb パッケージをインストールしてください。
Ctrl+l
を押してロケーションバーに smb://servername/share
と入力して共有にアクセスします。
マウントされた共有はファイルシステムで /run/user/your_UID/gvfs
や ~/.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 にはファイルの拡張子など、特定のパターンを使ってファイルをブロックするオプションが存在します。このオプションを使うことでウイルスが繁殖するのを防いだり、特定のファイルで容量が食われるのを防ぐことができます。オプションの詳細は 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 を使って nmap と smbclient をインストール:
# 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
トラブルシューティング
Samba SMB/CIFS サーバーが起動できない
/var/cache/samba/
のパーミッションが正しく設定されているか確認して smbd.service
や smbd.socket
を再起動してください:
# chmod 0755 /var/cache/samba/msg
ゲストパーミッションで 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 からパスワードで保護された共有にアクセスするときに問題が発生する
パスワードで保護された共有に Windows からアクセスしようとすると問題が発生する場合、以下を /etc/samba/smb.conf
に追加してみてください [1]:
[global] # lanman fix client lanman auth = yes client ntlmv2 auth = no
ダイアログボックスの表示に長い時間がかかる
Windows XP/Windows 7 から接続しようとするとパスワードのダイアログボックスが表示されるのに30秒程度かかることがあります。サーバーの 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
以下のように設定することで /etc/printcap
が見つからないことについてエラーを発生させないようにすることができます:
printing = bsd printcap name = /dev/null
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
エラーが表示されなくなったはずです。
You are not the owner of the folder
システムを再起動してみてください。
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)
サーバーが起動していることを確認してください。共有ディレクトリが存在していること、アクセスできることを確認してください。