【Ubuntu/Linux】ファイル所有権を自在に操る:実務直結の `chown` コマンド実践ガイド

概要

LinuxおよびUbuntuシステムを安全に運用するうえで、ファイルやディレクトリの所有権設計はアクセス制御の根幹を担います。本稿では、日常的なサーバー管理で不可欠となる chown コマンドを取り上げ、基本構文からユーザー・グループの一括切り替え、再帰処理(-R)による配下階層の更新、さらには参照ファイルをベースにした所有権の複製テクニックまで、現場ですぐに役立つ実践的なパターンを体系的に解説します。

1. ファイル所有者を変更する基本手順

操作の流れを確認するため、まずは検証用の空ファイルを用意します。touch test_file.txt && ls -l test_file.txt を実行し、生成直後のファイル詳細と現行の所有ユーザー(root)を確認しておきましょう。

touch test_file.txt && ls -l test_file.txt

ファイルやディレクトリの所有ユーザーおよびグループを変更する際に用いるのが chown コマンドです。
対象ファイルの所有者を切り替えるには、管理者権限を付与して sudo chown nobody test_file.txt を実行します。
⚙️ [押さえておきたい主要オプション]

-R : 指定したディレクトリ内のすべてのサブディレクトリやファイルに対し、再帰的に変更を適用します。
-v : 変更処理の対象となった各ファイルの状態を詳細に標準出力へ表示します。
-c : 実際に所有権の更新が行われたファイルのみを絞り込んでレポートします。
-f : 権限不足などに伴う警告やエラーメッセージの表示を抑制します。
--reference : 既存の基準ファイルから所有者とグループの設定を読み取り、対象ファイルへそのまま複製します。

sudo chown nobody test_file.txt

設定が正しく反映されたかを検証するため、再度 ls -l test_file.txt を実行します。所有者欄が root から nobody へ書き換わっていることが確認できます。

ls -l test_file.txt

2. 所有ユーザーと所属グループを同時に更新する

Webサーバーの環境構築などでは、ユーザーとグループをセットで切り替えるケースが頻出します。動作確認用に touch web_config.conf && ls -l web_config.conf を実行して設定ファイルを作成し、現在の所有権(root)をチェックします。

touch web_config.conf && ls -l web_config.conf

所有者と所有グループを1ステップで同時に更新したい場合は、sudo chown www-data:www-data web_config.conf を実行します。
このようにコロン(:)で「ユーザー:グループ」を連結指定することで、デーモンプロセスやWebサービス(Nginx/Apacheなど)に適した権限設定を無駄なく完了できます。

sudo chown www-data:www-data web_config.conf

実行結果の確認として ls -l web_config.conf を叩いてみましょう。
所有ユーザー・グループの双方が root から www-data へ正常に移行していることが分かります。

ls -l web_config.conf

3. ディレクトリ階層まるごと再帰的に反映する(-R オプション)

深層ディレクトリを含むプロジェクト全体の所有権を一括で整えたい場面では、再帰オプションが威力を発揮します。テスト環境の構築として、mkdir -p /tmp/project_dir/sub && touch /tmp/project_dir/file1.txt /tmp/project_dir/sub/file2.txt を実行し、ネスト構造を持ったディレクトリとサンプルファイルを生成します。

mkdir -p /tmp/project_dir/sub && touch /tmp/project_dir/file1.txt /tmp/project_dir/sub/file2.txt

バッチ変更を行う前に、現在の権限ツリーを把握するため ls -lR /tmp/project_dir を実行します。
親ディレクトリから内部のサブファイルに至るまで、すべて初期状態の root アカウントで保持されている様子が確認できます。

ls -lR /tmp/project_dir

親ディレクトリ配下に存在するすべてのコンテンツへ同一の所有権を伝播させるため、管理者権限で sudo chown -R nobody:nogroup /tmp/project_dir を実行します。
-R フラグを付与することで、ツリー構造を深さ優先で走査しながら、末端のファイルまですべてターゲットの所有属性へ書き換えます。

sudo chown -R nobody:nogroup /tmp/project_dir

階層全体の変更状況をチェックするため、改めて ls -lR /tmp/project_dir でツリー一覧を出力します。
直下の file1.txt のみならず、サブディレクトリ sub とその配下にある file2.txt まで漏れなく nobody:nogroup へ切り替わっていることが実証されます。

ls -lR /tmp/project_dir

4. 既存ファイルを雛形にして所有権をコピーする(–reference)

アカウント名やグループ名を手作業で入力せず、既存の別ファイルとまったく同じ権限構成を素早く適用したい場合は参照オプションが便利です。まずは touch source_file.txt target_file.txt を実行し、モデルとなる参照ファイルと変更対象ファイルの2つを生成します。

touch source_file.txt target_file.txt

ひな形となるファイルへ権限を設定するため、sudo chown daemon:daemon source_file.txt を実行しておきます。

sudo chown daemon:daemon source_file.txt

両ファイルのステータスを比較するため ls -l source_file.txt target_file.txt を実行します。
参照元の source_file.txt は daemon:daemon、適用先の target_file.txt は root:root という異なる権限状態にあることが確認できます。

ls -l source_file.txt target_file.txt

参照元の権限属性をターゲットファイルへそのまま写し取るため、sudo chown --reference=source_file.txt target_file.txt を実行します。
--reference 引数を用いると、ユーザーやグループの正確な名称を調べる手間が省け、入力ミスによる設定事故も未然に防ぐことができます。

sudo chown –reference=source_file.txt target_file.txt

最後に ls -l source_file.txt target_file.txt を実行して反映結果を確かめます。
target_file.txt の所有者・グループが、参照元と完全に一致する daemon:daemon へ同期されたことが確認できます。

ls -l source_file.txt target_file.txt

Linux環境におけるファイル所有権の仕組みと、chown を用いた効率的な権限管理の基本テクニックを整理しました。
適切なユーザー・グループ設計を徹底し、セキュリティと可用性を両立させた堅牢なシステム運用にぜひ役立ててください。