【Linux】chownコマンドの使い方|所有者・グループ変更・chgrpとの違い・Operation not permittedの原因

【chown】所有者・グループを変更する方法|chgrpとの違い・Operation not permittedの原因 Linux

chmodが「誰が読み書き実行できるか」という権限を決めるコマンドなら、chownchgrp「そのファイルが誰のものか(所有者・所有グループ)」を決めるコマンドです。ls -lで見えるrw-r--r-- root root file.txtの、太字部分(所有者・グループ)を変更します。デプロイ後のファイル所有者調整や、Webサーバー用のディレクトリ権限設定などで頻繁に使います。

この記事では、実機のLinux(WSLのDebian)でchownchgrpの基本と、一般ユーザーには扱えない操作があるという重要な制約を、実際に権限エラーを起こしながら整理します。「chownしたらOperation not permittedと言われた」というのは、権限まわりで非常によくあるつまずきです。

先に結論

  • chown ユーザー:グループ ファイルで、所有者とグループを同時に変更できます。
  • chown ユーザー(コロンなし)は所有者だけchown :グループグループだけ変更します。
  • chgrp グループ ファイルは、グループだけを変える専用コマンドです。
  • ディレクトリごと変更するには-R(再帰)を付けます。
  • 所有者の変更は基本的にroot(管理者)権限が必要です。
  • 一般ユーザーは、自分のファイルでも「所属していないグループ」には変更できません

権限の読み方はchmodとパーミッションの記事、コマンド実行時の権限を確認するプロセス管理はps・killもあわせて参考になります。

スポンサーリンク

chownの基本:所有者とグループを同時に変更

chownの基本形はchown 所有者:グループ ファイルです。ls -lで見える2つの名前(所有者・グループ)を、一度に書き換えられます。

chown の基本
# 初期状態を確認
ls -l f.txt
# -rw-r--r-- 1 root root 0 Jul  9 09:14 f.txt

# 所有者とグループを同時に変更
sudo chown testuser2:testgroup2 f.txt
ls -l f.txt
# -rw-r--r-- 1 testuser2 testgroup2 0 Jul  9 09:14 f.txt

実機でも、chown testuser2:testgroup2 f.txtを実行すると、ls -lの表示が所有者・グループとも指定どおりに書き換わりました。ユーザー名:グループ名コロン区切りが基本の書式です。実運用では、Webサーバーが読めるように所有者をwww-dataに変える、デプロイユーザーの所有物として統一する、といった場面でよく使われます。

所有者だけ・グループだけを変更する

コロンの位置を工夫すると、所有者だけ、あるいはグループだけを変更できます。片方を省略すれば、もう片方は変更されずそのまま残ります。

片方だけを変更する
# ユーザーのみ変更(コロンなし) → グループは変わらない
chown root f.txt
ls -l f.txt
# -rw-r--r-- 1 root testgroup2 0 ...   ← グループは testgroup2 のまま

# グループのみ変更(コロン + グループ名) → 所有者は変わらない
chown :root f.txt
ls -l f.txt
# -rw-r--r-- 1 root root 0 ...

# グループのみの変更は chgrp でも同じことができる
chgrp testgroup2 f.txt
ls -l f.txt
# -rw-r--r-- 1 root testgroup2 0 ...
コロンの位置で挙動が変わる(実証)

実機で確認したところ、chown root f.txt(コロンなし)は所有者だけをrootに変更し、グループはtestgroup2のまま残りました。逆にchown :root f.txt(コロン+グループ名)はグループだけを変更しました。そしてchgrp testgroup2 f.txtという専用コマンドでも、同じくグループだけの変更ができました。つまりchown :グループ名chgrp グループ名は同じ結果になります。「グループだけ変えたい」という意図が明確なときは、chgrpを使うほうがコマンドの意味が伝わりやすく、タイプミス(コロンの付け忘れ)も防げます。

-Rでディレクトリごと再帰的に変更

ディレクトリとその中身すべての所有者・グループを変えるには、cp・rmと同じ-R(再帰)を付けます。

-R で再帰的に変更
mkdir -p sub/deep
touch sub/a.txt sub/deep/b.txt

# -R を付けて、ディレクトリの中身すべてを変更
chown -R testuser2:testgroup2 sub

ls -lR sub
# sub/a.txt        … testuser2 testgroup2
# sub/deep/b.txt   … testuser2 testgroup2(サブディレクトリの中身まで反映)

実機でも、chown -R testuser2:testgroup2 subを実行すると、sub直下のファイルだけでなくsub/deep/のさらに深い階層のファイルまで、すべて所有者・グループが変更されました。Webサイトのディレクトリ全体の所有者をまとめて揃えたいときなど、-Rを忘れると一部のファイルだけ古い所有者のまま残ってしまうので注意してください。

【最重要】一般ユーザーはchownできない

ここがchownで最もつまずくポイントです。ファイルの所有者を変更できるのは、基本的にroot(管理者)権限を持つユーザーだけです。自分が持っているファイルであっても、一般ユーザーの権限では所有者を他人に変更できません

Operation not permitted の再現
# 一般ユーザー(testuser2)で、自分のファイルの所有者を変えようとすると…
chown root f.txt
# chown: changing ownership of 'f.txt': Operation not permitted

