はじめに
Linux で外付け HDD や USB メモリをマウントした際、「chown コマンドで所有者を変更しようとしてもエラーが出る(Operation not permitted)」「chmod で権限を変えても反映されない」というトラブルに遭遇したことはありませんか?
これは、Windows 形式のファイルシステムである NTFS や、最近の SD カードや大容量 USB メモリで標準的に使われる exFAT を Linux で扱う際によくある現象です。
実はこれ、コマンドの間違いではなく、「そもそもそのファイルシステムが Linux の権限情報を保存できない」 という仕様上の問題なのです。そのため、いくら chown を叩いても設定は反映されません。
Linux の基本的な権限管理(rwx や 755 などの意味)については、以下の記事で詳しく解説しています。

- 原因: なぜ NTFS や exFAT では
chown/chmodが無効なのか - 解決策: マウントオプション(
uid,gid,umask)で、擬似的に権限をコントロールする方法 - 実践: 自分のユーザー権限で自由に読み書きできるようにする具体的なマウントコマンド
なぜ権限変更ができないのか?(ファイルシステムの仕組み)
Linux で chown コマンドを実行したとき、通常であればファイルの「所有者情報」が書き換えられます。しかし、NTFS や exFAT に対してこれを行うと、「許可されていない操作です(Operation not permitted)」 と拒否されてしまいます。
これは Linux 側の不具合ではなく、「そもそもファイルシステム(記録方式)の仕組みが根本的に違う」 ことが原因です。

Linux(ext4など)と Windows 系(NTFS/exFAT)の決定的な違い
ファイルシステムは、ただデータを保存しているだけでなく、そのファイルに関する「付加情報(メタデータ)」も一緒に記録しています。このメタデータの持ち方が、OS によって全く異なります。
- Linux のファイルシステム(ext4, xfs など)
-
ファイルごとに「所有者(UID)」「グループ(GID)」「パーミッション(rwx)」を記録するための専用の保存スペース(i ノード)を持っています。
- Windows のファイルシステム(NTFS, exFAT)
-
- NTFS: Windows 専用の「アクセス制御リスト(ACL)」で権限を管理。Linux の UID/GID とは互換性なし
- exFAT: USB メモリなどで使われる形式で、「所有者」や「権限」という概念自体を持っていません。

USB メモリなどは、(権限などなく)誰でも読み書き可能ですよね。
「Linux の所有者情報を保存する場所がない」という根本原因
私たちが chown コマンドで「このファイルの持ち主はユーザー A だ!」と命令したとき、Linux はファイルシステム上の「所有者記入欄」にユーザー A の ID を書き込もうとします。
しかし、NTFS や exFAT には、Linux が理解できる形式の「所有者記入欄」が存在しません。
- Linux: 「ここにユーザー ID を書き込みたいんだけど…」
- NTFS/exFAT: 「そんな記入欄はないよ(もしくは、その形式は扱えないよ)」
- 結果: 書き込み失敗(エラー)



記入欄がない以上、個別のファイルに対して「所有者を変更する」ことは不可能なのです。これが、いくらコマンドを叩いても権限が変わらない根本的な原因です。
解決策: マウントオプションで所有者を「偽装」する
前章で説明した通り、NTFS や exFAT には権限情報を書き込む場所がありません。 そこで Linux は、ディスクに書き込むのを諦めて、「ディスクを読み込んでシステムにマウントする瞬間に、権限情報を上書き(偽装)する」 というアプローチを取ります。
これを実現するのが マウントオプション です。


個別の変更は諦めて、マウント時に「誰のものか」を決めるアプローチ
通常、Linux のファイルシステムでは「ファイル A はユーザー A のもの」「ファイル B はユーザー B のもの」と個別に管理します。 しかし、NTFS/exFAT をマウントする場合は、「このドライブの中にあるファイルは、全部ユーザー A のものってことにする!」 と一括で決め打ちします。
これにより、Linux システム上ではあたかも「適切な権限が設定されている」かのように振る舞うことができます。あくまで「見せかけ」なので、元の Windows 側でデータが壊れることはありません。
重要な3つのオプション(uid, gid, umask)の役割
マウント時に指定するオプションは主に以下の3つです。これらを呪文のようにセットで使います。
| 名前 | 役割 | 設定値の目安・仕組み |
| uid | ファイルの「所有者」を誰にするかを指定 | 普段使っているユーザー ID(例: 1000) これを指定しないと、デフォルトで root が所有者になってしまい、一般ユーザーが書き込めなくなります。 |
| gid | ファイルの「所有グループ」を誰にするかを指定 | uid と同じ値(例: 1000) 基本的には uid とセットで設定します。 |
| umask | ファイルやディレクトリの「パーミッション(rwx)」を制御 | 0022 (結果として 755 になります) 「許可しない権限」を指定する引き算の数値です。 777 (全許可) - 022 = 755 |



0022(755)は、自分は読み書き実行 OK、他の人は読むだけという安全な設定になります。
実践: 正しいマウントコマンドの組み立て方
実際にコマンドを組み立ててみましょう。 大きく分けて「自分の ID を調べる」「マウントする」の2ステップで完了します。
まず、オプションに指定するための「あなたの ID」を確認します。ターミナルを開いて、以下のコマンドを入力してください。
id実行すると、以下のような結果が表示されます。
uid=1000(tomo) gid=1000(tomo) groups=1000(tomo),4(adm),...ここで重要なのは uid=1000 と gid=1000 の部分です。 (多くの Linux ディストリビューションでは、最初に作成されたユーザーは 1000 番になりますが、環境によって異なるので必ず確認してください。)
NTFS フォーマットの外付け HDD などをマウントする場合のコマンドです。
※ /dev/sdb1 はデバイス名、/media/usb はマウントポイントです。環境に合わせて書き換えてください。
sudo mount -t ntfs-3g -o uid=1000,gid=1000,umask=0022 /dev/sdb1 /media/usb-t ntfs-3g: NTFS を読み書きモードで扱うためのドライバを指定します。-o ...: ここで先ほど調べたuid,gidと、権限設定のumaskを指定します。
最近の大容量 SD カードや USB メモリで主流となっている exFAT の場合も、実は全く同じオプションが使えます。
sudo mount -t exfat -o uid=1000,gid=1000,umask=0022 /dev/sdb1 /media/usb-t exfat: ファイルシステムの種類に exFAT を指定します。
これだけで、今まで root 権限でしか書き込めなかったドライブが、あなたのユーザー権限で自由に読み書きできるようになります。
この方法でマウントした場合、後から chmod や chown を実行してもエラーにはなりませんが、設定は反映されません。
なぜなら、マウントオプションで「このドライブの全ファイルは権限 755!」と強制的にフィルターをかけているため、個別の変更を受け付けなくなるからです。 もし権限を変更したい場合は、一度アンマウントしてから、umask の値を変更して再度マウントし直す必要があります。
まとめ
本記事では、Linux で NTFS や exFAT ドライブの権限変更ができない原因と対処法について解説しました。
- 原因
-
Windows 系ファイルシステム(NTFS/exFAT)には、Linux 用の「所有者タグ」を貼る場所がないため、
chownは無効化される。 - 対策
-
個別のファイルに権限を与えるのではなく、マウント時に「このドライブは私のもの!」と宣言(オプション指定)することで解決する。
- 必須オプション
-
uid=1000,gid=1000,umask=0022を使えば、トラブルなく読み書きが可能になる。
以上、最後までお読みいただきありがとうございました。


