InfraAcademy

InfraAcademy Blog

【mount -t cifs】CIFSを使用してLinuxとWindowsのファイルを共有する方法

| #Linux #Linux初心者
Linuxをブラウザで試してみる

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

こんにちは。InfraAcademyというインフラ学習サービスを運営しているryuです。

この記事では、LinuxからWindowsの共有フォルダへ接続し、ローカルディレクトリのように利用する方法を解説します。

この記事では、一時的にマウントする方法から、/etc/fstabによる自動マウント、権限設定、よくあるエラーまで解説します。

CIFSを使ったLinuxとWindowsのファイル共有とは

Windowsの共有フォルダは、SMBというネットワークファイル共有プロトコルを使って提供されます。

Linuxでは、mount -t cifsコマンドを使うことで、WindowsやSambaサーバーの共有フォルダをファイルシステムとして接続できます。

SMBとCIFSの違い

CIFSは、SMBプロトコルに含まれる古いダイアレクトの名称です。

Linuxでは現在もファイルシステム名としてcifsを使いますが、実際の通信では通常、より新しいSMB 2やSMB 3が選択されます。

mount -t cifs

古い機器へ接続するためにvers=1.0を指定する記事もありますが、SMB 1は安易に有効化しないでください。

マウントとは

マウントとは、別のファイルシステムをLinuxのディレクトリへ接続する操作です。

たとえば、Windowsの\\192.168.1.10\shareをLinuxの/mnt/windows-shareへ接続すると、Linux側ではlscpで操作できます。

Windows側: \\192.168.1.10\share
Linux側:   /mnt/windows-share

CIFSで共有フォルダをマウントする前の準備

コマンドを実行する前に、Windows側の共有設定とLinux側のパッケージを確認します。

項目 設定例
Windows Server 192.168.1.10
共有名 share
Windowsユーザー user01
Linuxのマウント先 /mnt/windows-share

Windows側の共有を確認する

Windowsのエクスプローラーから、次のパスへ接続できるか確認します。

\\192.168.1.10\share

SMBでは主にTCP 445番ポートを使うため、Windows Defender Firewallやネットワーク機器でも通信が許可されている必要があります。

Linuxからは、IPアドレスやポートを確認できます。

ping -c 4 192.168.1.10
nc -vz 192.168.1.10 445

cifs-utilsをインストールする

Ubuntu・Debian系では、次のコマンドを実行します。

sudo apt update
sudo apt install cifs-utils

Rocky Linux・AlmaLinux・RHEL・FedoraなどのRed Hat系では、次のコマンドです。

sudo dnf install cifs-utils

インストール後、command -v mount.cifsで実行ファイルが表示されれば準備完了です。

mount -t cifsで一時的にマウントする

まずは、再起動すると解除される一時的なマウントを試します。

動作確認前に/etc/fstabへ書くと、設定ミスによって起動時に問題が発生する可能性があります。

マウントポイントを作成する

Windowsの共有フォルダを接続するLinux側のディレクトリを作ります。

sudo mkdir -p /mnt/windows-share

マウントポイント内に既存ファイルがあると、マウント中は見えなくなるため、空のディレクトリを使いましょう。

パスワードを対話入力する

最初の動作確認では、パスワードをコマンドへ直接書かず、対話形式で入力します。

sudo mount -t cifs //192.168.1.10/share /mnt/windows-share \
  -o username=user01

実行するとパスワードを求められますが、入力中の文字は画面に表示されません。

元記事では、次のようにパスワードを直接書いていました。

sudo mount -t cifs -o username=user01,password=PASSWORD \
  //192.168.1.10/share /mnt/windows-share

この方法では、シェルの履歴やプロセス情報からパスワードが見える可能性があります。

基本的には対話入力か、後ほど紹介する資格情報ファイルを使いましょう。

ドメインユーザーで接続する

Active Directoryのドメインユーザーを使う場合は、domainを追加します。

sudo mount -t cifs //192.168.1.10/share /mnt/windows-share \
  -o username=user01,domain=EXAMPLE

マウントできたか確認する

コマンドでエラーが表示されなかった場合も、実際にマウントされているか確認します。

findmnt /mnt/windows-share

次のようにFSTYPEcifsが表示されれば、マウントされています。

TARGET             SOURCE                 FSTYPE
/mnt/windows-share //192.168.1.10/share  cifs

続いて、共有フォルダの内容と書き込みを確認します。

ls -la /mnt/windows-share
touch /mnt/windows-share/linux-test.txt

読み込みはできるのに作成できない場合は、Windows側の共有アクセス許可とNTFSアクセス許可を確認してください。

資格情報ファイルを使って接続する

毎回パスワードを入力したくない場合は、認証情報を専用ファイルへ保存します。

/etc/fstabで自動マウントする場合も、この方法を使うのが基本です。

資格情報ファイルを作成する

rootユーザーだけが読み取れる場所へファイルを作成します。

sudo vi /root/.smbcredentials

次の内容を記述します。

username=user01
password=実際のパスワード
domain=EXAMPLE

ドメインを使わない場合は、domain行を省略できます。

ファイルの権限を600にする

認証情報を他のユーザーから読まれないようにします。

sudo chown root:root /root/.smbcredentials
sudo chmod 600 /root/.smbcredentials

ls -l-rw-------と表示されれば、root以外には権限がありません。

権限を777へ変更するのは危険です。

【関連記事】Linuxのファイル権限とchmodを解説

資格情報ファイルを指定する

credentialsオプションで作成したファイルを指定します。

sudo mount -t cifs //192.168.1.10/share /mnt/windows-share \
  -o credentials=/root/.smbcredentials

正しく設定されていれば、パスワードを入力せずにマウントできます。

Linuxユーザーから書き込めるようにする

