Linux(真っ黒な画面)とWindowsでファイル共有

スポンサーリンク

Linuxのデスクトップ環境では、比較的ファイル共有の設定が簡単でしたが、今回はCUIの環境でファイル共有の設定をします。主な目的は、Windowsとファイルのやり取りをすることです。
コマンドライン操作はマウスを使用しないため、一部のユーザーにとっては直感的ではないかもしれません。特にGUI(グラフィカルユーザーインターフェース)に慣れている場合、コマンドラインのテキストベースの操作は少し挑戦的に感じられることがあります。しかし、コマンドラインは非常に強力で柔軟なツールであり、一度習得すれば、多くのタスクを効率的に実行できるようになります。慣れるまで時間がかかるかもしれませんが、多くのリソースやチュートリアルがオンラインで利用可能ですので、学習を進めることが可能です。


WindowsとLinux間でファイルを共有する場合、最も一般的でやりやすい方法は「Samba」を使用することです。以下の理由からSambaがお勧めです。

  1. 互換性: SambaはWindowsの共有プロトコルであるSMB/CIFSを実装しているため、Windowsとの互換性が非常に高いです。これにより、Windowsユーザーは特別なソフトウェアをインストールすることなく、Linuxサーバー上のファイルにアクセスできます。
  2. 設定の容易さ: Sambaの設定は比較的簡単で、多くのLinuxディストリビューションで簡単にセットアップできます。GUIツールを使用することも可能で、設定ファイルを直接編集するより直感的です。
  3. 柔軟性: Sambaは権限やアクセス制御リスト(ACL)を細かく設定できるため、セキュリティ面での柔軟性が高いです。また、異なるユーザーやグループに異なるアクセス権を割り当てることもできます。
  4. 広範なサポート: Sambaは広く使用されているため、オンライン上には多くのガイドやチュートリアルが存在します。これにより、初心者でも比較的簡単に設定を行うことができます。

ただし、Linuxでファイルを共有する方法は、Sambaだけではありません。他にもいくつかの方法があります。以下に主な方法をいくつか紹介します。

  1. Samba: Windowsネットワーク上でファイル共有を行う際に最も一般的に使われます。LinuxとWindows間でのファイル共有に適しています。
  2. NFS (Network File System): 主にUNIX系システム間でファイルを共有するために使用されます。設定が比較的簡単で、高速なデータ転送が可能です。
  3. SSHFS (SSH Filesystem): SSHプロトコルを使用してファイルを共有します。安全性が高く、インターネット経由でのファイル共有に適しています。
  4. rsync: ファイルの同期に特化したツールです。ネットワークを介してファイルを転送し、差分のみを同期することができます。
  5. FTP/SFTP: ファイル転送プロトコルを使用してファイルを共有する古典的な方法です。SFTPはSSHをベースにしているため、セキュリティが強化されています。
  6. WebDAV (Web-based Distributed Authoring and Versioning): HTTPプロトコルを使用してファイルを共有します。インターネット経由でのアクセスに適しており、リモートでのファイル管理が可能です。

Ubuntu 22.04 LTS(またはそれに類似するバージョン)のCUI(コマンドラインインターフェイス)環境でSambaを設定する場合、主にコマンドラインツールを使用し、設定ファイルを編集する必要があります。以下に基本的な手順を示します。

  1. Sambaのインストール: UbuntuにはデフォルトでSambaがインストールされていないため、まずはインストールする必要があります。これは以下のコマンドで行えます。

    sudo apt update
    sudo apt install samba
  2. Sambaの設定: Sambaの設定は、/etc/samba/smb.conf ファイルを編集することで行います。このファイルを編集する前に、既存の設定をバックアップすることを推奨します。

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

    その後、テキストエディタ(例えば nanovim)を使用してファイルを編集します。

    sudo nano /etc/samba/smb.conf
  3. 共有ディレクトリの設定: smb.conf ファイルの最後に共有したいディレクトリの設定を追加します。例えば、特定のディレクトリを共有するには以下のように記述します。

    [共有名]
    path = /path/to/shared/folder
    read only = no
    browsable = yes

    ここで、「共有名」はWindowsからアクセスする際の名前で、「path」は共有するディレクトリのパスです。
  4. Sambaユーザーの設定: Sambaでファイル共有を行うには、Sambaユーザーを作成する必要があります。まず、Linuxシステム上に通常のユーザーを作成し、その後でSambaのパスワードを設定します。

    sudo adduser [ユーザー名]
    sudo smbpasswd -a [ユーザー名]
  5. Sambaの再起動: 設定を反映するためにSambaを再起動します。

    sudo systemctl restart smbd

