Ubuntuでファイルやディレクトリの所有者を変えたいときは、chownコマンドを使います。たとえばWebサーバーの設定ファイルを特定ユーザーに渡したり、SSHの鍵ファイルの権限を修正したりするときに欠かせないコマンドです。
本記事では実際に Ubuntu 24.04 LTS の Docker公式イメージで chown を動かし、その実行結果をそのまま掲載しています。「なんとなく使えてはいるけど、オプションの意味がよくわからない」という方にも手順を丁寧に説明します。
この記事のポイント
chown ユーザー名 ファイル名で所有者を変更できる(root権限が必要)chown ユーザー名:グループ名と書くと所有者とグループを同時に変更できる-Rオプションでディレクトリ以下を再帰的にまとめて変更できる- Ubuntu 24.04 は coreutils 9.4、Ubuntu 22.04 は coreutils 8.32(基本構文はどちらも同じ)
- VPSでSSHに接続できないとき、.ssh ディレクトリの所有者を
chown -Rで修正するケースが多い
目次
前提環境
本記事のコマンドは以下の環境で実際に実行・確認しています。
| 項目 | 内容 |
|---|---|
| OS | Ubuntu 24.04 LTS(Noble Numbat) |
| 実行環境 | Docker公式イメージ ubuntu:24.04 |
| coreutils バージョン | 9.4-3ubuntu6.2 |
| chown バージョン | GNU coreutils 9.4 |
| 検証日 | 2026-06-13 |
注意
本記事のコマンドは Ubuntu 24.04 LTS で検証しています。Ubuntu 22.04 でも基本構文は同じですが、coreutils のバージョンが 8.32 と異なります。
基本的な使い方
chown は change owner(所有者を変更する) の略で、ファイルやディレクトリの所有者を変更するコマンドです。coreutils パッケージに含まれており、Ubuntu ではデフォルトで使えます。
手順1:基本構文を確認する
書式はシンプルです:
chown で所有者を変更するには root 権限(sudo)が必要です。自分が所有しているファイルでも、他のユーザーに移すときは sudo をつけて実行してください。
手順2:ファイルの所有者を変更する
実際に動かしてみます。まず ls -la で所有者を確認し、chown で変更後に再確認します。
-rw-r–r– 1 root root 12 Jun 13 05:28 /tmp/testfile.txt
$ sudo chown alice /tmp/testfile.txt
$ ls -la /tmp/testfile.txt
-rw-r–r– 1 alice root 12 Jun 13 05:28 /tmp/testfile.txt
ls -la の出力で、3列目が所有者(ユーザー)、4列目がグループです。chown alice を実行すると root → alice に変わっているのが確認できます。

ユーザーとグループを同時に変更する
コロン(:)を使うと、所有者とグループを1コマンドでまとめて変更できます。これが実務でよく使うパターンです。
所有者とグループを同時に変更する
-rw-r–r– 1 root root 0 Jun 13 05:28 /tmp/config.conf
$ sudo chown alice:devs /tmp/config.conf
$ ls -la /tmp/config.conf
-rw-r–r– 1 alice devs 0 Jun 13 05:28 /tmp/config.conf
$ sudo chown :bob /tmp/config.conf
$ ls -la /tmp/config.conf
-rw-r–r– 1 alice bob 0 Jun 13 05:28 /tmp/config.conf
書式のバリエーションをまとめます:
| 書式 | 変更対象 | 例 |
|---|---|---|
chown ユーザー |
所有者のみ | chown alice file.txt |
chown ユーザー:グループ |
所有者とグループ | chown alice:devs file.txt |
chown :グループ |
グループのみ | chown :devs file.txt |
chown UID |
所有者のみ(数値UID) | chown 1001 file.txt |

ディレクトリを再帰的に変更する(-R)
ディレクトリ以下のファイルをまとめて変更したいときは -R(recursive)オプションを使います。プロジェクトフォルダごと別ユーザーに渡すときなど、ファイルが多い場合に1コマンドで済むので便利です。
chown -R の使い方
/tmp/project/:
drwxr-xr-x 4 root root 4096 Jun 13 05:28 .
-rw-r–r– 1 root root 0 Jun 13 05:28 README.md
drwxr-xr-x 2 root root 4096 Jun 13 05:28 docs
drwxr-xr-x 2 root root 4096 Jun 13 05:28 src
$ sudo chown -R alice /tmp/project/
$ ls -laR /tmp/project/
/tmp/project/:
drwxr-xr-x 4 alice root 4096 Jun 13 05:28 .
-rw-r–r– 1 alice root 0 Jun 13 05:28 README.md
drwxr-xr-x 2 alice root 4096 Jun 13 05:28 docs
drwxr-xr-x 2 alice root 4096 Jun 13 05:28 src
実行後、ディレクトリ・サブディレクトリ・ファイルすべての所有者が root → alice に変わっています。

