Ubuntuのchownでファイルの所有者を変更する方法

コマンド

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 と異なります。

基本的な使い方

chownchange owner(所有者を変更する) の略で、ファイルやディレクトリの所有者を変更するコマンドです。coreutils パッケージに含まれており、Ubuntu ではデフォルトで使えます。

手順1:基本構文を確認する

書式はシンプルです:




ubuntu@linuxlab: ~
$ sudo chown [オプション] ユーザー名[:グループ名] ファイル名

chown で所有者を変更するには root 権限(sudo)が必要です。自分が所有しているファイルでも、他のユーザーに移すときは sudo をつけて実行してください。

手順2:ファイルの所有者を変更する

実際に動かしてみます。まず ls -la で所有者を確認し、chown で変更後に再確認します。




ubuntu@linuxlab: ~
$ ls -la /tmp/testfile.txt
-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 に変わっているのが確認できます。

chownの基本的な使い方(Ubuntu 24.04 実測)
chownの基本的な使い方(Ubuntu 24.04 実測)

ls -la の3列目と4列目、最初は読み方がわかりにくいですよね。左から「権限・リンク数・所有者・グループ・サイズ・日時・ファイル名」という順番です。chown で変わるのは3列目(所有者)です。

ユーザーとグループを同時に変更する

コロン(:)を使うと、所有者とグループを1コマンドでまとめて変更できます。これが実務でよく使うパターンです。

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




ubuntu@linuxlab: ~
$ ls -la /tmp/config.conf
-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
chown user:groupの書式(Ubuntu 24.04 実測)
chown user:groupの書式(Ubuntu 24.04 実測)

ディレクトリを再帰的に変更する(-R)

ディレクトリ以下のファイルをまとめて変更したいときは -R(recursive)オプションを使います。プロジェクトフォルダごと別ユーザーに渡すときなど、ファイルが多い場合に1コマンドで済むので便利です。

chown -R の使い方




ubuntu@linuxlab: ~
$ ls -laR /tmp/project/
/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 に変わっています。

chown -Rの再帰的変更(Ubuntu 24.04 実測)
chown -Rの再帰的変更(Ubuntu 24.04 実測)

注意:-R はファイル数が多いと時間がかかる

chown -R は指定したディレクトリ以下のすべてのファイルを処理します。ファイル数が多い場合(数万ファイルなど)は時間がかかることがあります。特に本番環境では対象ディレクトリを確認してから実行してください。

chown はデフォルトでシンボリックリンクを たどって(dereference)リンク先のファイルを変更します。リンク自体の所有者を変えたいときは --no-dereference(短縮形 -h)を使います。




ubuntu@linuxlab: ~
$ ls -la /tmp/original.txt /tmp/link.txt
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」エラー

存在しないユーザー名を指定すると次のエラーが出ます:




ubuntu@linuxlab: ~
$ sudo chown nonexistent_user /tmp/testfile.txt
chown: invalid user: ‘nonexistent_user’

解決策:対象ユーザーが存在するか id ユーザー名 または cat /etc/passwd | grep ユーザー名 で確認してください。

②「Operation not permitted」エラー

sudo をつけずに他ユーザーのファイルを変更しようとするとこのエラーになります。sudo をつけて実行し直してください。

③UID(数値)でも指定できる

ユーザー名が不明なときや削除されたユーザーのファイルを扱うときは、UID(数値)で指定することもできます。




ubuntu@linuxlab: ~
$ sudo chown 1001 /tmp/testfile.txt
$ 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」になります。

実際にコンテナで再現して確認しました:




ubuntu@linuxlab: ~
$ ls -la /home/ubuntu/
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 に変更できました。

SSH .ssh ディレクトリ所有者修正(Ubuntu 24.04 実測)
SSH .ssh ディレクトリ所有者修正(Ubuntu 24.04 実測)

ここだけは順番を間違えると動きません。chown で所有者を直してから、さらに chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys でパーミッションも確認しておくと確実です。

バージョン別動作比較

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

Ubuntu 22.04 vs 24.04 coreutils バージョン比較(実測)
Ubuntu 22.04 vs 24.04 coreutils バージョン比較(実測)

バージョンは chown --version で確認できます。Ubuntu 24.04 では GNU coreutils 9.4、Ubuntu 22.04 では GNU coreutils 8.32 でした。基本的な書式や動作はどちらでも同じです。




ubuntu@linuxlab: ~
$ chown –version
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運用に興味がある方は、こちらの比較記事もあわせてご覧ください。

コメント

タイトルとURLをコピーしました