これらの手順に従えば、UbuntuのCUI環境でSambaを設定し、Windowsとファイル共有を行うことができます。ただし、セキュリティ上の理由から、共有するディレクトリやファイルのアクセス権限には注意してください。また、ファイアウォールやルーターの設定も適切に行う必要があります。

共有するディレクトリについて

/path/to/shared/folder に対して chownchmod を使って適切なファイル所有権とアクセス権限を設定することは重要です。これらの設定は、Sambaを介して共有するディレクトリやファイルのセキュリティを確保し、アクセス制御を適切に行うために必要です。以下に基本的なガイドラインを示します:

  1. 所有者とグループの設定 (chown):
    • 共有ディレクトリの所有者をSambaユーザー(または適切なユーザー)に設定するために chown コマンドを使用します。
    • 例:sudo chown [ユーザー名]:[グループ名] /path/to/shared/folder
  2. アクセス権限の設定 (chmod):
    • chmod コマンドを使用して、共有ディレクトリのアクセス権限を設定します。
    • 共有ディレクトリが読み取り専用の場合、適切なアクセス権限(例:chmod 755 /path/to/shared/folder)を設定します。
    • ディレクトリが読み書き可能である必要がある場合、より緩いアクセス権限(例:chmod 777 /path/to/shared/folder)を設定することがあります。ただし、これはセキュリティリスクを高めるため、通常は推奨されません。
  3. セキュリティとアクセス制御:
    • chmodchown を適切に使用することで、不正アクセスからディレクトリを保護し、認証されたユーザーのみがアクセスできるように制御できます。
    • セキュリティを確保するために、最小限必要な権限のみを設定する「最小権限の原則」に従うことが重要です。
  4. smb.confの設定:
    • smb.conf ファイルには、Sambaサービスの振る舞いや共有の設定を行いますが、これはファイルシステムレベルのアクセス権限とは別です。
    • Sambaの設定では、ネットワーク経由でのアクセス権限や共有の振る舞いを定義しますが、実際のファイルシステムのアクセス権限はLinuxのファイルシステムに依存します。

これらの設定を行うことで、Sambaを通じて安全にファイル共有を行うことができます。常にセキュリティを念頭に置き、必要最低限のアクセス権限のみを付与するようにしましょう。

後で実際に行ったインストール方法を示しますが、sambaをインストールした時点で、サービスは起動していました。多くのLinuxディストリビューションでは自動的にサービスが起動するようです。この自動起動は、Sambaがインストール時にデフォルトの設定で有効化されるためです。インストール後にサービスが動作しているかどうかを確認するには、以下のコマンドを実行します。

sudo systemctl status smbd

実際に行った作業

sudo apt install samba
sudo mkdir share
sudo vi /etc/samba/smb.conf
以下の内容を追記

[share]
  comment = Samba on Ubuntu
  path = /home/mamu/share
  read only = no
  browsable = yes
sudo systemctl restart smbd

Sambaを使用する場合で、UFW(Uncomplicated Firewall)が有効になっているUbuntuシステムでは、特定のポートを開放する必要があります。Sambaは以下のポートを使用します。

  • TCP 139: NetBIOSセッションサービス
  • TCP 445: SMBプロトコル
  • UDP 137: NetBIOS名前サービス
  • UDP 138: NetBIOSデータグラムサービス

これらのポートをUFWファイアウォールで開放するには、以下のコマンドを使用します。