# sudo を付ければ管理者権限で実行できる
sudo chown root f.txt
一般ユーザーの所有者変更は拒否される(実証)

実機で、一般ユーザー権限(setprivで非rootに切り替え)から自分のファイルの所有者を変更しようとしたところ、chown: changing ownership of 'f.txt': Operation not permittedと拒否されました。これは、もし一般ユーザーが自由に所有者を変更できてしまうと、「悪いことをしたファイルを他人の持ち物に見せかける」といった不正が可能になってしまうためのセキュリティ上の制約です。所有者の変更にはroot権限(sudo)が必要だと覚えておいてください。「自分のファイルなのにchownできない」と焦ったときは、この仕様が原因です。

【重要】グループ変更にも制約がある

グループの変更(chgrp、またはchown :グループ)は、所有者の変更よりは緩やかですが、一般ユーザーは「自分が所属しているグループ」にしか変更できません

所属グループへの変更のみ許可される
# 自分が所属しているグループ(mygroup)への変更は成功する
chgrp mygroup myfile.txt
ls -l myfile.txt
# -rw-r--r-- 1 testuser3 mygroup 0 ...   ← 成功

# 所属していないグループ(othergroup)への変更は拒否される
chgrp othergroup myfile.txt
# chgrp: changing group of 'myfile.txt': Operation not permitted

実機でも、ユーザーが所属しているグループ(mygroupへの変更は成功しましたが、所属していないグループ(othergroupへの変更はOperation not permittedで拒否されました。これは、自分の権限のないグループへファイルを勝手に移せてしまうと、そのグループのメンバーに意図せずアクセス権を与えてしまうためです。自分の所属グループはgroupsコマンドやidコマンドで確認できます。「chgrpしたのに権限エラーになる」ときは、そのグループに自分が入っているかを確認してください。

主な書き方一覧

chownchgrpの要点をまとめます。

書き方 働き
chown user:group ファイル 所有者とグループを同時に変更
chown user ファイル 所有者だけ変更(グループは維持)
chown :group ファイル グループだけ変更(chgrpと同じ)
chgrp group ファイル グループ専用の変更コマンド
-R ディレクトリの中身も再帰的に変更
id / groups 自分の所属ユーザー・グループを確認

よくある失敗

Operation not permittedで所有者を変更できない

所有者の変更にはroot権限が必要です。sudo chownを使います。

グループ変更もOperation not permittedになる

自分が所属していないグループには変更できません。groupsで所属を確認します。

ディレクトリの中身が変更されない

-Rを忘れると、そのディレクトリ自体しか変わりません。

コロンの位置を間違える

chown user:group(両方)とchown :group(グループのみ)を混同しないよう注意します。

chownとchmodを混同する

chownは「誰のものか」、chmodは「誰が何をできるか」です。役割が違います。

よくある質問

Qchownとchgrpの違いは何ですか?
Achownは所有者とグループの両方(chown user:group)を変更できる汎用コマンドで、chgrpはグループだけを変更する専用コマンドです。chown :group ファイルchgrp group ファイルは同じ結果になります。実機でも両方の書き方で同じ変更ができることを確認しています。
Qchownを実行するとOperation not permittedと出ます。
A所有者の変更には、基本的にroot(管理者)権限が必要です。一般ユーザーは、自分が持っているファイルであっても他人へ所有者を変更できません。実機でも一般ユーザー権限でこのエラーが再現しています。sudo chown ...のように管理者権限で実行してください。
Qchgrpでも権限エラーになることがありますか?
Aはい。一般ユーザーは「自分が所属しているグループ」にしか変更できません。実機でも、所属しているグループへの変更は成功しますが、所属していないグループへの変更はOperation not permittedで拒否されることを確認しています。groupsコマンドで自分の所属グループを確認してください。
Qディレクトリの中身もまとめて所有者を変えるには?
A-R(再帰)オプションを付けます。chown -R user:group ディレクトリとすると、サブディレクトリの奥深くまで含めて、すべてのファイルの所有者・グループが変更されます。付け忘れると、ディレクトリ自体しか変わらず中身は元のままになります。
Qchownとchmodはどう使い分けますか?
Achownは「そのファイルが誰のものか(所有者・グループ)」を決め、chmodは「所有者・グループ・その他がそれぞれ何をできるか(読み書き実行の権限)」を決めます。役割が異なるため、権限の問題を調べるときはこの2つをセットで確認するのが基本です。

まとめ

  • chown user:groupで所有者とグループを同時変更、片方だけの変更も可能です。
  • chgrpはグループ専用。chown :groupと同じ結果になります。
  • ディレクトリごとの変更には-Rが必要です。
  • 所有者の変更にはroot権限が必要で、一般ユーザーはOperation not permittedになります。
  • グループ変更も、自分が所属しているグループにしかできません

chownchgrpは、chmodとセットで理解しておきたい権限管理の基本コマンドです。「所有者の変更にはroot権限が要る」「グループも所属先にしか変えられない」という2つの制約を知っておけば、Operation not permittedに出会っても慌てずに対処できます。