InfraAcademy

InfraAcademy Blog

Linux-windows間でファイル共有する方法解説【sambaでファイル共有を設定する】

| #Linux #Linux入門 #samba
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、InfraAcademyを運営しているryuです。

今回は、Sambaを使ってLinuxとWindowsの間でファイルを共有する方法を初心者向けに解説します。

Linuxサーバーで作ったファイルをWindowsから開きたいとき、毎回SCPでコピーしたり、USBメモリへ移したりするのは少し面倒です。そんなときに使えるのがSambaです。

Sambaを使うと、Linux上のディレクトリをWindowsの共有フォルダーのように公開できます。Windowsのエクスプローラーから \\サーバーのIPアドレス\共有名 と入力すれば、普段のファイルサーバーに近い感覚でアクセスできます。

元の記事では、共有ディレクトリを chmod 777 にし、ゲストアクセスを許可する構成を紹介していました。ただ、学習用であっても最初から誰でも書き込める共有を作る必要はありません。

今回はUbuntuを例に、Sambaユーザーで認証してアクセスする、もう少し安全で実用的な構成を作っていきます。

Sambaとは?

Sambaは、LinuxやUnix系OSからWindowsで使われているSMBプロトコルを利用できるようにするソフトウェアです。

代表的な使い方はファイル共有です。LinuxサーバーにSambaを入れると、WindowsからLinux上の共有ディレクトリへアクセスできるようになります。

SambaにはActive Directoryのドメインコントローラーとして動作する機能などもありますが、この記事ではファイル共有に絞って解説します。

今回作る環境

今回は、Linux側に /srv/samba/share という共有ディレクトリを作ります。Windowsからは share という名前でアクセスできるようにします。

利用するSambaユーザーは testuser とします。

大きな流れは次のとおりです。

  1. Sambaをインストールする
  2. Linuxユーザーと共有用グループを作る
  3. 共有ディレクトリを作る
  4. Sambaユーザーを登録する
  5. smb.conf に共有設定を書く
  6. 設定を確認してSambaを再起動する
  7. Windowsから接続する

一つずつ進めていきましょう。

Sambaをインストールする

Ubuntuでは、samba パッケージをインストールします。

まずパッケージ情報を更新します。

sudo apt update

続いてSambaをインストールします。

sudo apt install samba

元記事では apt-get を使っていましたが、現在のUbuntuで手動操作する場合は apt を使って問題ありません。

sambaをインストール

インストール後は、バージョンを確認してみましょう。

samba --version

sambaが正常にインストールされているか確認

バージョン情報が表示されれば、Sambaを利用する準備ができています。

Linuxユーザーと共有用グループを作る

Sambaでユーザー認証を行う場合、まずLinux側にユーザーが必要です。

今回は testuser を作成します。

sudo adduser testuser

続いて、共有ディレクトリへアクセスするユーザーをまとめるために sambashare グループを作ります。

sudo groupadd sambashare

作成した testusersambashare グループへ追加します。

sudo usermod -aG sambashare testuser

すでに同名のユーザーやグループが存在する場合は、新しく作り直す必要はありません。既存の環境に合わせて読み替えてください。

共有ディレクトリを作る

Sambaで公開するディレクトリを作成します。

今回は /srv/samba/share を利用します。

sudo mkdir -p /srv/samba/share

/srv は、サーバーが提供するデータを配置するときに使われるディレクトリの一つです。ホームディレクトリ配下でも共有できますが、今回はファイルサーバー用の領域として分かりやすい場所に作ります。

続いて、共有ディレクトリのグループを sambashare にします。

sudo chown root:sambashare /srv/samba/share

グループのメンバーが読み書きできるように、権限を設定します。

sudo chmod 2770 /srv/samba/share

ここで 777 にしていないことがポイントです。

777 にすると、所有者・グループ・その他のユーザー全員へ読み取り、書き込み、実行権限を与えます。とりあえず動かすために広すぎる権限を設定するのではなく、必要なユーザーだけに権限を与える方が安全です。

先頭の 2 はSGIDを表します。共有ディレクトリ内で新しく作成したファイルやディレクトリに、共有用グループを引き継ぎやすくするために設定しています。

Linuxの権限がまだ分からない場合は、こちらの記事も参考にしてください。

Linuxのファイル権限とは?chmodの数字・rwxを初心者向けに解説

Sambaユーザーを登録する

Linuxユーザーを作っただけでは、そのままSambaの認証に使えるわけではありません。Samba側の認証データベースにもユーザーを登録します。

testuser を追加する場合は、次のコマンドを実行します。

sudo smbpasswd -a testuser

Sambaで利用するパスワードの入力を求められるので、画面に従って設定してください。

sambaユーザ作成

ここで設定するSambaパスワードは、Linuxへログインするときのパスワードと同じである必要はありません。

つまり、ユーザー名は同じでも、Linuxの認証とSambaの認証は別に管理されます。初心者には少し分かりにくい部分ですが、Sambaのユーザーを追加するときは、先に同じ名前のLinuxユーザーが必要だと覚えておきましょう。

smb.confに共有設定を追加する

Sambaの主な設定ファイルは /etc/samba/smb.conf です。

設定を変更する前に、念のためバックアップを作っておきます。

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

続いて設定ファイルを開きます。初心者なら nano を使うと編集しやすいです。

sudo nano /etc/samba/smb.conf

ファイルの一番下に、次の設定を追加します。