sudo ufw allow 139/tcp
sudo ufw allow 445/tcp
sudo ufw allow 137/udp
sudo ufw allow 138/udp

Sambaで必要なポートは、使用するSambaのバージョンと設定によって異なりますが、一般的には次のポートが必要です。

  • TCP 445: これはSMBプロトコルのメインポートであり、Sambaの最新バージョンでは主に使用されます。
  • TCP 139: これはNetBIOSセッションサービスのためのポートです。古いクライアントや特定の設定を使用する場合に必要になることがあります。

UDP 137(NetBIOS名前サービス)とUDP 138(NetBIOSデータグラムサービス)は、古いネットワーク環境や特定のNetBIOS依存機能に必要ですが、現代のネットワークでSambaを使用する場合は、TCP 445のみを開放すれば十分なことが多いです。

最も重要なのはTCP 445です。他のポートは、自分のネットワークの要件や古いデバイスのサポートが必要かどうかに応じて開放することを検討します。

実際にポート開放したコマンド

sudo ufw allow 445/tcp

Windowsパソコンで「ファイル名を指定して実行」に以下の内容を記述してubuntuの共有ディレクトリにアクセスします。

\\192.168.0.140

ネットワーク資源情報の入力と表示されたら、sambaで設定したユーザー情報を入力します。「資格情報を記録する」には、チェックをいれてOKボタンを押しました。

「コントロールパネル」→「ユーザーアカウント」→「資格情報マネージャー」に進み確認すると、自動で追加されているはずです。

忘れないように下記に示しておきます。

WindowsでSamba共有にアクセスする場合、Windowsのユーザー名と同じ名前のSambaユーザーを作成する必要は必ずしもありません。ただし、ユーザー名が異なる場合、ネットワークドライブにアクセスする際にSambaの認証情報を入力する必要があります。Windowsのユーザー名とSambaのユーザー名が同じであれば、認証プロセスがスムーズになり、利便性が向上します。

以下の方法を使用して、WindowsでSamba共有にアクセスする際の手順を簡素化することができます。

  1. Windowsの資格情報マネージャーを使用する:
    • Windowsには「資格情報マネージャー」という機能があり、ここにユーザー名とパスワードを保存しておくことで、毎回ログイン情報を入力する手間を省くことができます。
    • 「コントロールパネル」→「ユーザーアカウント」→「認証情報マネージャー」に進み、Windows資格情報の下にSambaサーバーの認証情報を追加します。
  2. ネットワークドライブとしてマッピングする:
    • Windowsでは、Samba共有をネットワークドライブとしてマッピングし、毎回の接続時に認証情報を再入力する必要をなくすことができます。
    • 「このコンピューター」を開き、「ネットワークドライブにマップ」を選択し、ドライブ文字を割り当てて共有フォルダのパスを入力します。接続時に認証情報を使用するオプションを選択し、ユーザー名とパスワードを入力します。
  3. 同一のユーザー名とパスワードを使用する:
    • Windowsのユーザー名とパスワードをSambaサーバー上のユーザー名とパスワードと同じにすることで、自動的に認証が行われるようになります。

これらの方法を使用することで、WindowsからSamba共有にアクセスする際に毎回ログイン情報を入力する手間を減らすことができます。

実際に確認する

無事ubuntuの共有ディレクトリにアクセスできました。

Sambaで特別にSamba専用のユーザーを作成しなくても接続できる場合があります。これは、以下のような状況に該当する場合です:

  1. 匿名またはゲストアクセスが許可されている場合: Sambaの設定で匿名(ゲスト)アクセスが許可されていると、ユーザー名やパスワードを指定せずに共有フォルダにアクセスできます。
  2. 既存のLinuxユーザーアカウントを使用: Sambaは既存のLinuxユーザーアカウントを使用してアクセス制御を行う設定になっている場合があります。この場合、既存のLinuxユーザー名とパスワードでSamba共有にアクセスできます。

Windowsパソコンでフォルダを作成します。しかし、エラーになりました。ubuntuの共有ディレクトリに書き込み権限を設定します。

