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