こんにちは。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側ではlsやcpで操作できます。
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
次のようにFSTYPEへcifsが表示されれば、マウントされています。
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=1000、gid=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_modeとdir_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へ含めないでください。
必要に応じて実行を制限する¶
ファイル置き場としてだけ使う共有では、nosuid、nodev、noexecなどを検討できます。
//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コマンドやサーバー構築をブラウザ上で練習できます。