はじめに

こんにちは!今回はchownコマンドについて解説します。

chownはファイルやディレクトリの所有者(owner)とグループを変更するコマンドです。“change owner"の略ですね。

ファイルの所有者が違うために編集できなかったり、特定のグループに属さないとアクセスできないファイルがあったりしますが、そんな時にchownが活躍します。サーバー運用やシステム管理では必ず出てくるコマンドですよ。


chownコマンドとは

chownは、ファイルやディレクトリの所有者およびグループを変更する外部コマンドです。

Linuxではすべてのファイルに所有者とグループが設定されており、アクセス権限や操作権限がこれに基づいて制御されます。ファイルをコピーしたり、別のユーザーから受け取ったりすると、所有者が異なることがあります。そういった時にchownで所有者を変更するわけですね。

chmod(権限変更)と一緒に覚えておくと、ファイルアクセスの全体像が見えてきます。


基本構文

1
chown [オプション] 所有者[:グループ] ファイル/ディレクトリ

所有者の指定方法:

  • 所有者のみ変更chown newowner file.txt
  • 所有者とグループchown newowner:newgroup file.txt
  • グループのみ変更chown :newgroup file.txt

主なオプション

オプション 説明
-R ディレクトリと中身を再帰的に変更
-v 詳細表示(変更内容を表示)
-c 変更があった場合のみ表示
-f エラーを無視(force)
--reference=FILE 別のファイルの所有者・グループを参考にして設定

ユーザーIDとグループID

Linuxでは内部的にユーザーとグループが数値IDで管理されています:

1
2
3
4
5
6
7
8
# 所有者をUID 1000に変更
chown 1000 file.txt

# グループをGID 1001に変更
chown :1001 file.txt

# ユーザー名の場合(自動的にUIDに変換される)
chown alice file.txt

通常はユーザー名・グループ名で指定するほうが分かりやすいです。


使用例

例1: ファイルの所有者を変更する

1
chown alice file.txt

実行結果:

1
(成功時は何も表示されない)

file.txtの所有者をaliceに変更します。実行するにはroot権限またはファイルの現在の所有者である必要があります。


例2: 所有者とグループを同時に変更する

1
chown alice:developers file.txt

実行結果:

1
(成功時は何も表示されない)

file.txtの所有者をaliceに、グループをdevelopersに変更します。コロン(:)で所有者とグループを区切ります。


例3: グループのみを変更する

1
chown :staff report.txt

実行結果:

1
(成功時は何も表示されない)

report.txtのグループをstaffに変更します。所有者は変わりません。


例4: ディレクトリ配下のすべてのファイルを変更

1
chown -R alice:developers myproject/

実行結果:

1
(成功時は何も表示されない)

myprojectディレクトリ配下のすべてのファイル・ディレクトリの所有者とグループを一括変更します。-R(再帰)オプションでサブディレクトリも処理されます。


例5: 詳細表示付きで確認しながら変更

1
chown -v alice file1.txt file2.txt file3.txt

実行結果:

1
2
3
changed ownership of 'file1.txt' from root to alice
changed ownership of 'file2.txt' from root to alice
changed ownership of 'file3.txt' from root to alice

-vオプションで変更内容を表示します。複数ファイルを変更する時に、どのファイルが変わったか確認できます。


例6: 変更があった場合のみ表示

1
chown -c alice file*.txt

実行結果:

1
2
changed ownership of 'file1.txt' from root to alice
(既に alice が所有者のファイルは表示されない)

-cオプションで実際に変更があったファイルのみ表示します。-vは全ファイルを表示するので、変更があったものだけ知りたい時に便利です。


例7: 別ファイルの所有者を参考にして設定

1
chown --reference=template.txt newfile.txt

実行結果:

1
(成功時は何も表示されない)

template.txtと同じ所有者・グループをnewfile.txtに適用します。テンプレートファイルに合わせて設定したい時に便利です。


例8: Webサーバー用ファイルのオーナー設定

1
chown -R www-data:www-data /var/www/myapp

実行結果:

1
(成功時は何も表示されない)

