日本語

開発者ツール · Chmod 計算機

ls -l 権限を読み取り、8 進数モードに変換する方法

· 仕組み

chmod unix 開発者ワークフロー

ls 形式のモード文字列を別個の Unix パーミッション ビット図として表示
オリジナル ToolAcre ベクトル イラスト

ls -l の先頭にある 10 文字の文字列は、ファイル タイプに 9 つの許可ビットを加えたものです。この投稿では、これをデコードして、特殊ビット文字を含む chmod が必要とする 8 進数モードを生成する方法を示します。

-rw-r-----+ が貼り付けられたチケット — ユーザーに chmod 640 を実行するように指示するか、他のものを実行するように指示するかを知る必要があります。

-rw-r-----+ などの貼り付けられた文字列には、このパーサーが受け入れる以上のものが含まれています。認識されるコアは 9 文字の許可本文であり、オプションでその前にサポートされている 1 つのファイル タイプ文字が続きます。末尾にプラスがあると入力が長すぎるため、拒否されます。外部マーカーを削除すると、-rw-r----- が残り、640: owner read/write, group read、その他の権限なしに変換されます。

この変換では、長いリストで ACL にプラスが使用される可能性があるという記事 501 の警告を超えて、プラスが何を表すのかはデコードされません。計算機には ACL エントリまたはマスクがありません。また、チケットのマシン、所有者、グループ、またはパスも検査しません。したがって、モード 640 は、受け入れられたコアによって表される基本権限値であり、効果的なアクセスに関する完全な答えではありません。

最初の文字はタイプ (ダッシュ、d、l、c、b、p、s) であり、それがモードの一部ではない理由

オプションの最初の文字は、許可ビットではなくタイプ マーカーとして扱われます。パーサーは、-、d、l、b、c、p、s、D、および ? を認識します。 9 つの有効な許可位置の前に 1 つが出現すると、算術のために削除されます。結果として得られる所有者、グループ、およびその他のトリプルだけで、8 進数値と行列の選択が決まります。

この動作は、同等の入力を使用して簡単に検証できます。 rwxr-x--- と -rwxr-x--- は両方とも、先頭のダッシュがモード ビットに寄与しないため、750 を生成します。ディレクトリ マーカーは同じ本文の前に置くことができ、それでも同じ整数を生成します。ターゲット セレクターは説明文を個別に制御するため、型文字を受け入れても、ブラウザーがそのオブジェクトを検出したり開いたりしたことを意味するわけではありません。

3 つのグループに分かれた 9 文字 — 所有者、グループ、その他、常に rwx 順で、オフの各ビットにダッシュが付きます

9 つの権限の位置は、所有者、グループ、その他の順序で 3 つの固定トリプルを形成します。各トリプル内では、読み取りが最初の位置を占め、2 番目の位置が書き込み、3 番目の位置が実行されます。ダッシュは、対応するビットがオフであることを意味します。位置固有の検証では、推測ではなく、間違って配置された文字が拒否されるため、書き込み位置の r が黙って別のパーミッションになることはありません。

受け入れられた各トリプルは、記事 501 の重みによって 1 つの 8 進数にマップされます。読み取りは 4、書き込みは 2、実行は 1 です。マトリックスはチェックボックスと同じフラグを表示し、整数が変更されると整数を再構築します。特殊文字は実行位置でのみ受け入れられ、基になる実行状態とともに setuid、setgid、または Sticky が保持されます。

動作例: -rwxr-x--- から 750 — 4、2、1 を各文字に割り当て、グループごとに合計します

先頭の型マーカーを無視し、本体を rwx、r-x、および --- に分割することにより、-rwxr-x--- を変換します。所有者は 4+2+1 を持っており、7 を生成します。グループには 4+1 があり、5 が生成されます。その他には有効なビットがなく、0 が生成されます。計算機は 750 を返し、一致する 9 つの通常のアクセス許可ボックスを選択します。

