はじめに
Linux で外付け HDD や USB メモリをマウントしたあと、chownでファイルの所有者を変更しようとすると「Operation not permitted(許可されていない操作です)」と表示されたり、chmodで権限を変えても反映されなかったりすることがあります。
これは Windows 系のファイルシステムである NTFS や、SD カード・大容量 USB メモリで広く使われる exFAT を Linux で扱う際に起きやすい挙動です。原因はコマンドの誤りではなく、これらのファイルシステムが Linux 形式の権限情報(所有者やパーミッション)を保持する仕組みを持たないことにあります。
- 原因: なぜ NTFS や exFAT では
chown/chmodが反映されないのか - 解決策: マウントオプション(
uid、gid、umask)で所有者と権限を割り当てる方法 - 実践: ドライバー(
ntfs-3g/ntfs3/exfat)ごとのマウントコマンドと、自分のユーザー権限で読み書きする手順
結論として、NTFS や exFAT では個別ファイルの所有者を chownで変更することはできません。代わりに、マウントする時点で uid・gid・umaskを指定し、ドライブ全体に所有者と権限をまとめて割り当てます。Linux カーネル 5.15 以降では NTFS 用に ntfs3、5.4 以降では exFAT がカーネル標準ドライバーとして利用でき、いずれもこの方法に対応します。
Linux の基本的な権限管理(rwxや 755 などの考え方)については、関連記事『Ubuntu の権限確認と chmod・chown の使い分け』もあわせて参照してください。
なぜ権限変更ができないのか(ファイルシステムの仕組み)
このセクションの要点は、NTFS や exFAT には Linux 形式の所有者・権限を記録する領域がそもそも存在しない、という一点です。
Linux で chownを実行すると、通常はファイルシステム上の所有者情報が書き換えられます。しかし NTFS や exFAT に対して実行すると「Operation not permitted」で拒否されます。これは Linux 側の不具合ではなく、ファイルシステムごとに付加情報(メタデータ)の持ち方が異なることに由来します。
Linux 系(ext4・xfs)と Windows 系(NTFS・exFAT)の違い
Linux 系のファイルシステム(ext4、xfs など)は、ファイルごとに所有者(UID)、グループ(GID)、パーミッション(rwx)を記録する専用領域(i ノード)を持ちます。一方、Windows 系は次のように権限の扱いが異なります。
- NTFS: Windows のアクセス制御リスト(ACL)で権限を管理する。Linux の UID/GID とは互換性がない。
- exFAT: USB メモリなどで使われる形式で、所有者やパーミッションという概念自体を持たない。
USB メモリが接続先の PC を問わず読み書きできるのは、こうした権限情報を保持していないことが背景にあります。

所有者情報を保存する領域がないという根本原因
chownで所有者を指定すると、Linux はファイルシステム上の所有者欄に UID を書き込もうとします。しかし NTFS や exFAT には Linux が解釈できる形式の所有者欄が存在しないため、書き込みは失敗します。個別ファイルに対して所有者を変更する操作そのものが成立しない、という点が、コマンドを実行しても権限が変わらない根本的な理由です。
解決策: マウントオプションで所有者と権限を割り当てる
NTFS や exFAT には権限情報を書き込む領域がないため、Linux はディスクへの書き込みではなく、マウントする時点で所有者と権限を適用する方式をとります。これを担うのがマウントオプションです。
ドライブ単位で所有者と権限を決める
通常の Linux ファイルシステムではファイルごとに所有者を管理しますが、NTFS/exFAT のマウントでは「このドライブ内のファイルはすべて指定したユーザーのものとして扱う」というように、ドライブ単位で一括指定します。これにより、Linux 上では適切な権限が設定されているかのように扱えます。ディスクに書き込むわけではないため、Windows 側のデータ構造には影響しません。