sudo chmod 777 share

Windowsのネットワークで、Ubuntuパソコンが表示されるか確認します。しかし、表示されません。IPアドレス直打ちの時はアクセスできるのですが、ネットワークに一覧表示できるように設定します。以下のGithubのページが解決してくれます。

GitHub - christgau/wsdd: A Web Service Discovery host daemon.
A Web Service Discovery host daemon. Contribute to christgau/wsdd development by creating an account on GitHub.

wsdd は Web Service Discovery host daemon を実装し、Sambaホスト(例えば、ローカルのNASデバイス)がWindowsのWeb Service Discoveryクライアントによって発見されるようにするプログラムです。これは、NetBIOSディスカバリがWindowsでサポートされなくなったため、Sambaを実行しているホストをWindowsの「ネットワーク(ネットワーク近傍)」ビューに再度表示する方法として有用です。

wsdd のインストールと使用方法についての具体的な手順は、GitHub上のwsddリポジトリに詳細が記載されています。このリポジトリには、さまざまなLinuxディストリビューションやFreeBSDでのインストール手順が提供されており、Python 3.7以降が必要です。wsdd(Web Services Dynamic Discovery)を利用する場合、特定のポートの開放が必要です。これには通常、以下のポートが含まれます。

  • UDP 3702: これはWS-Discoveryプロトコルで使用されるポートです。
  • TCP 5357: WSDAPIによるHTTPサービス公開に使用されます。

リポジトリには、使い方や技術的な説明、既知の問題点、セキュリティ上の注意点など、wsdd の使用に関連する詳細な情報が含まれています。Ubuntu 22.04 LTSの場合、wsdd は公式のUniverseパッケージリポジトリに含まれているため、リポジトリの追加は不要です。直接以下のコマンドを使ってインストールできます。

sudo apt install wsdd

状態を確認すると起動していました。

sudo systemctl status wsdd