[share]
    comment = Samba Share
    path = /srv/samba/share
    browsable = yes
    read only = no
    guest ok = no
    valid users = @sambashare
    force group = sambashare
    create mask = 0660
    directory mask = 2770

それぞれの意味を確認してみましょう。

設定 意味
[share] Windowsから見える共有名
path Linux上で共有するディレクトリ
browsable ネットワーク上で共有を表示できるようにする
read only = no 書き込みを許可する
guest ok = no ゲストによる匿名アクセスを許可しない
valid users 接続を許可するユーザー・グループ
force group 作成ファイルのグループをそろえる
create mask 新規ファイルの権限
directory mask 新規ディレクトリの権限

今回は @sambashare としているため、sambashare グループのメンバーだけが共有へアクセスできます。

設定ミスがないかtestparmで確認する

Sambaを再起動する前に、設定ファイルの文法を確認しましょう。

Sambaには testparm という設定確認コマンドがあります。

testparm

設定ファイルに大きな問題がなければ、設定内容が読み込まれます。

設定を書き換えるたびにサービスを再起動するより、先に testparm で確認する習慣を付けておくとトラブルを減らせます。

Sambaを再起動する

設定が問題なければ、Sambaのファイル共有サービスを再起動します。

sudo systemctl restart smbd

正常に起動しているか確認する場合は、次のコマンドを使います。

sudo systemctl status smbd

active (running) と表示されていれば、Sambaのサービスは動いています。

環境によっては名前解決などで nmbd も利用しますが、IPアドレスを直接指定して接続するだけなら、まず smbd の動作を確認すれば十分です。

UFWを使っている場合はSamba通信を許可する

UbuntuでUFWを有効にしている場合、ファイアウォールでSamba通信が遮断されている可能性があります。

Samba用のルールを許可する場合は、次のコマンドを利用できます。

sudo ufw allow samba

現在の状態は次のコマンドで確認できます。

sudo ufw status

ファイアウォールを使っていない場合は、この設定を行う必要はありません。

ただし、Sambaの共有をインターネットへ直接公開する構成は避けてください。基本的には社内LANや自宅の検証ネットワークなど、必要な範囲だけで利用します。

WindowsからLinuxの共有フォルダーへアクセスする

Linux側の設定が終わったら、Windowsから接続してみましょう。

まずLinuxサーバーのIPアドレスを確認します。

ip addr

例えばLinuxサーバーのIPアドレスが 192.168.1.100 なら、Windowsのエクスプローラーのアドレス欄へ次のように入力します。

\\192.168.1.100\share

windowsからLinuxのフォルダへアクセスする

認証画面が表示されたら、先ほどSambaへ登録した testuser とSambaパスワードを入力します。

共有フォルダーが表示されたら、Windows側からテスト用のファイルを1つ作成してみましょう。そのファイルがLinux側の /srv/samba/share に作成されていれば、ファイル共有は成功です。

Windowsから接続できないときの確認ポイント

Sambaは、設定ファイル、Linuxの権限、Sambaユーザー、ネットワークのどこか一つでも合っていないと接続できません。

接続できない場合は、順番に確認すると原因を切り分けやすくなります。

まずSambaサービスが動いているか確認します。

sudo systemctl status smbd

続いて設定ファイルを確認します。

testparm

共有ディレクトリの権限も確認します。

ls -ld /srv/samba/share

Sambaユーザーが登録されているか確認する場合は、次のコマンドを利用できます。

sudo pdbedit -L

最後に、WindowsからLinuxのIPアドレスへ通信できるか、ファイアウォールで遮断されていないかを確認します。

一度に設定を全部変更するのではなく、サービス、設定、権限、ネットワークの順番で見ていくと原因を見つけやすくなります。

SMB1を有効にする必要はある?

古いNASや非常に古いWindowsとの接続方法を調べると、SMB1を有効にする手順が見つかることがあります。

現在のSambaでは、通常はSMB2以降を利用できるため、新しい環境でSMB1をわざわざ有効にする必要はありません。SMB1は古いプロトコルなので、互換性だけを理由に安易に戻さない方がよいでしょう。

接続できないときは、まずWindowsとSambaのバージョン、認証設定、ファイアウォールなどを確認してください。

Sambaの仕組みを理解するとLinuxの勉強にもなる

Sambaを構築すると、ファイル共有だけでなくLinuxのさまざまな基礎が登場します。

今回だけでも、ユーザー、グループ、パーミッション、サービス、IPアドレス、ファイアウォールを使いました。

Linuxコマンドを一つずつ暗記するよりも、実際にファイルサーバーを作りながら学ぶと、なぜそのコマンドが必要なのか分かりやすくなります。

InfraAcademyでは、Linuxやネットワーク、サーバー構築を、ブラウザ上で操作しながら段階的に学習できます。

InfraAcademyでLinux・ネットワークを学ぶ

LinuxとWindowsでファイル共有する方法まとめ

今回は、Sambaを使ってLinuxとWindowsの間でファイル共有する方法を解説しました。

基本的な流れは、Sambaをインストールし、LinuxユーザーとSambaユーザーを用意して、/etc/samba/smb.conf に共有設定を追加します。その後、testparm で設定を確認し、smbd を再起動すればWindowsから接続できます。

元記事では chmod 777 とゲスト共有を使っていましたが、初心者向けの学習でも必要なユーザーだけにアクセスを許可する構成から覚える方がおすすめです。

Sambaを構築すると、Linuxの権限管理やネットワークの仕組みも一緒に学べます。コマンドを実際に入力しながら、Windowsからファイルが見えるところまで試してみてください。

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る