公開:2026.05.10(日) 20:19
フォルダへの権限付与方法
「Linux コマンド:フォルダ移動」でフォルダを移動させようとしたが権限不足のようでエラーが発生した。
「Linux コマンド:フォルダ所有権の確認方法」で確認したところ、移動元フォルダの所有権が root になっていたので、これをログインユーザーに変更する。
実行結果:
"ls -l" コマンドで所有者を確認
正しく所有者が変更できた。
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 という数字になってしまう?
1000 と表示される理由
所有権がrootにならなかった原因
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 のファイルとなってしまう。
しかし、その数値を割り当てられたユーザーがシステム内に存在しない場合、ユーザー名に変換ができず数値そのまま表示してしまう。
ホストで作成したファイルを、Dockerコンテナ内にマウントした際によくこの現象が起きるらしい。
・ ホスト側:UID 1000のユーザー(一般的な初期ユーザー)でファイルを作る
・ コンテナ側:UID 1000に対応するユーザーが登録されていない(rootしかいない等)
そのため、コンテナ内からは所有者が 不明なID:1000 のファイルとなってしまう。
所有権がrootにならなかった原因
Linuxの仕様で環境変数 \$USER は自動的に更新されないことがある?
確かに echo \$USER を実行しても何も表示されない。
このため chown -$ $USER:$USER を実行しても所有権は変更されず 1000 のままになってしまう。
なので 直接ユーザー名を指定してコマンド実行すればよい。
確かに echo \$USER を実行しても何も表示されない。
root@3d8258bc2177:/var/www/prophp_sample# echo $USER
root@3d8258bc2177:/var/www/prophp_sample#
なので 直接ユーザー名を指定してコマンド実行すればよい。
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 件のコメント:
コメントを投稿