● wsdd.service – Web Services Dynamic Discovery host daemon
Loaded: loaded (/lib/systemd/system/wsdd.service; enabled; vendor preset: >
Active: active (running) since Sun 2023-11-19 19:04:10 JST; 48s ago
Docs: man:wsdd(8)
Main PID: 6018 (python3)
Tasks: 1 (limit: 9321)
Memory: 16.1M
CPU: 210ms
CGroup: /system.slice/wsdd.service
mq6018 python3 /usr/sbin/wsdd –shortlog –chroot=/run/wsdd

11月 19 19:04:10 g570 systemd[1]: Started Web Services Dynamic Discovery host d>
11月 19 19:04:10 g570 wsdd[6018]: WARNING: no interface given, using all interf>

また、特定のポートのトラフィックを許可する必要があります。

sudo ufw allow 3702/udp
sudo ufw allow 5357/tcp

WindowsパソコンにUbuntu PCが表示されました。

しかし、今度は接続できない問題が発生。IPアドレスでは接続できるが、コンピュータ名ではアクセスできない状態です。

そこで、Ubuntuに445/tcpのほか、以下のポートも開放しました。

sudo ufw allow 139/tcp
sudo ufw allow 137/udp
sudo ufw allow 138/udp

これらのポートを追加することで、先の問題は解決しました。ほかにもやり方はあると思います。

今度は逆に、ubuntuからWindowsの共有フォルダにアクセスします。Windowsの適当なフォルダに共有の設定を済ませておきます。UbuntuのCUI(コマンドラインインターフェース)からWindowsの共有フォルダにアクセスするには、Sambaクライアントツールを使用します。以下のステップに従って設定します。

  1. 必要なパッケージのインストール: Sambaクライアントツールがまだインストールされていない場合、以下のコマンドでインストールできます。

    sudo apt update
    sudo apt install cifs-utils
  2. 共有フォルダへのマウント: Windows共有フォルダにアクセスするには、まずマウントポイント(アクセスするディレクトリ)を作成します。

    sudo mkdir /mnt/windows_share

    次に、以下のコマンドでWindows共有フォルダをマウントします。

    sudo mount -t cifs -o username=ユーザー名,password=パスワード //WindowsPCのIPアドレス/共有名 /mnt/windows_share

    ここで、ユーザー名パスワードはWindows共有にアクセスするためのもので、WindowsPCのIPアドレス共有名は適宜置き換えてください。

これにより、UbuntuからWindowsの共有フォルダにアクセスし、ファイルの読み書きを行うことができます。セキュリティ上の理由から、パスワードをコマンドラインで直接入力する代わりに、クレデンシャルファイルを使用する方法もあります。UbuntuからWindowsの共有フォルダにアクセスする場合、ローカルアカウントでなくてもアクセスは可能です。Microsoftアカウント(メールアドレスとパスワード)を使用している場合でも、その認証情報を用いてSamba共有に接続することができます。ただし、共有の設定やアクセス権限によっては、特定のローカルアカウントを用いた方がスムーズな接続が可能な場合もあります。実際のアクセス可能性は、共有の設定やネットワークのセキュリティポリシーに依存します。

  1. マウントした共有フォルダにアクセス: マウントした共有フォルダは、指定したマウントポイント(この例では /mnt/windows_share)に存在します。ファイルブラウザやコマンドラインからこのディレクトリに移動し、共有フォルダの内容を閲覧、編集できます。コマンドラインからは以下のコマンドでアクセスできます。

    cd /mnt/windows_share
    ls

    これで共有フォルダ内のファイルとディレクトリのリストが表示されます。
  2. ファイル操作: このマウントポイントを通じて、通常のLinuxコマンド(cp, mv, rm など)を使用してファイル操作が行えます。

WindowsのIPアドレスが変更になった場合、Ubuntuでのマウント設定も更新する必要があります。具体的には、次の手順で対応します。

  1. 既存のマウントを解除: まず、現在のマウントを解除します。これには umount コマンドを使用します。

    sudo umount /mnt/windows_share
  2. 新しいIPアドレスで再マウント: 次に、新しいIPアドレスを使用して共有フォルダを再度マウントします。

    sudo mount -t cifs -o username=ユーザー名,password=パスワード //新しいWindowsPCのIPアドレス/共有名 /mnt/windows_share

IPアドレスが頻繁に変わる場合は、Windowsマシンに静的IPを割り当てるか、DNS名を使用してマウントする方法を検討すると便利です。静的IPやDNS名を使用することで、IPアドレスが変わってもマウント設定を毎回変更する必要がなくなります。

WindowsのIPアドレスが変更になっても、コンピュータ名で解決できる場合があります。ネットワーク上で名前解決(DNSまたはNetBIOSを通じて)が適切に機能していれば、コンピュータ名を使って共有にアクセスすることが可能です。この場合、マウントコマンドでIPアドレスの代わりにコンピュータ名を使用します。

sudo mount -t cifs -o username=ユーザー名,password=パスワード //コンピュータ名/共有名 /mnt/windows_share

ただし、これはネットワークの設定と環境に依存します。ネットワーク内でDNSやNetBIOS名解決が適切に設定されている必要があります。

下記のメッセージが表示されたときの対処法

umount: /mnt/windows_share: target is busy.

マウントポイント /mnt/windows_share が現在使用中であるため、解除できないことを意味しています。これを解決するためには以下の手順を試します。

一番簡単な方法は、マウントポイント /mnt/windows_share 以外のディレクトリでマウントを解除することです。これで解決できない場合は次の手があります。

lsof コマンドを使用してマウントポイントを使用しているプロセスを確認できます。lsof コマンドは、オープンされているファイルに関連するプロセスの情報を提供します。

まず、lsof コマンドがインストールされているか確認し、インストールされていない場合はインストールしてください。

sudo apt update
sudo apt install lsof

その後、以下のコマンドでマウントポイントを使用しているプロセスを確認します。

sudo lsof /mnt/windows_share

これで、/mnt/windows_share ディレクトリを使用しているプロセスの一覧が表示されます。それらのプロセスを安全に終了させた後、再び umount コマンドを試します。

タイトルとURLをコピーしました