Linux コマンド:フォルダへの権限付与方法

更新:2026.05.16(土) 18:27
公開:2026.05.10(日) 20:19

フォルダへの権限付与方法

Linux コマンド:フォルダ移動」でフォルダを移動させようとしたが権限不足のようでエラーが発生した。
mv: cannot move '/home/xxx/docker/php/www/html/prophp_sample' to '/home/xxx/docker/php/prophp_sample': Permission denied

Linux コマンド:フォルダ所有権の確認方法」で確認したところ、移動元フォルダの所有権が root になっていたので、これをログインユーザーに変更する。
sudo chown -R \$USER:$USER 対象のパス

実行結果:
xxxxxxxx@xxxx:~/docker/php/www/html$ sudo chown -R $USER:$USER ~/docker/php/www/html/prophp_sample
[sudo] password for xxxxxxxx:

"ls -l" コマンドで所有者を確認
xxxxxxxx@xxxx:~/docker/php/www/html$ ls -l
total 28
-rw-r--r-- 1 root     root        56 May  2 00:11 composer.json
-rw-r--r-- 1 root     root     11615 May  2 00:11 composer.lock
-rw-r--r-- 1 xxxxxxxx xxxxxxxx    18 May  1 23:13 phpinfo.php
drwxr-xr-x 5 xxxxxxxx xxxxxxxx  4096 May  2 00:37 prophp_sample
drwxr-xr-x 5 root     root      4096 May  2 00:11 vendor

正しく所有者が変更できた。

所有権変更ができない場合

(2026.05.16 追記)
WindowsよりWSLのフォルダを作成(この親フォルダははDockerコンテナにマウントしている)、
すると、このフォルダは一般ユーザーで作成されたことになり、Dockerコンテナからは書き込みできない。

Dockerコンテナのbashに接続し所有権を変更しようとしたが 所有者が 1000 という数字になってしまう?
root@3d8258bc2177:/var/www/prophp_sample# chown -R $USER:$USER /var/www/prophp_sample/cache
root@3d8258bc2177:/var/www/prophp_sample# ls -l
total 48
drwxr-xr-x 2 1000 1000  4096 May 15 22:28 cache
drwxr-xr-x 3 1000 1000  4096 May  1 15:37 cakephp
-rw-r--r-- 1 root root    56 May 14 16:21 composer.json
-rw-r--r-- 1 root root 11753 May 14 16:18 composer.lock
-rw-r--r-- 1 1000 1000  5046 Dec 31  2011 prophp.sql
-rw-r--r-- 1 1000 1000    25 May  1 15:37 prophp.sql:Zone.Identifier
drwxr-xr-x 2 1000 1000  4096 May 15 23:07 templates
drwxr-xr-x 5 root root  4096 May 14 16:21 vendor
drwxr-xr-x 6 1000 1000  4096 May 11 13:07 www

1000 と表示される理由
Linuxは内部的に、ユーザーやグループを 名前 ではなく 数値(ID) で管理している。
しかし、その数値を割り当てられたユーザーがシステム内に存在しない場合、ユーザー名に変換ができず数値そのまま表示してしまう。

ホストで作成したファイルを、Dockerコンテナ内にマウントした際によくこの現象が起きるらしい。
・ ホスト側:UID 1000のユーザー(一般的な初期ユーザー)でファイルを作る
・ コンテナ側:UID 1000に対応するユーザーが登録されていない(rootしかいない等)
そのため、コンテナ内からは所有者が 不明なID:1000 のファイルとなってしまう。

所有権がrootにならなかった原因
Linuxの仕様で環境変数 \$USER は自動的に更新されないことがある?
確かに echo \$USER を実行しても何も表示されない。
root@3d8258bc2177:/var/www/prophp_sample# echo $USER

root@3d8258bc2177:/var/www/prophp_sample#
このため chown -$ $USER:$USER を実行しても所有権は変更されず 1000 のままになってしまう。
なので 直接ユーザー名を指定してコマンド実行すればよい。
root@3d8258bc2177:/var/www/prophp_sample# chown -R root:root /var/www/prophp_sample/cache
root@3d8258bc2177:/var/www/prophp_sample# ls -l
total 48
drwxr-xr-x 2 root root  4096 May 15 22:28 cache
drwxr-xr-x 3 1000 1000  4096 May  1 15:37 cakephp
-rw-r--r-- 1 root root    56 May 14 16:21 composer.json
-rw-r--r-- 1 root root 11753 May 14 16:18 composer.lock
-rw-r--r-- 1 1000 1000  5046 Dec 31  2011 prophp.sql
-rw-r--r-- 1 1000 1000    25 May  1 15:37 prophp.sql:Zone.Identifier
drwxr-xr-x 2 1000 1000  4096 May 15 23:07 templates
drwxr-xr-x 5 root root  4096 May 14 16:21 vendor
drwxr-xr-x 6 1000 1000  4096 May 11 13:07 www


"Linuxコマンド"

0 件のコメント:

その他の記事