「chmod 1777」と「chmod 3777」の両方がスティッキービットを設定するのはなぜですか?


15

ディレクトリにスティッキービットを設定するには、なぜコマンドchmod 1777chmod 3777両方が機能するのですか?


2
潜在的に危険な操作を提案しています。すべてのスティッキービットとrwxの組み合わせは悪い習慣です。誰でもファイルを変更して実行でき、s-bitを使用すると、パスワードなしでrootユーザーに切り替えることができます。
ジッピー

1
ファイルが変更されると、@ jippie setuidおよびsetgidビットがなくなるため、その方法でルートアクセスを取得することはできません。
カイルジョーンズ

@KyleJones、まだ危険です。場合はpasswd、バイナリは、世界的に書き込み可能だった、あなたが言うように、それを修正することにより、ルートアクセスを取得することはできませんが、あなたは可能性があり、それはだと思っ、誰もがその後に実行することを他のいくつかのバイナリに置き換えますpasswd
ワイルドカード

@Wildcard同意しました。
カイルジョーンズ

回答:


29

そのグループ内の各数値(base8であるため8進数とも呼ばれる)は、3ビットを表します。バイナリに変換すると、はるかに簡単になります。

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

したがって、1777、3777、5777、または7777を実行した場合、3番目の列は1になるため、スティッキービットを設定します。ただし、3777、5777、および7777では、他のビット(最初の列のSUID、 2列目のSGID)。

逆に、最後の列が1または「オン」ではないため、そのスポットの他の番号(最大7)はスティッキービットを設定しません。

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0


3
8進数がどのように機能し、それがファイル許可ビットにどのように適用されるかについてのわかりやすい説明については、+ 1。
CVn

1
これは「ビットマスク」と呼ばれ、設定方法とclear所有者グループとその他の列を説明/表示するために+1されます。
クリスK

16

chmodに引数として渡される許可は、8進数値として指定されます。値の各数字は3ビットを表します。3つの数字が指定されている場合、ファイルの所有者、グループ、その他(他の全員)の読み取り、書き込み、実行ビットを設定しています。4つの数字を指定すると、左端の数字がsetuid、setgid、およびstickyビットを設定します。8進数1はスティッキービットを設定します。8進数2はsetgidビットを設定します。8進数2 + 8進数1は、setgidビットとスティッキービットの両方を設定する8進数3です。


1
8進数ではない2 | 8進数2 + 8進数1ではなく8進数1?この場合、操作はたまたま同じ結果になりますが、一般的にはビット単位であるか、問題になりますか?
ヘリット・

1
@gerritはい、一般的なケースでは、binary orオペレーターを見る必要があります。ただし、指摘したように、この場合は同じ結果になり、さらに多くの人が追加に慣れています。
CVn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.