chmod パーミッション計算
開発ツール
読み込み中
ツールを読み込んでいます
ツールのコードは開いたときにのみ読み込まれます。
このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。
このツールについて
Unix のパーミッションを、8進数と rw-r--r-- のような9文字の表記で相互変換します。チェックボックスで各ビットを組み合わせることもできます。結果は常に4桁の8進数で表示し、setuid・setgid・sticky と大文字 S・T の意味も保持します。ファイルとディレクトリの切り替えは説明だけを変え、ビットは変更しません。計算はブラウザー内で行い、実際のファイルを読み取ったり変更したりしません。
主な用途
- コピーした権限値を読み解き、所有者・グループ・その他のユーザーのビットを個別に確認する。
- 設定を見直す前に、実行・検索権限と独立した setuid・setgid・sticky を区別する。
- コマンドを実行せずに、同じビット列が通常ファイルとディレクトリでどう異なるかを理解する。
使い方
- 1.8進数または文字表記を選びます。644 や 2750 のような ASCII の8進数字をちょうど3桁または4桁、あるいは rwxr-s--- のような権限文字をちょうど9文字入力してください。空白、ファイル名、ファイル種別の先頭文字は含めません。
- 2.変換後、4桁の8進数、9文字の権限表記と各チェックボックスを確認します。チェックボックスで別の組み合わせも試せます。ファイルかディレクトリを選び、アクセス権と特殊ビットの説明を読みます。
- 3.結果や GNU 向け参考コマンドをコピーする前に注意事項を確認してください。0644 の例は chmod =0644 -- example-file と chmod =0644 -- example-directory です。= 演算子はビット列の明示的な設定を要求します。固定の名前は例示用で、このページはコマンドを実行しません。
実行して確認できる権限変換の例
3桁の値を4桁にそろえる
{
"format": "octal",
"value": "644"
}{
"octal": "0644",
"symbolic": "rw-r--r--"
}読み取りは 4、書き込みは 2 なので、所有者の 6 は rw- です。続く 4 はそれぞれ読み取りだけを表します。省略された特殊ビット桁を 0 として、0644 を出力します。JSON は入力項目の説明です。format に対応する形式を選び、value の内容だけを入力してください。
所有者・グループ・その他を分ける
{
"format": "octal",
"value": "0750"
}{
"octal": "0750",
"symbolic": "rwxr-x---"
}所有者は rwx、グループは r-x、その他には通常の権限がありません。ディレクトリを選ぶと x の説明は検索・通過になりますが、変換値は同じです。
setuid と所有者の実行を有効にする
{
"format": "octal",
"value": "4755"
}{
"octal": "4755",
"symbolic": "rwsr-xr-x"
}先頭の 4 が setuid を表します。所有者の 7 は実行も含むので、3文字目が小文字 s になります。これは表記の例であり、setuid の有効化を勧めるものではありません。
グループの実行なしで setgid を表す
{
"format": "octal",
"value": "2640"
}{
"octal": "2640",
"symbolic": "rw-r-S---"
}特殊ビット桁の 2 が setgid を有効にします。グループの 4 は読み取りだけで実行を含まないため、グループの3文字目は大文字 S です。所有者は rw- のままです。
その他の実行なしで sticky を表す
{
"format": "octal",
"value": "1700"
}{
"octal": "1700",
"symbolic": "rwx-----T"
}sticky は有効ですが、その他の実行ビットは無効なので、末尾は大文字 T になります。所有者に実行ビットがあっても、T が t に変わることはありません。
通常権限なしで特殊ビットをすべて表す
{
"format": "octal",
"value": "7000"
}{
"octal": "7000",
"symbolic": "--S--S--T"
}先頭の 7 は 4 + 2 + 1 です。通常の権限がすべて無効なため、特殊位置には S・S・T が現れます。通常権限を与えていなくても、有効なビット列です。
小文字の特殊位置を逆変換する
{
"format": "symbolic",
"value": "--s--s--t"
}{
"octal": "7111",
"symbolic": "--s--s--t"
}小文字の特殊文字は対応する実行ビットも含みます。3つの特殊フラグで先頭が 7、3つの実行ビットで残りが 111 となり、7111 に変換されます。
setgid 付きのディレクトリ形式を逆変換する
{
"format": "symbolic",
"value": "rwxr-s---"
}{
"octal": "2750",
"symbolic": "rwxr-s---"
}所有者は rwx、グループは r-x と setgid、その他には権限がなく、2750 になります。ディレクトリのグループ継承は意味の説明であり、追加のビットではありません。
すべてのビットを解除した表記
{
"format": "symbolic",
"value": "---------"
}{
"octal": "0000",
"symbolic": "---------"
}9つのハイフンは通常の権限と特殊ビットがすべてゼロであることを表し、正規化した結果は 0000 です。実際のファイルに特権プロセスや別のアクセス制御経由でアクセスできないことを証明するものではありません。
権限表記で間違えやすい点
- ファイル種別の先頭文字を除かずに drwxr-x--- や -rw-r--r-- を貼り付ける。
- S や T をエラーと考えたり、特殊ビットが必ず実行ビットも有効にすると考えたりする。
- u+x、0o644、数字の 8・9、余分な空白を受け付ける入力だと思い込む。
- ディレクトリを読めれば通過もできる、またはファイルの書き込みビットが名前の削除を決めると考える。
- GNU の chmod 0644 が既存のディレクトリ setuid/setgid を消すと期待したり、=mode が全環境で使えると考えたりする。
- ビット変換をセキュリティ監査と混同したり、アクセスエラーをなくすために広い権限を一律で与えたりする。
制限と注意事項
- 8進数入力は 0~7 の数字を3~4桁に限定し、結果は 0000~7777 の4桁に統一します。文字入力は rwx の位置を3組並べた9文字だけです。s/S は所有者・グループの実行位置、t/T はその他の実行位置でのみ使えます。空白、0o 接頭辞、1・2・5桁の値、ls の行全体、ファイル種別の先頭文字、ACL の末尾記号、u+x・a=rw・=0644 などの変更式は受け付けません。
- 12ビットの表記を計算するツールであり、実際のアクセス可否は判定しません。所有権、グループ所属、ACL、capabilities、セキュリティポリシー、マウント設定、親ディレクトリ、シンボリックリンクは調べません。umask の適用や新規ファイルのモード予測も行いません。OS やファイルシステムが特殊ビットを制限・無視・解除する場合があります。
- ファイルの r/w/x は内容の読み取り・変更・実行を表します。ディレクトリでは名前の一覧取得・ディレクトリエントリーの変更・検索や通過を表し、エントリーの作成や削除には通常、書き込みと検索の両方が必要です。ファイル自身の書き込みビットだけでは、その名前を削除できるかは決まりません。ディレクトリの 0644 は検索権限を含まない説明用の値で、推奨設定ではありません。
- GNU chmod では 0644 のような通常の数値モードを使うと、ディレクトリの既存の setuid/setgid が残る場合があります。そのためディレクトリの参考コマンドでは =0644 を使い、ビット列の明示的な設定を要求します。演算子付き数値モードは GNU 拡張です。POSIX ではディレクトリの setuid/setgid 変更要求を実装が無視することを認めています。コマンドを使う前に対象システムを確認し、実際の結果も検証してください。
- 変換は読み込み済みページ内の入力だけで行い、ファイルシステム、ネットワーク、shell を呼び出さず、権限入力を永続保存しません。コピーした結果はクリップボードに入り、その後はページの管理外になります。例はビット表記を学ぶためのもので、権限設定の推奨ではありません。広い権限の付与をアクセスエラーの一般的な解決策にしないでください。
よくある質問
s や t が大文字になるのはなぜですか?
各組の3文字目は、独立した2つのビットを表せます。所有者またはグループの位置では、s は setuid または setgid と実行ビットの両方が有効、S は特殊ビットだけが有効な状態です。その他の位置では t が sticky と実行の両方、T が sticky だけを表します。大文字にも意味があり、不正な入力ではありません。
ファイルとディレクトリで x の意味は同じですか?
通常ファイルでは実行権限のビットですが、そのファイルが実行可能なプログラムであるとは限りません。ディレクトリでは検索・通過を表し、配下のエントリーを解決する際に必要です。名前の一覧取得やエントリーの変更は別の権限です。ディレクトリに切り替えても説明とコマンド例が変わるだけで、実行ビットは自動追加されません。
setuid・setgid・sticky は何をしますか?
対応する実行ファイルでは、setuid/setgid はプロセスの実効ユーザー ID・グループ ID に影響しますが、システムの制約を受けます。ディレクトリの setgid は一般に新しいエントリーへグループを、新しいサブディレクトリへ setgid を継承させます。ディレクトリの setuid は移植可能な動作ではありません。ディレクトリの sticky は通常の検査に加え、非特権ユーザーによる削除・名前変更を、そのエントリーの所有者またはディレクトリの所有者に制限します。ファイル内容の書き換えを防ぐものではなく、通常ファイルでの効果はシステムによって異なります。
chmod コマンドや ls -l の行をそのまま貼れますか?
いいえ。ここでの文字表記は表示用の9文字だけで、chmod の変更式の文法ではありません。ls からコピーするときは先頭のファイル種別、ACL 記号、その他の列を取り除いてください。このツールは実際のファイルの現在のモードを検出せず、表示したコマンドが成功することも保証しません。
- GNU Coreutils:数値モードのビット値
- GNU Coreutils:ls の権限表示と s/S/t/T
- GNU Coreutils:ファイルとディレクトリの権限の意味
- GNU Coreutils:ディレクトリの setuid/setgid と移植性
- GNU Coreutils:演算子付き数値モード
- GNU Coreutils:chmod の動作とシステムの制限