あなたの質問に、ファイルの種類、権限、さまざまな形式の chmod
の使用例の 3 つの部分でお答えします。 .
ファイルの種類
ls -l
の最初の文字 output はファイルの種類を表します。 d
ディレクトリであることを意味します。設定または設定解除はできません。ファイルの作成方法によって異なります。ファイル タイプの完全なリストは ls ドキュメントにあります。あなたが遭遇する可能性が高いものは
-
:ファイルを書き込むことができる任意のプログラムで作成された「通常の」ファイルb
:ブロック スペシャル ファイル (通常はディスクまたはパーティション デバイス) はmknod
で作成できますc
:キャラクタースペシャルファイルmknod
でも作成可能 (/dev
を参照) 例)d
:ディレクトリ、mkdir
で作成できますl
:シンボリック リンク、ln -s
で作成できますp
:名前付きパイプ、mkfifo
で作成できますs
:ソケット、nc -U
で作成可能D
:ドア、Solaris/openindiana 上のいくつかのサーバー プロセスによって作成されます。
権限
chmod 0777
1 つの chmod
ですべての権限を設定するために使用されます u+
で変更を結合するのではなく、実行 など。4 桁の各数字は、一連の権限を表す 8 進数です。
suid
、sgid
および「スティッキー」(下記参照)- ユーザー権限
- グループの権限
- 「その他」の権限
8 進値は、権限の合計として計算されます:
- 「読む」は4
- 「書く」は2
- 「実行」は 1 です
1 桁目:
suid
は 4 です。このビットが設定されたバイナリは、所有者ユーザーとして実行されます (通常はroot
)sgid
は 2 です。このビット セットを持つバイナリは所有者グループとして実行され (これはゲームに使用されたのでハイ スコアを共有できましたが、ゲームの脆弱性と組み合わせるとセキュリティ リスクになることがよくあります)、このビット セットを持つディレクトリに作成されたファイルは、デフォルトでディレクトリの所有者グループ (これは共有フォルダを作成するのに便利です)- 「スティッキー」(または「制限付き削除」) は 1 です。このビットが設定されたディレクトリ内のファイルは、その所有者、ディレクトリの所有者、または
root
のみが削除できます (/tmp
を参照) これの一般的な例)。
chmod
を参照してください 詳細については、マンページを参照してください。このすべてにおいて、ファイルに対するユーザーのアクセス許可を変更できる他のセキュリティ機能 (SELinux、ファイル ACL など) を無視していることに注意してください。
特殊ビットの処理は、ファイルの種類 (通常のファイルまたはディレクトリ) と基礎となるシステムによって異なります。 (これは chmod
で言及されています マンページ。) これをテストするために使用したシステムで ( coreutils
を使用) ext4
の 8.23 Linux カーネル 3.16.7-ckt2 を実行しているファイルシステム) では、動作は次のようになります。ファイルの場合、明示的に設定しない限り、特殊ビットは常にクリアされるため、chmod 0777
chmod 777
と同等です 、および両方のコマンドは、特殊なビットをクリアし、ファイルに対する完全なアクセス許可を全員に与えます。ディレクトリの場合、特殊ビットは 4 桁の数値形式を使用して完全にクリアされることはないため、実際には chmod 0777
chmod 777
と同等です しかし、一部の特別なビットはそのまま残るため、誤解を招く可能性があります。 (この回答の以前のバージョンではこれが間違っていました。)ディレクトリの特別なビットをクリアするには、 u-s
を使用する必要があります 、 g-s
および/または o-t
明示的にまたは負の数値を指定するので、chmod -7000
ディレクトリのすべての特殊ビットをクリアします。
ls -l
で 出力、suid
、 sgid
x
の代わりに「スティッキー」が表示されます エントリ:suid
s
です または S
ユーザーの x
の代わりに 、 sgid
s
です または S
グループの x
の代わりに 、「スティッキー」は t
です または T
他人の x
の代わりに .小文字は、特殊ビットと実行可能ビットの両方が設定されていることを示します。大文字は、特別なビットのみが設定されていることを示します。
chmod のさまざまな形式
上記の動作のため、chmod
で 4 桁全体を使用する 混乱する可能性があります(少なくとも、私は混乱していたことがわかりました)。許可ビットだけでなく特殊なビットも設定したい場合に便利です。それ以外の場合、ファイルを操作している場合はビットがクリアされ、ディレクトリを操作している場合は保持されます。だから chmod 2750
少なくとも sgid
が得られることを保証します そして正確に u=rwx,g=rx,o=
;しかし chmod 0750
必ずしも特殊ビットをクリアするとは限りません。
テキスト コマンドの代わりに数値モードを使用する ([ugo][=+-][rwxXst]
) は、おそらく習慣とコマンドの目的のケースです。数値モードの使用に慣れると、そのように完全なモードを指定する方が簡単なことがよくあります。他の多くのコマンドで数値モードを使用できるため、数値モードを使用してパーミッションを考えることができると便利です (install
、 mknod
...).
いくつかのテキスト バリアントは便利です:誰でもファイルを実行できるようにしたいだけなら、 chmod a+x
他の許可が何であるかに関係なく、それを行います。同様に、+X
実行権限のいずれかがすでに設定されているか、ファイルがディレクトリである場合にのみ、実行権限を追加します。これは、特別なケースのファイルやディレクトリを必要とせずに、アクセス許可をグローバルに復元するのに便利です。したがって、chmod -R ug=rX,u+w,o=
chmod -R 750
を適用するのと同じです すべてのディレクトリと実行可能ファイル、および chmod -R 640
に
そのため、Linux のパーミッションは非常に重要です。簡単に説明しようと思います。
ピースオブファイルモードの場合
すべての Unix ファイルには、ファイルの読み取り、書き込み、または実行を許可するかどうかを決定する一連のアクセス許可があります。 Runningls -l は権限を表示します。以下はそのような表示の例です:
-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile
ファイルモードのピースの画像を添付します:
タイプは別のものにすることができます。例:
- d (ディレクトリ)
- c (キャラクターデバイス)
- l (シンボリックリンク)
- p (名前付きパイプ)
- s (ソケット)
- b (ブロック デバイス)
- D (ドア、Linux システムでは一般的ではありませんが、移植されています)
すべてのディレクトリにパーミッションを設定したい場合は、R 属性を使用できます。例:
chmod -R 777 /some/directory/
chmod 777 と 0777 の比較
chmod
コマンドは通常、入力が 8 進数であることを期待します。先頭のゼロは、sticky/sgid/suid ビット トリプレットの値を参照します。ただし、C では 777
であるため、違いがあります。 01411
に変換されます (8 進数)、したがって、スティッキー ビットを設定します (chmod(2)
を参照してください)。 man ページ)、所有者の読み取り許可、およびグループとその他の実行可能ビットの読み取り許可 (これはかなり奇妙な組み合わせです)。
編集 1
Linux のアクセス許可に関する他の画像を見つけたので、より簡単に理解できるように添付します。
d
ディレクトリであることを意味し、ファイルがある場合は -
です リンクの場合は l
が見つかります .設定/設定解除できません。
パーミッションとして 0777 を使用すると、システムのすべてのユーザー/グループにフル コントロール (読み取り + 書き込み + 実行) を与えることになります。ディレクトリ/ファイルにアクセスできないユーザー/グループがある場合、問題を解決するのは怠惰な方法です。
たとえば、ディレクトリの内容を一覧表示してこれを取得した場合:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so ユーザー root およびグループ root が所有するファイルです。 所有者 グループは読み取りと書き込みのアクセス権があります 読み取りアクセスのみで、他のユーザー 読み取りアクセス権があります。これは 644 と訳すことができます。
これを 777 に変更すると、次のようになります:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so