注意:-R はファイル数が多いと時間がかかる
chown -R は指定したディレクトリ以下のすべてのファイルを処理します。ファイル数が多い場合(数万ファイルなど)は時間がかかることがあります。特に本番環境では対象ディレクトリを確認してから実行してください。
シンボリックリンクの扱い
chown はデフォルトでシンボリックリンクを たどって(dereference)リンク先のファイルを変更します。リンク自体の所有者を変えたいときは --no-dereference(短縮形 -h)を使います。
lrwxrwxrwx 1 root root 17 Jun 13 05:34 /tmp/link.txt -> /tmp/original.txt
-rw-r–r– 1 alice root 0 Jun 13 05:34 /tmp/original.txt
$ sudo chown bob /tmp/link.txt # リンク先(original.txt)が変わる
lrwxrwxrwx 1 root root 17 Jun 13 05:34 /tmp/link.txt -> /tmp/original.txt
-rw-r–r– 1 bob root 0 Jun 13 05:34 /tmp/original.txt
$ sudo chown –no-dereference bob /tmp/link.txt # リンク自体が変わる
lrwxrwxrwx 1 bob root 17 Jun 13 05:34 /tmp/link.txt -> /tmp/original.txt
-rw-r–r– 1 alice root 0 Jun 13 05:34 /tmp/original.txt
正直、この挙動は最初に見ると少し驚きます。chown bob /tmp/link.txt を実行したのに link.txt の所有者は root のまま——これはリンク先の original.txt の所有者が変わっているためです。
よくあるエラーと解決策
①「invalid user」エラー
存在しないユーザー名を指定すると次のエラーが出ます:
chown: invalid user: ‘nonexistent_user’
解決策:対象ユーザーが存在するか id ユーザー名 または cat /etc/passwd | grep ユーザー名 で確認してください。
②「Operation not permitted」エラー
sudo をつけずに他ユーザーのファイルを変更しようとするとこのエラーになります。sudo をつけて実行し直してください。
③UID(数値)でも指定できる
ユーザー名が不明なときや削除されたユーザーのファイルを扱うときは、UID(数値)で指定することもできます。
$ ls -la /tmp/testfile.txt
-rw-r–r– 1 devuser root 0 Jun 13 05:35 /tmp/testfile.txt
# UID 1001 はユーザー名に変換されて表示される
実践例:SSH接続できないときの .ssh 権限修正
VPSの初期設定でよく起きるトラブルとして、.ssh ディレクトリの所有者が root のままになっているケースがあります。SSHデーモン(sshd)は authorized_keys の所有者が接続ユーザーでないと鍵を読み取らないため、この状態では SSH 接続が「Permission denied」になります。
実際にコンテナで再現して確認しました:
drwxr-xr-x 2 root root 4096 Jun 13 05:34 .ssh
$ ls -la /home/ubuntu/.ssh/
drwxr-xr-x 2 root root 4096 Jun 13 05:34 .
-rw-r–r– 1 root root 0 Jun 13 05:34 authorized_keys
$ sudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh
$ ls -la /home/ubuntu/.ssh/
drwxr-xr-x 2 ubuntu ubuntu 4096 Jun 13 05:34 .
-rw-r–r– 1 ubuntu ubuntu 0 Jun 13 05:34 authorized_keys
chown -R ubuntu:ubuntu /home/ubuntu/.ssh で .ssh ディレクトリと authorized_keys の所有者・グループをまとめて ubuntu に変更できました。

バージョン別動作比較
Ubuntu 22.04 と 24.04 でそれぞれ実際に確認した coreutils(chown が属するパッケージ)のバージョンです:

バージョンは chown --version で確認できます。Ubuntu 24.04 では GNU coreutils 9.4、Ubuntu 22.04 では GNU coreutils 8.32 でした。基本的な書式や動作はどちらでも同じです。
chown (GNU coreutils) 9.4
Copyright (C) 2023 Free Software Foundation, Inc.
まとめ
chown コマンドの主要な使い方を Ubuntu 24.04 で実際に動かして確認しました。
sudo chown ユーザー名 ファイル名── 所有者を変更する基本形sudo chown ユーザー名:グループ名 ファイル名── 所有者とグループをまとめて変更sudo chown :グループ名 ファイル名── グループだけを変更sudo chown -R ユーザー名 ディレクトリ── 再帰的にすべて変更sudo chown --no-dereference ユーザー名 リンク── シンボリックリンク自体を変更
VPSでサーバーを運用していると、chown -R ubuntu:ubuntu /home/ubuntu/.ssh のような権限修正は頻繁に必要になります。ファイルの所有者と chmod によるパーミッション設定はセットで理解しておくと、トラブル解決が格段に早くなります。
本格的なVPS運用に興味がある方は、こちらの比較記事もあわせてご覧ください。


コメント