Webサーバー(www-dataユーザー)がアクセス可能なように、ディレクトリ配下をすべてwww-dataで統一します。実務ではよく使う設定ですね。


例9: ユーザーID(UID)で指定する

1
chown 1000:1001 file.txt

実行結果:

1
(成功時は何も表示されない)

ユーザー名ではなく数値IDで所有者を指定します。スクリプト内や、ユーザーが存在しないシステムでも使えます。


例10: エラーを無視して変更を続ける

1
chown -f -R newowner:newgroup big_project/

実行結果:

1
(エラーが出ても処理を続行)

-f(force)オプションでエラーを無視して処理を続行します。権限がないファイルがあっても止まらずに続けられます。


Tips・注意点

chownはroot権限が必要

1
2
3
4
5
6
# ✗ エラー:通常ユーザーは実行できない
$ chown alice file.txt
chown: changing ownership of 'file.txt': Operation not permitted

# ✓ 正しい:sudo で実行
$ sudo chown alice file.txt

chownrootユーザーか、ファイルの現在の所有者のみ実行可能です。通常はsudoで実行します。


所有者を変更するとセキュリティに影響

1
2
3
4
5
# ✗ 危険:意図しないユーザーに所有者が変わる
chown attacker secretdata.txt

# ✓ 安全:誰に変更するか明確にする
chown alice report.txt

所有者を変更すると、そのユーザーがファイルを削除・編集できるようになります。セキュリティに関わるので注意が必要です。


chownとchmodの使い分け

1
2
3
4
5
6
7
8
9
# chown:所有者・グループを変更
chown alice file.txt

# chmod:所有者・グループ・その他の権限を変更
chmod 644 file.txt

# 組み合わせ:所有者を変えて、権限も設定
sudo chown alice:developers file.txt
sudo chmod 644 file.txt

chownは「誰が所有しているか」を変え、chmodは「何ができるか」を変えます。両者は独立していますが、実務では組み合わせて使うことが多いです。


グループの確認方法

1
2
3
4
5
6
7
8
# システム上の全グループを確認
cat /etc/group | grep developers

# ユーザーが属するグループを確認
groups alice

# ファイルの所有者・グループを確認
ls -l file.txt

存在しないグループを指定するとエラーになるので、事前に確認しておきましょう。


実践的な使い方

Gitリポジトリのオーナー変更

1
sudo chown -R alice:developers /home/alice/myproject

新しいメンバーがプロジェクトに加わった時、ディレクトリの所有者をそのユーザーに変更します。チーム開発での権限管理に便利です。


バックアップファイルのオーナー設定

1
2
3
4
5
# バックアップを取得
sudo cp -r /var/www /backup/www_backup

# オーナーを管理者ユーザーに変更
sudo chown -R backup:backup /backup/www_backup

バックアップは専用のユーザーやグループで管理することでセキュリティを高めます。


新しいシステムユーザーで運用するファイル

1
2
3
4
# アプリケーション専用ユーザーで運用
sudo useradd myapp
sudo chown -R myapp:myapp /opt/myapp
sudo chmod 750 /opt/myapp

アプリケーションを実行するユーザーを専用に作成し、そのユーザーにファイルを所有させることで、セキュリティを高められます。


Webサーバーのテンプレートとプロジェクトを同じ設定に

1
2
3
# テンプレートと同じ所有者・グループに設定
sudo chown --reference=/var/www/template /var/www/newproject
sudo chmod --reference=/var/www/template /var/www/newproject

--referenceで既存設定を参考にすることで、手動設定ミスを防げます。


まとめ

chownコマンドのポイント:

  • 所有者を変更chown newowner file.txt
  • 所有者とグループchown newowner:newgroup file.txt
  • グループのみchown :newgroup file.txt
  • -R:ディレクトリを再帰的に変更
  • root権限が必須:通常はsudoで実行
  • -v:変更内容を表示(確認用)
  • よく使う組み合わせ:sudo chown -R alice:developers, sudo chown www-data:www-data

ファイルアクセス制御の要となるコマンドです。chmodと組み合わせることで、Linuxのセキュリティ設定がしっかり理解できるようになりますよ!