LinuxやmacOSなどのUnix系オペレーティングシステムにおいて、ファイルやディレクトリの管理はシステム運用の基本です。
Bashなどのシェル環境で作業を行う際、ファイルの「所有権」を適切に設定することは、セキュリティと正常な動作を維持するために欠かせません。
システム上のすべてのファイルには特定の所有ユーザーと所有グループが割り当てられており、これによって読み書きや実行の権限が制御されています。
本記事では、所有者を変更するための標準的なコマンドであるchownの使い方を詳しく解説します。
基本的な構文から、実務で役立つ応用的なオプションまで、具体的な実行例を交えて見ていきましょう。
chownコマンドの基本概念
chownという名称は「change owner」の略称であり、その名の通りファイルやディレクトリの所有者を変更するために使用されます。
Linuxシステムでは、ファイルごとに「誰がそのファイルを所有しているか」という情報が保持されています。
通常、ファイルを作成したユーザーがそのファイルの所有者となりますが、システム管理の過程で別のユーザーに権限を譲渡したい場合があります。
例えば、Webサーバーが生成したファイルを特定の管理ユーザーが操作できるように変更したり、バックアップデータの所有権を整理したりする際に多用されます。
所有者と所有グループの違い
Unix系システムにおける所有権には、「所有ユーザー」と「所有グループ」の2つの階層が存在します。
所有ユーザーは、そのファイルに対して最も強い支配権を持つ特定の個人アカウントを指します。
一方、所有グループは複数のユーザーが所属する集合体であり、グループ単位でのアクセス制限を行うために用いられます。
chownコマンドは、これら両方を一度に変更できる非常に強力なツールです。
chownコマンドの基本的な構文
chownコマンドを使用する際の基本的な書式は、非常にシンプルです。
chown [オプション] [ユーザー][:グループ] ファイル名
ユーザー名とグループ名の間は、一般的にコロン(:)で区切ります。
古いシステムや特定の環境ではドット(.)が使われることもありますが、現代的な環境ではコロンを使用するのが標準的なルールです。
特定のユーザーに所有権を変更する
最も基本的な使い方は、ファイルの所有ユーザーだけを変更する方法です。
例えば、sample.txtというファイルの所有者をadminユーザーに変更する場合は、以下のコマンドを実行します。
# 所有者をadminに変更する
sudo chown admin sample.txt
実行後、ファイルの属性を確認するためにls -lコマンドを使用します。
ls -l sample.txt
-rw-r--r-- 1 admin user 0 May 22 10:00 sample.txt
出力結果の3番目のフィールドがadminに変わっていれば、所有者の変更は成功しています。
なお、自分以外のユーザーに所有権を変更する場合や、システム領域のファイルを操作する場合は、通常sudoによる管理者権限が必要です。
ユーザーとグループを同時に変更する
chownコマンドの利点は、ユーザーとグループを1つのコマンドで同時に変更できる点にあります。
ユーザー名の後にコロンを付け、続けてグループ名を記述します。
# 所有者をwww-dataユーザー、グループをwww-dataグループに変更する
sudo chown www-data:www-data config.php
この記述方法は、Webサーバーのコンテンツディレクトリなどで権限を一括設定する際に非常に効率的です。
グループのみを変更する
所有ユーザーはそのままに、所属グループだけを変更したい場合もchownを使用できます。
この場合は、ユーザー名を省略してコロンから書き始めます。
# 所有グループをdevelopersに変更する
sudo chown :developers project_file.sh
グループのみを変更する専用のコマンドとしてchgrpも存在しますが、chown一つで代用できるため、こちらの方法を覚えておくと便利です。
ディレクトリに対する再帰的な変更
単一のファイルではなく、ディレクトリとその中に含まれるすべてのファイル・サブディレクトリの所有権を一度に変更したいケースは多いでしょう。
その場合には、「-R」オプション(Recursive)を使用します。
# /var/www/html配下のすべての所有者をwww-dataに変更する
sudo chown -R www-data:www-data /var/www/html
このコマンドを実行すると、指定したディレクトリ以下の全階層に対して再帰的に所有権が適用されます。
大規模なディレクトリ構造に対して実行する際は、誤ったユーザーを設定しないよう十分な注意が必要です。
間違った設定を行うと、システムサービスがファイルにアクセスできなくなり、アプリケーションが停止する恐れがあります。
chownコマンドの主要なオプション一覧
chownには、操作をより便利にするためのオプションがいくつか用意されています。
よく使われるオプションを以下の表にまとめました。
| オプション | 説明 |
|---|---|
-R | ディレクトリとその中身を再帰的に変更します。 |
-v (verbose) | 実行した結果を詳細に表示します(変更の有無に関わらず報告)。 |
-c (changes) | 実際に所有者が変更された場合のみ結果を表示します。 |
-h | シンボリックリンク自体の所有者を変更します(リンク先は変更しない)。 |
--reference=FILE | 指定した参照ファイルと同じ所有者・グループを適用します。 |
実行結果を確認しながら変更する
多数のファイルを変更する際、どのファイルが処理されたのかをリアルタイムで確認したい場合は-vオプションが有効です。
sudo chown -v user:group data.csv
changed ownership of 'data.csv' from old_user:old_group to user:group
このように、変更前後の状態がコンソールに表示されるため、スクリプトのデバッグや手動操作の安心感につながります。
応用的な使い方:他のファイルを参考にする
特定のユーザー名を直接指定する代わりに、既存のファイルの所有権をコピーして別のファイルに適用することができます。
これには--referenceオプションを使用します。
# file_bの所有権をfile_aと同じにする
sudo chown --reference=file_a file_b
この方法は、複雑なグループ設定がされている環境において、手動でユーザー名やグループ名を入力する手間とミスを減らすのに役立ちます。
chownを使用する際の注意点
chownコマンドは非常に強力ですが、扱いには慎重さが求められます。
まず、一般ユーザーは自分の所有しているファイルであっても、他のユーザーに所有権を譲渡することはできません。
これは、クォータ制限の回避や、悪意のあるユーザーが機密ファイルを他人のせいにすることを防ぐためのセキュリティ制限です。
したがって、所有者の変更操作は基本的にルート権限(sudo)を伴うものであると理解しておきましょう。
シンボリックリンクの取り扱い
シンボリックリンクに対してchownを実行する場合、デフォルトでは「リンク先」のファイルの所有者が変更されます。
もしリンク自体(ショートカットそのもの)の所有者を変更したい場合は、-hオプションを忘れないようにしてください。
# シンボリックリンク自体の所有者を変更する
sudo chown -h my_user my_link
この違いを意識していないと、意図しない実体のファイルの権限を書き換えてしまうリスクがあります。
パスの指定ミスに注意
特に-Rオプションを使用する際、パスの最後にスラッシュを付けるかどうか、あるいはワイルドカード(*)をどう使うかによって挙動が変わることがあります。
ルートディレクトリ付近で誤ったコマンドを実行すると、OS全体の所有権が書き換わり、システムが起動しなくなる致命的な障害を招く可能性があります。
重要なディレクトリで操作を行う前には、ls -lで対象をしっかりと確認する習慣をつけましょう。
まとめ
Bashにおけるchownコマンドは、システムのファイル管理において避けては通れない非常に重要なコマンドです。
ユーザー名のみの変更、グループ名を含めた一括変更、そして-Rオプションによる再帰的な適用など、用途に応じた使い分けをマスターしましょう。
正しい所有権の設定は、適切なアクセス制御を実現し、システムのセキュリティレベルを高めるための第一歩となります。
操作の際は常に管理者権限が必要であることを意識し、特に再帰的な処理を行う前には対象パスを再確認するよう心がけてください。
今回ご紹介したオプションや構文を活用し、より効率的で安全なサーバー管理・システム運用を目指しましょう。