rootでマウントすると、共有フォルダの所有者がrootに見えることがあります。

一般ユーザーから利用したい場合は、idでUIDとGIDを確認します。

id

uid=1000gid=1000なら、次のように指定します。

sudo mount -t cifs //192.168.1.10/share /mnt/windows-share \
  -o credentials=/root/.smbcredentials,uid=1000,gid=1000,file_mode=0660,dir_mode=0770

file_modedir_modeは、Linux側で表示されるファイルとディレクトリの権限です。

Windowsサーバー側のアクセス許可を超えて書き込めるようになるわけではありません。

/etc/fstabで自動マウントする

手動での動作確認ができたら、/etc/fstabへ追加して自動マウントできます。

設定を間違えると起動時に待ち時間が発生するため、バックアップと事前確認を行いましょう。

fstabへ設定を追加する

編集前にバックアップを作成します。

sudo cp /etc/fstab /etc/fstab.bak
sudo vi /etc/fstab

末尾へ次の1行を追加します。

//192.168.1.10/share /mnt/windows-share cifs credentials=/root/.smbcredentials,uid=1000,gid=1000,file_mode=0660,dir_mode=0770,_netdev,nofail,x-systemd.automount 0 0

主なオプションの意味は次のとおりです。

オプション 意味
credentials= 資格情報ファイルを指定
uid=gid= Linux側の所有者とグループ
file_mode=dir_mode= Linux側で表示する権限
_netdev ネットワークが必要なマウントとして扱う
nofail マウント失敗だけで起動を止めない
x-systemd.automount ディレクトリへのアクセス時にマウントする

VPN接続後に共有へアクセスする環境では、アクセス時のマウントが便利です。

【関連記事】fstabの書き方とmountコマンドを解説

再起動前に確認する

systemdへ変更を認識させ、fstabを確認します。

sudo systemctl daemon-reload
sudo findmnt --verify --verbose
sudo mount /mnt/windows-share

CIFSのマウントを解除する

共有フォルダを切断する場合は、umountコマンドを使います。

sudo umount /mnt/windows-share

target is busyと表示された場合は、ターミナルがマウントポイント内にいないか確認します。

cd /
sudo fuser -vm /mnt/windows-share

利用中のプロセスを確認せず、いきなり強制アンマウントを行わないでください。

mount -t cifsでよくあるエラー

CIFSのエラーは、認証、共有名、ネットワーク、SMBバージョンなど複数の原因で発生します。

mount error(13): Permission denied

ユーザー名、パスワード、ドメイン名、Windows側の共有アクセス許可、NTFSアクセス許可を確認します。

資格情報ファイルの余分な空白や入力ミスも確認してください。

mount error(2): No such file or directory

Linux側のマウントポイントがない、またはWindows側の共有名が間違っている可能性があります。

sudo mkdir -p /mnt/windows-share

Windowsで表示されるフォルダ名ではなく、設定された共有名を指定します。

mount error(95): Operation not supported

クライアントとサーバーで、利用できるSMBダイアレクトが合っていない可能性があります。

切り分けとしてvers=3.0を指定できますが、現在は自動調整を使うのが基本です。

sudo mount -t cifs //192.168.1.10/share /mnt/windows-share \
  -o credentials=/root/.smbcredentials,vers=3.0

vers=1.0でしか接続できない場合は、SMB 1を有効化する前にサーバーの更新を検討してください。

Host is downやNo route to host

Windows Serverまでの経路、名前解決、TCP 445番ポートを確認します。

ip route
getent hosts fileserver
nc -vz 192.168.1.10 445

追加情報はカーネルログで確認できます。

sudo journalctl -k -n 50

CIFSを安全に運用するポイント

共有フォルダへ接続できた後も、認証情報や権限の扱いには注意が必要です。

パスワードを直接書かない

コマンド履歴へ認証情報を残さないため、対話入力または資格情報ファイルを使います。

資格情報ファイルはchmod 600とし、Gitへ含めないでください。

必要に応じて実行を制限する

ファイル置き場としてだけ使う共有では、nosuidnodevnoexecなどを検討できます。

//192.168.1.10/share /mnt/windows-share cifs credentials=/root/.smbcredentials,nosuid,nodev,noexec 0 0

chmod 777で解決しようとしない

CIFSでは、Linux側の権限表示とWindows側のアクセス制御が組み合わさります。

chmod 777を実行してもWindows側の権限不足は解消せず、ローカルユーザーへ不要なアクセスを許可することがあります。

私は10年以上エンジニアとしてサーバーを扱っていますが、権限エラーが出たときほど、どこでアクセスを拒否されているかを分けて確認します。

Linux側の所有者、マウントオプション、Windows共有権限、NTFS権限を順番に調べましょう。

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

今回の記事では、mount -t cifsを使ってWindowsの共有フォルダをLinuxへマウントする方法を解説しました。

一時的に接続する基本コマンドは、次のとおりです。

sudo mount -t cifs //192.168.1.10/share /mnt/windows-share \
  -o username=user01

継続して利用する場合は、認証情報を直接書かず、chmod 600を設定した資格情報ファイルを利用します。

/etc/fstabへ追加するときは、再起動前にfindmnt --verifyと手動マウントで確認してください。

CIFSという名前は残っていますが、現在のWindowsとの接続ではSMB 2・SMB 3を利用するのが基本です。

SMB 1を安易に有効化したり、権限を777へ変更したりしないことが大切です。

Linux側から共有を提供したい場合は、Sambaサーバーを構築します。

【関連記事】LinuxとWindowsでSambaを使ってファイル共有する方法

InfraAcademyでは、Linuxコマンドやサーバー構築をブラウザ上で練習できます。

サーバー構築講座を見る

参考資料

Next Action

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

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

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

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

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

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

講座一覧を見る