このツールについて
この chmod 計算機は、655、755、644 のような Unix/Linux の numeric permission を権限グリッドで確認するためのツールです。owner、group、others が read、write、execute のどれを持っているかを視覚的に確認できます。
このツールはブラウザ内だけで動作します。入力値をサーバーへ送信せず、実際に chmod を実行することもありません。
使い方
- owner、group、others の各桁を入力します。
rw-r-xr-xのような権限文字列(rwx 表記)を確認します。- Permission Grid で ON になっている権限を確認します。
- グリッドのセルをクリックして権限を切り替えることもできます。
644、755、600、700、664、775、777のプリセットを必要に応じて使います。- 実際のファイルやディレクトリに適用する前に warning を確認します。
このページが受け付けるのは 000 から 777 までの3桁 numeric mode だけです。1777 や 2775 のような4桁の mode は入力対象外です。
chmod の 4, 2, 1 はなぜ使われるのか
chmod の各桁は8進数です。つまり1桁で 0 から 7 までを表します。各桁は3つの権限ビットから作られます。
Read = 4
Write = 2
Execute = 1
これらは2の累乗です。ON になっている値を足すと、その role の1桁になります。
7 = 4 + 2 + 1 = read + write + execute
6 = 4 + 2 + 0 = read + write
5 = 4 + 0 + 1 = read + execute
4 = 4 + 0 + 0 = read only
0 = 0 + 0 + 0 = no permissions
そのため 755 は、owner が 7、group が 5、others が 5 という3つの8進数の桁として読めます。
chmod 755 の意味
chmod 755 は次の意味です。
Owner = 7 = read + write + execute
Group = 5 = read + execute
Others = 5 = read + execute
権限文字列(rwx 表記)は次のようになります。
rwxr-xr-x
ディレクトリや実行ファイルでよく使われます。owner は変更でき、group と others は読み取りとディレクトリ移動または実行ができます。
chmod 755 と 644 の違い
755 には owner、group、others の execute 権限が含まれます。ディレクトリでは execute 権限が「そのディレクトリをたどれるか」に関係するため、ディレクトリでよく使われます。
通常のファイルでは 644 がよく使われます。
rw-r--r--
owner は読み書きできます。group と others は読み取りだけです。通常のテキストファイル、設定ファイル、Web アセットなど、実行する必要がないファイルでは 755 より 644 が適していることが多いです。
chmod 664 の意味
chmod 664 は次の意味です。
Owner = read + write
Group = read + write
Others = read only
権限文字列(rwx 表記)は次のようになります。
rw-rw-r--
同じ Unix group のユーザーが編集するファイルに使いやすい設定です。world-writable にする設定ではありません。others は読み取りできますが、変更はできません。
ファイルの owner と group を確認する
権限を変える前に、現在の owner、group、mode を確認します。
ls -l app.log
例:
-rw-r--r-- 1 appuser appgroup 1234 May 6 app.log
次のように読みます。
-rw-r--r-- permission
appuser owner
appgroup group
app.log file name
ディレクトリを見るときは次のようにします。
ls -ld logs
ディレクトリの execute 権限は、そのディレクトリをたどれるかどうかに関係します。
自分の username、uid、gid を確認する
現在のユーザー名を確認します。
whoami
現在の user ID、primary group ID、所属グループを確認します。
id
例:
uid=1001(deploy) gid=1001(deploy) groups=1001(deploy),33(www-data)
各項目の意味は次のとおりです。
uid = user ID
gid = primary group ID
groups = groups the current user belongs to
グループ名だけを見たい場合は次を使います。
groups
または:
id -nG
group に誰がいるか確認する
多くの Linux サーバーでは、getent group で group entry と明示的なメンバーを確認できます。
getent group www-data
例:
www-data:x:33:deploy,appuser
環境によっては、その group を primary group として持つユーザーが member list に出ない場合があります。
特定のユーザーがどの group に属しているか確認するには、次を使います。
id username
例:
id deploy
getent が使えない環境では、/etc/group が参考になることがあります。
grep '^www-data:' /etc/group
macOS では group membership の扱いが異なります。たとえば次のように確認します。
dscl . -read /Groups/staff GroupMembership
Apache と CLI で同じログディレクトリを使う場合
Apache と CLI コマンドが同じログを書き込むが、実行ユーザーが異なる、という chmod の問題はよくあります。
例:
Apache user: www-data
CLI user: deploy
Log directory: logs/
Apache の実行ユーザーは環境によって異なります。Debian/Ubuntu では www-data、RHEL/CentOS 系では apache のことがあります。権限を変更する前に、実際のプロセスユーザーを確認してください。
避けたい対応:
chmod 777 logs
これは owner と group 以外にも書き込みを許すため危険です。よりよい方法は共有 group を使うことです。
例:
Shared group: app-logs
Members: www-data, deploy
Log directory group: app-logs
Directory permission: group writable
例コマンド:
sudo groupadd app-logs
sudo usermod -aG app-logs www-data
sudo usermod -aG app-logs deploy
sudo chgrp -R app-logs logs
sudo chmod 2775 logs
group membership を変更した後は、ユーザーの再ログインが必要な場合があります。Apache や PHP-FPM などのサービスでは、新しい group membership を反映するためにサービス再起動が必要な場合があります。
chmod 2775 logs の先頭の 2 は setgid bit です。setgid bit は、新しく作られるファイルやディレクトリが親ディレクトリの group を引き継ぐ助けになります。ただし、group write 権限を常に保証するものではありません。最終的な permission は、プロセスの umask やアプリケーション設定にも影響されます。
これは実務上の補足であり、このページの visualizer 入力は引き続き 000 から 777 だけを扱います。
logrotate も確認してください。logrotate が新しいログファイルを作る場合は、create directive も確認します。
create 664 www-data app-logs
chmod だけで直したつもりでも、次のローテーション後に owner、group、permission が変わることがあります。
chmod 777 が危険な理由
chmod 777 は owner、group、others の全員に read、write、execute を許可します。
rwxrwxrwx
特に危険なのは最後の 7 です。owner と group 以外のユーザーにも書き込みを許可します。ファイルなら不要な編集を許す可能性があります。ディレクトリなら、周辺設定によっては不要なファイル作成や置き換えにつながります。
必要最小限の権限を使ってください。多くの場合、解決策は 777 ではなく、正しい owner、正しい group、そしてファイルなら 664、ディレクトリなら 775 のような group-writable な設定です。
プライバシー / ローカル処理
この visualizer はブラウザ内だけで動作します。入力した numeric permission は JavaScript でローカル処理され、サーバーへ送信されません。