逆チェックは同じテキスト本文に到達する必要があります。 750 と入力すると、シンボリック フィールドは rwxr-x--- になります。表示されたフォームの通常のファイル マーカーを選択すると、-rwxr-x--- になります。割り当てプレビューの構文は異なります: u=rwx,g=rx,o=。 3 つのビューはすべて、1 つの固定モードを説明していますが、所有権とそれを適用する知恵は未解決のままです。

末尾のプラス記号とアットマーク — + は ACL エントリが存在することを意味し、@ は macOS の拡張属性を意味し、どちらもモードの一部ではありません

末尾のプラス記号とアットマークはアウトライン内のメタデータ マーカーですが、実装される事実はより限定的です。受け入れられた入力はパーミッション本文の後で終了するため、このパーサーはどちらかを拒否します。記事 501 では、ACL の末尾のプラスを具体的に示しています。 CHMOD_SOURCES はアットマークに同等の解釈を提供しないため、このセクションでは、リポジトリでサポートされていないオペレーティング システムを意味するアットマークを割り当てません。

効率的なアクセスが重要な場合は、盲目的にマーカーを剥がしません。代わりに、基本モード変換用に受け入れられた 9 文字または 10 文字のコアを分離し、元のシステムからの証拠を使用して残りを調査します。計算機は、rw-r----- が 640 を意味することを示します。追加のメタデータを説明したり、拡張属性を読み取ったり、別のアクセス制御メカニズムがユーザーまたはプロセスの実行内容を変更するかどうかを判断したりすることはできません。

末尾のプラス記号とアットマークは、このパーサーが拒否するメタデータ マーカーです

外部統計コマンドはブラウザー電卓では実行されません。このページにはコマンド ランナーやファイル システムへのアクセス権がありません。そのパスフィールドは、表示用に引用符で囲まれた chmod テキストを構築するためにのみ存在します。したがって、現在のモードを取得したり、プラットフォーム固有のコマンド出力を比較したり、貼り付けられた文字列が特定のユーティリティからのものであることを証明したりすることはできません。ユーザーは変換する値を指定する必要があります。

信頼できるモードが指定されると、ブラウザーは独立した表現チェックを提供します。シンボリック コアを入力し、その 8 進数の結果、行列、要約、および割り当てのプレビューを比較します。アグリーメントは、サポートされている形式内の転記および算術エラーを検出します。外部コレクション コマンドを検証したり、所有権を明らかにしたり、テキストのコピー元のオブジェクトに対して表現されたアクセス許可が有効であることを証明したりすることはありません。

外部統計コマンドはブラウザー電卓では実行されません

ACL デコードはルートの外側に残ります。そのモデルには、所有者、グループ、その他、および 3 つの特殊ビットが含まれており、名前付きエントリや ACL マスクはありません。 Windows アクセス許可のデコードも同様に存在しません。Windows ID モデル、アクセス制御エントリ構文、またはプラットフォーム検出はありません。 9 桁の Unix スタイルのコアは変換できますが、その結果から追加の許可システムを再構築することはできません。

この境界により、診断も制限されます。十分であるように見える基本モードは、ACL または別のポリシーが無関係であることを証明するものではありませんが、制限モードは考えられるすべての許可を識別するものではありません。計算機は、表現された 12 ビットのみを決定します。その出力を使用して通常モードを正確に記述し、実際に外部権限システムを公開するツールやドキュメントに対する効果的な権限に関する主張を留保します。

ACL と Windows 権限のデコードはルートの外に残ります

受け入れられたコアが分離されると、ls スタイル モードの読み取りは機械的になります。認識された先頭の型文字を 1 つ削除し、残りの 9 つの位置を所有者、グループ、その他に分割し、各トリプル内で読み取り 4、書き込み 2、および実行 1 を合計します。計算機はその変換を実行し、実装された s、S、t、および T 形式を含む位置固有の文字を検証します。

結論は入力に比例するようにしてください。変換が成功すると、受け入れられた文字列が 8 進数モード、行列、要約、および生成された割り当てに一貫してマッピングされることが証明されます。 stat の実行、パスの検査、末尾マーカーのデコード、所有権の識別、chmod の適用は行いません。これらの制限により、出力は有用なものになります。出力は基本モードの演算に関して正確であり、収集されなかった証拠については沈黙しています。