「Samba」の版間の差分
細 (1版 をインポートしました) |
Kusanaginoturugi (トーク | 投稿記録) (カテゴリを追加) |
||
(7人の利用者による、間の57版が非表示) | |||
1行目: | 1行目: | ||
+ | {{Translateme|翻訳が古くなっています。}} |
||
− | [[Category:ネットワーク]] |
||
+ | [[Category:ネットワーク共有]] |
||
+ | [[Category:サーバー]] |
||
[[cs:Samba]] |
[[cs:Samba]] |
||
[[da:Samba]] |
[[da:Samba]] |
||
9行目: | 11行目: | ||
[[ru:Samba]] |
[[ru:Samba]] |
||
[[sr:Samba]] |
[[sr:Samba]] |
||
− | [[ |
+ | [[zh-hans:Samba]] |
− | [[zh- |
+ | [[zh-hant:Samba]] |
− | [[zh-TW:Samba]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
− | {{Related| |
+ | {{Related|Active Directory integration}} |
+ | {{Related|Samba/Active Directory ドメインコントローラ}} |
||
− | {{Related2|Samba/Troubleshooting|Samba/トラブルシューティング}} |
||
− | {{Related| |
+ | {{Related|NFS}} |
− | {{Related|Samba Domain Controller}} |
||
− | {{Related|Active Directory Integration}} |
||
− | {{Related|Samba 4 Active Directory Domain Controller}} |
||
− | {{Related|OpenChange Server}} |
||
− | {{Related2|NFS|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 を使ってファイルを共有するには、 |
+ | 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 |
||
− | + | 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 |
+ | # mkdir -p /var/lib/samba/usershares |
次のコマンドは sambashare グループを作成します: |
次のコマンドは sambashare グループを作成します: |
||
− | # groupadd |
+ | # groupadd -r sambashare |
次のコマンドは root に作成したディレクトリの所有者とグループを変更します: |
次のコマンドは root に作成したディレクトリの所有者とグループを変更します: |
||
− | # chown root: |
+ | # chown root:sambashare /var/lib/samba/usershares |
次のコマンドは usershares ディレクトリのパーミッションを変更して sambashare グループのユーザーがファイルを読み書き・実行できるようにします: |
次のコマンドは usershares ディレクトリのパーミッションを変更して sambashare グループのユーザーがファイルを読み書き・実行できるようにします: |
||
− | # chmod 1770 |
+ | # chmod 1770 /var/lib/samba/usershares |
{{ic|smb.conf}} 設定ファイルに以下の変数を設定します: |
{{ic|smb.conf}} 設定ファイルに以下の変数を設定します: |
||
80行目: | 82行目: | ||
... |
... |
||
[global] |
[global] |
||
− | usershare path = /var/lib/samba/ |
+ | usershare path = /var/lib/samba/usershares |
usershare max shares = 100 |
usershare max shares = 100 |
||
usershare allow guests = yes |
usershare allow guests = yes |
||
− | usershare owner only = |
+ | usershare owner only = yes |
... |
... |
||
}} |
}} |
||
89行目: | 91行目: | ||
{{ic|sambashare}} グループにあなたのユーザーを追加してください、{{ic|''your_username''}} はあなたの linux ユーザーの名前に置き換えてください: |
{{ic|sambashare}} グループにあなたのユーザーを追加してください、{{ic|''your_username''}} はあなたの linux ユーザーの名前に置き換えてください: |
||
− | # |
+ | # gpasswd sambashare -a ''your_username'' |
− | {{ic| |
+ | {{ic|smb.service}} と {{ic|nmb.service}} サービスを再起動します。 |
− | 一度ログアウトして再ログインしてください。これで GUI を使って samba 共有を設定することができます。例えば、[[ |
+ | 一度ログアウトして再ログインしてください。これで 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 ユーザーのための [[Users and Groups|Linux ユーザーアカウント]]を作成してください。{{ic|''samba_user''}} は好きな名前に置き換えられます: |
||
+ | Samba は Linux ユーザーアカウントを必要とします。既存のユーザーアカウントを使用することもできますし、新しく[[ユーザーとグループ#ユーザー管理|ユーザーを作成]]することもできます。 |
||
− | # useradd ''samba_user'' |
||
− | + | ユーザー名は 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 のファイルサーバー共有にリモートからアクセスできるようにしたい場合、他のログインオプションを制限します: |
||
− | {{Note|バージョン 3.4.0 から、smbpasswd はデフォルトで使用されなくなっています。既存の smbpasswd データベースは[[Samba/Troubleshooting#Changes_in_Samba_version_3.4.0|新しいフォーマットに変換]]することが可能です。}} |
||
+ | |||
+ | *シェルを無効化 - {{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 データベースは新しいフォーマットに変換することが可能です。}} |
||
ユーザーのパスワードを変更するには、{{ic|smbpasswd}} を使って下さい: |
ユーザーのパスワードを変更するには、{{ic|smbpasswd}} を使って下さい: |
||
114行目: | 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}} を追加してください。 |
||
+ | |||
+ | ===手動マウント=== |
||
共有のマウントポイントを作成: |
共有のマウントポイントを作成: |
||
134行目: | 245行目: | ||
# mkdir /mnt/''mountpoint'' |
# mkdir /mnt/''mountpoint'' |
||
− | {{ic|mount.cifs}} タイプを使って共有をマウント。下で示しているオプションが全て必要・推奨というわけではありません |
+ | {{ic|mount.cifs}} タイプを使って共有をマウントします。下で示しているオプションが全て必要・推奨というわけではありません: |
− | |||
{{bc|1= |
{{bc|1= |
||
− | # mount -t cifs //''SERVER''/''sharename'' /mnt/''mountpoint'' -o |
+ | # 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) をマウントしたときにシャットダウン時に起こる問題]]を参照。 |
||
}} |
}} |
||
− | ==== |
+ | ====共有パスワードの保存==== |
+ | 誰でも読み取れるファイルにパスワードを保存することは推奨しません。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/ |
+ | //''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=comment=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'', |
+ | //''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|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>}} |
||
+ | {{ic|mnt-myshare.mount}} を使用するにはユニットを[[起動]]します。[[有効化]]すると起動時に共有がマウントされます。 |
||
− | {{pkg|smbclient}} パッケージには WINS を使ってホスト名を解決するドライバーが入っています。有効にするには、{{ic|/etc/nsswitch.conf}} の “hosts” 行に “wins” を追加してください。 |
||
+ | {{Note|(IP アドレスの代わりに) サーバーのホストネームを使って共有したい場合、{{ic|1=systemd-resolved.service}} を {{ic|1=After}} と {{ic|1=Wants}} に追加してください。起動時にマウントエラーが発生しなくなります。}} |
||
− | === 自動マウント === |
||
+ | ====smbnetfs==== |
||
− | 簡単に共有リソースをブラウズする方法は複数存在します: |
||
+ | {{Note|1=smbnetfs は Samba のサーバー設定を必要とします。設定方法は上を見てください。}} |
||
− | ==== smbnetfs ==== |
||
− | |||
− | {{Note|1=smbnetfs needs an intact Samba server setup. |
||
− | See above on how to do that.}} |
||
まず、マウントしたい共有が全て見れるかどうか確認してください: |
まず、マウントしたい共有が全て見れるかどうか確認してください: |
||
218行目: | 348行目: | ||
domain master = auto |
domain master = auto |
||
− | そして {{ic| |
+ | そして {{ic|smb}} と {{ic|nmb}} サービスを再起動してください。 |
− | 全てが問題なく動作するようになったら、 |
+ | 全てが問題なく動作するようになったら、{{Pkg|smbnetfs}} パッケージを[[pacman#特定のパッケージのインストール|インストール]]してください。 |
次に、次の行を {{ic|/etc/fuse.conf}} に追加して: |
次に、次の行を {{ic|/etc/fuse.conf}} に追加して: |
||
226行目: | 356行目: | ||
user_allow_other |
user_allow_other |
||
− | {{ic|fuse}} [[ |
+ | {{ic|fuse}} [[カーネルモジュール]]をロードしてください: |
# modprobe fuse |
# modprobe fuse |
||
236行目: | 366行目: | ||
そして {{ic|smb.conf}} へのリンクを作成してください: |
そして {{ic|smb.conf}} へのリンクを作成してください: |
||
− | $ ln - |
+ | $ ln -sf /etc/samba/smb.conf ~/.smb/smb.conf |
共有フォルダにアクセスするのにユーザー名とパスワードが必要な場合は、{{ic|~/.smb/smbnetfs.auth}} を編集して以下のように一つ以上エントリを含めて下さい: |
共有フォルダにアクセスするのにユーザー名とパスワードが必要な場合は、{{ic|~/.smb/smbnetfs.auth}} を編集して以下のように一つ以上エントリを含めて下さい: |
||
244行目: | 374行目: | ||
}} |
}} |
||
− | 必要な場合、smbnetfs によってマウントする特定のホストのエントリを追加することも可能です。 |
+ | 必要な場合、smbnetfs によってマウントする特定のホストのエントリを追加することも可能です。詳しくは {{ic|~/.smb/smbnetfs.conf}} に書いてあります。 |
+ | |||
− | 詳しくは {{ic|~/.smb/smbnetfs.conf}} に書いてあります。 |
||
+ | [[Dolphin]] や [[Nautilus]] ファイルマネージャを使用する場合、以下を {{ic|~/.smb/smbnetfs.conf}} に追加することで "Disk full" エラーを表示しないようにすることができます。デフォルトでは smbnetfs は空き容量が0バイトだと報告します: |
||
+ | {{hc|~/.smb/smbnetfs.conf| |
||
+ | free_space_size 1073741824 |
||
+ | }} |
||
設定が完了したら、次を実行する必要があります: |
設定が完了したら、次を実行する必要があります: |
||
$ chmod 600 ~/.smb/smbnetfs.* |
$ chmod 600 ~/.smb/smbnetfs.* |
||
− | 設定に問題があると、smbnetfs は |
+ | 設定に問題があると、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}} ディレクトリで上記の修正を行う必要があります。 |
||
− | そして、{{ic|smbnetfs}} [[ |
+ | そして、{{ic|smbnetfs}} [[デーモン]]を通常通りに起動・有効化できます。システム共通のマウントポイントは {{ic|/mnt/smbnet/}} になります。 |
− | ==== |
+ | ====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]] から {{AUR|fusesmb}} をインストールしてください。 |
||
− | # マウントポイントを作成: {{ic|mkdir /mnt/fusesmb}} |
||
− | # {{ic|fuse}} [[kernel modules|カーネルモジュール]]をロード。 |
||
− | # 共有をマウント: {{bc|fusesmb -o allow_other /mnt/fusesmb}} |
||
− | |||
− | ==== autofs ==== |
||
Linux におけるカーネルベースの自動マウントの情報は [[Autofs]] を見て下さい。 |
Linux におけるカーネルベースの自動マウントの情報は [[Autofs]] を見て下さい。 |
||
− | === |
+ | ===ファイルマネージャの設定=== |
− | ==== |
+ | ====GNOME Files, Nemo, Caja, Thunar, PCManFM==== |
− | GNOME Files, Nemo, Thunar, PCManFM で samba 共有にアクセスするには |
+ | [[GNOME Files]], [[Nemo]], Caja, [[Thunar]], [[PCManFM]] で samba 共有にアクセスするには {{Pkg|gvfs-smb}} パッケージをインストールしてください。 |
{{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 には Samba 共有をブラウズするための機能が内蔵されています。したがってパッケージの追加は必要ありません。ただし、KDE システム設定で GUI を使うには、 |
+ | 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}} |
||
− | [ |
+ | [https://ubuntuforums.org/showthread.php?t=1605499 このページ] を参照。 |
− | ==== |
+ | ====他のグラフィカル環境==== |
有用なプログラムは多数ありますが、プログラムのパッケージを作成しなくてはなりません。Arch のパッケージビルドシステムを使ってパッケージを作れます。インストールするのに特定の環境を必要としないために簡単に持ち運ぶことができます。 |
有用なプログラムは多数ありますが、プログラムのパッケージを作成しなくてはなりません。Arch のパッケージビルドシステムを使ってパッケージを作れます。インストールするのに特定の環境を必要としないために簡単に持ち運ぶことができます。 |
||
− | * |
+ | *{{AUR|pyneighborhood}} は公式リポジトリから利用できます。 |
− | * |
+ | *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 共有で特定のファイル拡張子をブロック=== |
||
+ | {{Note|このパラメータを設定すると、全てのファイルとディスプレイをスキャンしてチェックしなくてはならなくなるため、Samba のパフォーマンスに影響が出ます。}} |
||
+ | Samba にはファイルの拡張子など、特定のパターンを使ってファイルをブロックするオプションが存在します。このオプションを使うことでウイルスが繁殖するのを防いだり、特定のファイルで容量が食われるのを防ぐことができます。オプションの詳細は {{man|5|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}} パッケージをインストール。 |
||
+ | |||
+ | 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 が開いているシステムが見つかったので、{{man|1|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 |
||
+ | |||
+ | ===ユーザー名やパスワードが不要なファイル共有=== |
||
+ | {{ic|/etc/samba/smb.conf}} を編集して以下の行を追加してください: |
||
+ | map to guest = Bad User |
||
+ | |||
+ | 上記の行は以下の行の後ろに追加します: |
||
+ | security = user |
||
+ | |||
+ | 共有データを特定のインターフェイスに制限するため以下の行を: |
||
+ | ; 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 |
||
+ | |||
+ | ===AppArmor におけるパーミッションの問題=== |
||
+ | |||
+ | [[#共有を作成する|共有パス]]をホームディレクトリ以外に設定した場合、{{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}} を設定してください: |
||
+ | map to guest = Bad User |
||
+ | |||
+ | ===Windows 7 の接続の問題 - mount error(12): cannot allocate memory=== |
||
+ | |||
+ | 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\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 でサーバーサービスを再起動 |
||
+ | *コマンドプロンプトから次を実行: {{ic|net stop lanmanserver}} と {{ic|net start lanmanserver}}。サーバーは停止後に自動的に再起動します。 |
||
+ | |||
+ | {{Note|Google で検索すると "IRPStackSize" のサイズを変更することを推奨するような記事が見つかりますが、これは Windows 7 の問題を修正するということについては間違っています。試さないで下さい。}} |
||
+ | |||
+ | [http://alan.lamielle.net/2009/09/03/windows-7-nonpaged-pool-srv-error-2017 オリジナルの記事] 。 |
||
+ | |||
+ | ===Windows 10 1709 以上で接続に問題が発生する - "Windows cannot access" 0x80004005=== |
||
+ | |||
+ | Windows 10 バージョン 1709 を使っている一部のマシンで発生するエラーです。このエラーは SMB1 が無効になっていることとは関係がなく、Microsoft によってセキュアでないゲストログインが一部で無効化されたことが原因です。 |
||
+ | |||
+ | 解決するには、グループポリシーエディタ ({{ic|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 によるプリンターの共有は必要ないと思うかもしれません。そのような場合、以下の行を {{ic|/etc/samba/smb.conf}} に追加することでエラーが発生しないようにできます: |
||
+ | {{bc|<nowiki> |
||
+ | load printers = No |
||
+ | printing = bsd |
||
+ | printcap name = /dev/null |
||
+ | disable spoolss = Yes |
||
+ | </nowiki>}} |
||
+ | Samba サービス {{ic|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 の設定に以下を追加することで解決できます:{{bc| |
||
+ | iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns |
||
+ | }} |
||
+ | |||
+ | ===ネットワークを閲覧すると空のフォルダが表示される=== |
||
+ | 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=== |
||
+ | |||
+ | おそらくクライアントが共有にアクセスする権限がありません。クライアントの 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)=== |
||
+ | |||
+ | サーバーが起動していることを確認してください。共有ディレクトリが存在していること、アクセスできることを確認してください。 |
||
+ | |||
+ | ===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 公式サイト] |
2024年4月11日 (木) 20:18時点における最新版
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
マウントオプションを使うことで解決します。