主要なオプション(uid・gid・umask)の役割
マウント時に指定する主なオプションは次の 3 つです。
uid:
ファイルの所有者を指定する。普段使うユーザー ID(例: 1000)を指定する。未指定の場合は root が所有者になり、一般ユーザーが書き込めないことがある。
gid:
所有グループを指定する。基本的に uidと同じ値(例: 1000)を指定する。
umask:
パーミッション(rwx)を制御する。777 から「許可しない権限」を引いた値が適用される(例: umask=0022で 777 − 022 = 755)。
ここで注意したいのが umaskの挙動です。umask=0022を指定すると、ディレクトリは 755(所有者は読み書き実行、グループとその他は読み取りと実行)になりますが、ファイルにも実行権限が付与され、同じく 755 として扱われます。これは NTFS や exFAT が実行ビットをファイル単位で保持できないためです。ファイルだけを 644(実行権限なし)にしたい場合は、umaskの代わりに fmask/dmaskを併用します(後述)
参考: NTFS3 — The Linux Kernel documentation
“uid= gid= umask= Controls the default permissions for files/directories”
(uid=・gid=・umask= はファイル/ディレクトリの既定の権限を制御する)
https://docs.kernel.org/filesystems/ntfs3.html
実践: マウントコマンドの組み立て方
手順は「自分の ID を調べる」「ドライブをマウントする」の 2 ステップです。
自分のユーザー ID(uid/gid)を調べる
オプションに指定する ID を確認します。ターミナルで idを実行します。
id次のような結果が表示されます。
uid=1000(tomo) gid=1000(tomo) groups=1000(tomo),4(adm),...確認するのは uid=1000と gid=1000の部分です。多くのディストリビューションでは最初に作成したユーザーが 1000 番になりますが、環境により異なるため実際の値を確認してください。
NTFS をマウントする(ntfs-3g/ntfs3)
NTFS には 2 系統のドライバーがあります。ntfs-3gは FUSE ベースのユーザー空間ドライバーで、幅広い環境で利用できます。ntfs3は Linux カーネル 5.15 以降に標準搭載された読み書き対応ドライバーです。
ntfs-3gを使う場合は次のコマンドです。
sudo mount -t ntfs-3g -o uid=1000,gid=1000,umask=0022 /dev/sdb1 /media/usbntfs3(カーネル 5.15 以降)を使う場合は次のコマンドです。
sudo mount -t ntfs3 -o uid=1000,gid=1000,umask=0022 /dev/sdb1 /media/usb-t ntfs-3g/-t ntfs3: 使用するドライバー(ファイルシステム種別)を指定する。-o ...: 先ほど調べたuid・gidと、権限を制御するumaskを指定する。/dev/sdb1はデバイス名、/media/usbはマウントポイントです。環境に合わせて変更してください。
exFAT をマウントする
exFAT は Linux カーネル 5.4 以降でカーネル標準ドライバーとして対応しており、NTFS と同じオプションが利用できます。
sudo mount -t exfat -o uid=1000,gid=1000,umask=0022 /dev/sdb1 /media/usb-t exfat: ファイルシステム種別に exFAT を指定する。
これにより、これまで root 権限が必要だったドライブを、自分のユーザー権限で読み書きできるようになります。なお、ローカルドライブではなくクラウドストレージをマウントしたい場合は、関連記事『Ubuntu で Google Drive をマウントする方法』もあわせて参照してください。
参考: mount.exfat(8) man page
“uid=n Set the owner for all files and directories.”
(uid=n はすべてのファイルとディレクトリの所有者を設定する)
https://www.systutorials.com/docs/linux/man/8-mount.exfat/
ntfs-3g と ntfs3 のどちらを選ぶか
NTFS の 2 系統のドライバーは、環境と目的によって選択できます。
| 項目 | ntfs-3g | ntfs3 |
|---|---|---|
| 種別 | FUSE(ユーザー空間) | カーネル標準(5.15 以降) |
| 速度 | 相対的に低速・CPU 負荷が高め | 高速(特に大容量ファイルで有利) |
| 実績・安定性 | 広範な環境で長年の実績 | 比較的新しく改善が継続中 |
| 対応環境 | ドライバー導入で幅広く対応 | カーネル 5.15 以降に標準搭載 |
| 主なオプション | uid/gid/umask/fmask/dmask、remove_hiberfileなど | uid/gid/umask/fmask/dmaskなど |
| マウント種別 | ntfs-3g | ntfs3 |
選定の目安としては、Ubuntu 22.04 以降や Fedora、Arch などカーネル 5.15 以降の新しい環境で速度を重視するなら ntfs3、古い環境や最大限の互換性を重視するなら ntfs-3gが向きます。remove_hiberfileなど休止状態まわりの細かいオプションを使いたい場合も ntfs-3gが選択肢になります。
ファイルとディレクトリで権限を分ける(fmask・dmask)
umaskはファイルとディレクトリを区別せず一律に適用するため、ファイルにも実行権限が付きます。ファイルを 644(実行権限なし)、ディレクトリを 755 に分けたい場合は、umaskの代わりに fmaskと dmaskを使います。
dmask: ディレクトリ用のマスク。dmask=0022で 777 − 022 = 755 になる。fmask: ファイル用のマスク。fmask=0133で 777 − 133 = 644 になり、実行ビットが外れる。
sudo mount -t ntfs3 -o uid=1000,gid=1000,dmask=0022,fmask=0133 /dev/sdb1 /media/usb複数ユーザーで共有する場合は dmask=0000,fmask=0000を指定すると、すべてのユーザーが読み書きできます。ただしアクセス範囲が広がるため、利用者が限定された環境での使用をおすすめします。
参考: NTFS-3G — ArchWiki
“755 for directories (dmask=022) and 644 for files (fmask=133)”
(ディレクトリは 755〈dmask=022〉、ファイルは 644〈fmask=133〉)
https://wiki.archlinux.org/title/NTFS-3G
マウント後は chmod/chown が反映されない
この方法でマウントした場合、後から chmodや chownを実行してもエラーにはなりませんが、設定は反映されません。マウントオプションでドライブ全体の権限を一律に適用しているため、個別の変更を受け付けないことが理由です。権限を変更する場合は、一度アンマウントし、umask(または fmask/dmask)の値を変えて再マウントします。
再起動後も維持する: /etc/fstab での永続化
mountコマンドによるマウントは一時的なもので、再起動すると解除されます。起動時に自動でマウントするには、/etc/fstabに設定を記述します。デバイス名(/dev/sdb1など)は接続順で変わることがあるため、変動しない UUID で指定する方法をおすすめします。
まず、対象ドライブの UUID を確認します。
sudo blkid /dev/sdb1lsblk -fでも一覧で確認できます。確認した UUID を使い、/etc/fstabの末尾に次の形式で追記します(ntfs3の例)
UUID=XXXXXXXXXXXXXXXX /media/usb ntfs3 uid=1000,gid=1000,dmask=0022,fmask=0133,nofail 0 0nofail:
ドライブが接続されていなくても起動を継続する。USB メモリなどリムーバブルドライブでの指定をおすすめします。
末尾の 0 0:
それぞれ dumpと fsckの対象指定で、NTFS/exFAT では 0 0とする。
ntfs-3gや exfatで永続化する場合は、3 列目のファイルシステム種別を ntfs-3gまたは exfatに置き換えます。
記述後は、再起動前に設定の妥当性を確認することをおすすめします。次のコマンドでエラーが出ないことと、実際にマウントされることを確認します。
sudo mount -a
mount | grep usbトラブルシューティング: 書き込めない・read-only になる場合
マウントオプションを正しく指定しても書き込めない、または読み取り専用(read-only)でマウントされる場合があります。NTFS で最も多い原因は、Windows の「高速スタートアップ(Fast Startup)」と休止状態です。
Windows でシャットダウンしても、高速スタートアップが有効だとシステム状態が hiberfil.sysに保存され、NTFS が「休止中(dirty)」と記録されます。この状態のドライブに対しては、ntfs-3gも ntfs3もデータ破損を避けるために読み書きマウントを拒否し、読み取り専用にフォールバックします。原因は dmesgで確認できます。
dmesg | tail「unclean」「hibernated」「read-only」といったメッセージが出ていれば、休止フラグが原因です。
対処は次の順で検討します。
恒久対処:
Windows 側で高速スタートアップを無効化する(コントロールパネル → 電源オプション → 電源ボタンの動作を選択する → 高速スタートアップを無効化)。または Windows を完全シャットダウンする。
暫定対処(Linux 側): sudo ntfsfix -d /dev/sdb1で休止フラグを解除してから再マウントする。ntfsfixは ntfs-3gに含まれます。
読み取りだけでよい場合: -o roを付けて読み取り専用でマウントする。
ntfs-3gの remove_hiberfileオプション: hiberfil.sysを削除して読み書きマウントを試みる。ただし Windows の休止セッション(未保存データ)が失われるため、復帰予定のセッションがある場合は使用を控えることをおすすめします。
参考: ntfs-3g(8) man page
“the read-write mount is denied if the NTFS volume is hibernated”
(NTFS ボリュームが休止状態の場合、読み書きマウントは拒否される)
https://manpages.ubuntu.com/manpages/focal/en/man8/ntfs-3g.8.html
まとめ
NTFS や exFAT は Linux 形式の権限情報を保持しないため、chownや chmodでは所有者やパーミッションを変更できません。解決はマウント時の一括指定にあり、uid・gid・umaskに加え、用途に応じて fmask/dmaskを使い分けます。ドライバーは新しい環境なら ntfs3、互換性重視なら ntfs-3gが選択肢になります。
- NTFS・exFAT は Linux の所有者欄を持たず
chownが無効 - 解決はマウント時の
uid・gid・umaskの指定 umask単独ではファイルも 755、fmask/dmaskで 644 に分離- NTFS は
ntfs-3g(FUSE)とntfs3(カーネル 5.15 以降)の 2 系統 - 永続化は
/etc/fstabに UUID とnofailで記述 - 書き込めない原因の多くは Windows の高速スタートアップ
- 暫定対処は
ntfsfix -dまたは読み取り専用マウント
以上、最後までお読みいただきありがとうございました。
