web-dev-qa-db-ja.com

UNIXの権限とファイルタイプについて

今日まで、chmodがどのように機能するかは本当にわかりません。私は私に大いに説明するチュートリアルをたどりました。

たとえば、3つの異なる権限グループがあることを読みました。

  • 所有者(u
  • グループ(g
  • 全員(o

これら3つのグループに基づいて、私は次のことを知っています。

  • ファイルがユーザーによって所有されている場合、ユーザーのアクセス許可によってアクセスが決定されます。
  • ファイルのグループがユーザーのグループと同じである場合、グループのアクセス権によってアクセスが決定されます。
  • ユーザーがファイルの所有者ではなく、グループにも属していない場合は、他の権限が使用されます。

また、次の権限があることもわかりました。

  • 読み取り(r
  • 書き込み(w
  • 実行(x

新しく取得した知識をテストするためのディレクトリを作成しました。

mkdir test

次に、いくつかのテストを行いました。

chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---

しばらく遊んだ後、私はようやくchmodのこつと、このコマンドを使用してアクセス権を設定する方法を得たと思います。


だが...

まだいくつか質問があります:

  • 最初のdは何を表していますか?
  • 含まれているスロットの名前と用途は何ですか?それが保持できる他の値は何ですか?
  • どうすれば設定および設定解除できますか?
  • このdの値は何ですか? (7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1しかないため)
  • なぜ人々は時々0777 の代わりに 777権限を設定しますか?

しかし、私は複数の質問をするべきではないので、1つの質問でそれを尋ねるようにします。

すべてのLinuxディストリビューションなどのUNIXベースのシステムでは、権限に関して、最初の部分(d)は何を表し、権限のこの部分の使用法は何ですか?

74
Peter

質問には、ファイルの種類、権限、chmodのさまざまな形式の使用例の3つの部分で回答します。

ファイルタイプ

ls -lの出力の最初の文字はファイルタイプを表します。 dは、それがディレクトリであることを意味します。設定または設定解除できません。ファイルの作成方法によって異なります。ファイルタイプの完全なリストは ls documentation ;にあります。あなたが遭遇する可能性が高いものは

  • -:ファイルを書き込むことができるプログラムで作成された「通常の」ファイル
  • b:ブロックスペシャルファイル(通常はディスクまたはパーティションデバイス)はmknodで作成できます
  • c:キャラクタースペシャルファイル。mknodでも作成できます(例は/devを参照)
  • d:ディレクトリ、mkdirで作成できます
  • l:シンボリックリンク、ln -sで作成できます
  • p:名前付きパイプ、mkfifoで作成できます
  • s:ソケット、nc -Uで作成できます
  • Ddoor 、Solaris/openindiana上の一部のサーバープロセスによって作成されます。

許可

chmod 0777は、変更をu+などと組み合わせるのではなく、1つのchmod実行ですべての権限を設定するために使用されます。4桁の数字はそれぞれ、権限のセットを表す8進値です。

  • suidsgid、「粘着性」(下記参照)
  • ユーザー権限
  • グループ権限
  • 「その他」の権限

8進数の値は、権限の合計として計算されます。

  • 「読み取り」は4
  • 「書き込み」は2
  • 「実行」は1

最初の桁:

  • suidは4です。このビットが設定されたバイナリは、所有者ユーザーとして実行されます(通常はroot
  • sgidは2です。このビットセットを持つバイナリは所有者グループとして実行されます(これはゲームに使用されたため、ハイスコアを共有できますが、ゲームの脆弱性と組み合わせるとセキュリティリスクになることがよくあります)。このビットセットでディレクトリに作成されたファイルは、デフォルトでのディレクトリの所有者グループ(これは共有フォルダを作成するのに便利です)
  • 「スティッキー」(または「制限付き削除」)は1です。このビットが設定されたディレクトリ内のファイルは、その所有者、ディレクトリの所有者、またはrootのみが削除できます(この一般的な例については、/tmpを参照してください)。

詳細は the chmodマンページ を参照してください。このすべてにおいて、ファイルに対するユーザーの権限を変更する可能性のある他のセキュリティ機能(SELinux、ファイルACLなど)は無視しています。

特殊ビットは、ファイルの種類(通常のファイルまたはディレクトリ)と基盤となるシステムに応じて、異なる方法で処理されます。 (これはchmodのマンページに記載されています。)私がこれをテストするために使用したシステム(ext4ファイルシステムでLinuxカーネル3.16.7-ckt2を実行しているcoreutils 8.23を使用)では、動作は以下の通りです。ファイルの場合、明示的に設定しない限り、特殊ビットは常にクリアされるため、chmod 0777chmod 777と同等であり、両方のコマンドが特殊ビットをクリアして、ファイルに対する完全なアクセス許可を全員に付与します。ディレクトリの場合、4桁の数値形式を使用して特殊ビットが完全にクリアされることはないため、実際にはchmod 0777chmod 777と同等ですが、一部の特殊ビットはそのままになるため、誤解を招きます。 。 (この回答の以前のバージョンではこれが間違っていました。)ディレクトリの特別なビットをクリアするには、u-sg-s、および/またはo-tを明示的に使用するか、負の数値を指定する必要があります。 chmod -7000は、ディレクトリのすべての特殊ビットをクリアします。

ls -lの出力では、suidエントリの代わりにsgidx、「sticky」が表示されます。suid is sまたはSユーザーのxの代わりに、sgidはグループのsの代わりにSまたはxであり、「sticky」はtまたは他の人のTの代わりにx。小文字は、特殊ビットと実行可能ビットの両方が設定されていることを示します。大文字は、特殊ビットのみが設定されていることを示します。

Chmodのさまざまな形式

上記の動作のため、chmodで4桁すべてを使用すると混乱する可能性があります(少なくとも、混乱していたことがわかります)。特別なビットと許可ビットを設定したい場合に便利です。それ以外の場合、ファイルを操作している場合はビットがクリアされ、ディレクトリを操作している場合は保持されます。したがって、chmod 2750を使用すると、少なくともsgidと正確にu=rwx,g=rx,o=を取得できます。ただし、chmod 0750は必ずしも特別なビットをクリアするとは限りません。

テキストコマンド([ugo][=+-][rwxXst])の代わりに数値モードを使用することは、おそらくコマンドの習慣と目的のより多くのケースです。数値モードの使用に慣れたら、多くの場合、そのようにフルモードを指定する方が簡単です。また、他の多くのコマンドが許可を使用できるため、許可を数値モードを使用して考えることができると便利です(installmknod...)。

一部のテキストバリアントは便利です。ファイルをだれでも実行できるようにしたいだけの場合は、他の権限に関係なくchmod a+xがそれを実行します。同様に、+Xは、実行権限の1つがすでに設定されているか、ファイルがディレクトリである場合にのみ、実行権限を追加します。これは、特別なケースのファイルとディレクトリを使用せずに、アクセス許可をグローバルに復元する場合に便利です。したがって、chmod -R ug=rX,u+w,o=は、chmod -R 750をすべてのディレクトリと実行可能ファイルに適用し、chmod -R 640を他のすべてのファイルに適用することと同等です。

124
Stephen Kitt

したがって、Linuxでの権限は非常に重要です。簡単な説明をさせていただきます。

ファイルモードの一部の場合

すべてのUnixファイルには、ファイルの読み取り、書き込み、または実行が可能かどうかを決定する一連の権限があります。 ls -lを実行すると、権限が表示されます。このような表示の例を次に示します。

_-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile
_

ファイルモードの一部の画像を添付します。

enter image description here

タイプは異なるものにすることができます。例えば:

  • d (directory)
  • c (character device)
  • l (symlink)
  • p (named pipe)
  • s (socket)
  • b (block device)
  • D (door, not common on Linux systems, but has been ported)

すべてのディレクトリにいくつかの権限を設定する場合は、R属性を使用できます。次に例を示します。

_chmod -R 777 /some/directory/
_

chmod 777と0777の場合

chmodコマンドは通常、入力が8進数であることを期待します。先行ゼロは、sticky/sgid/suidビットのトリプレットの値を指します。ただし、Cでは、_777_が_01411_(8進数)に変換され、スティッキービットが設定されるため(chmod(2)のマニュアルページを参照)、読み取り権限があるため、違いが生じます。グループおよびその他の所有者および実行可能ビット(かなり奇妙な組み合わせです)。

編集1

Linuxのアクセス許可に関する他の画像を見つけました。理解しやすいように添付します。 UNIX file permissions

43
ValeriRangelov

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

10
jcbermu

ここで私の質問に答えてもらい、結果についていくつかの調査を行った後、すべてを非常によく説明している記事を見つけました。今後の参考のために、この記事の一部をここで共有したいと思います。

権限の表示

chmodを使用してファイルまたはディレクトリのアクセス許可を変更するには、まず現在のアクセスモードを知る必要があります。 cdを使用してターミナルのディレクトリの内容をそのディレクトリに表示し、次のように使用できます。

$ ls -l

lsを使用せずに-lスイッチを使用すると、ディレクトリ内のファイルまたはフォルダの名前のみが表示されるため、重要です。

以下は、ホームディレクトリでls -lを使用する例です。

total 128
drwxr-xr-x 2 peter users  4096 Jul  5 21:03 Desktop
drwxr-xr-x 6 peter users  4096 Jul  5 17:37 Documents
drwxr-xr-x 2 peter users  4096 Jul  5 13:45 Downloads
drwxr-xr-x 2 peter users  4096 Jun 24 03:36 Movies
drwxr-xr-x 2 peter users  4096 Jun 24 03:38 Music
drwxr-xr-x 2 peter users  4096 Jun 26 00:09 Pictures
-rw-r--r-- 1 peter users   354 Jul  6 17:15 chmodtest

列の意味

最初の列は各ファイルのタイプです。

  • -は通常のファイルを示します。
  • dは、ディレクトリ、つまり他のファイルまたはフォルダを含むフォルダを示します。
  • pは、名前付きパイプ(別名FIFO)を示します。
  • lはシンボリックリンクを示します。

その後の文字はアクセス許可です。この最初の列は、私たちが最も興味を持つものです。2番目の列は、ファイル内のリンクの数です。無視しても問題ありません。 3番目の列には2つの値/名前があります。最初の列(私の例では「peter」)は、ファイルを所有するユーザーの名前です。 2番目の値(例では「users」)は、所有者が属するグループです(グループの詳細)。

次の列は、ファイルまたはディレクトリのサイズ(バイト単位)であり、その後の情報は、ファイルまたはディレクトリが最後に変更された日付と時刻、およびもちろんファイルまたはディレクトリの名前です。

権限の意味

最初の-またはdに続く最初の3文字は、所有者が持つ権限です。次の3文字は、グループに適用される権限です。最後の3文字は、他のすべてのユーザーに適用される権限です。

3文字の各セットは、rwxで構成されています。 rは常に最初の位置にあり、wは常に2番目の位置にあり、xは常に3番目の位置にあります。 rは読み取り権限、wは書き込み権限、xは実行権限です。これらの文字のいずれかの場所にハイフン(-)がある場合、それは許可が付与されていないことを意味し、文字が存在する場合、それは付与されます。

フォルダー

フォルダの場合、モードビットは次のように解釈できます。

  • r(read)は、指定されたディレクトリの目次を読み取る機能を表します。
  • w(書き込み)は、実行ビットが設定されている場合にのみ、指定されたディレクトリの目次を書き込む機能(新しいファイル、フォルダの作成、名前の変更、既存のファイル、フォルダの削除)を表します。それ以外の場合、この権限は意味がありません。
  • x(実行)は、コマンドcdを使用して特定のディレクトリに入り、そのディレクトリ内のファイルやフォルダにアクセスする機能を表します。

Chmodコマンドを使用して権限を変更する

chmodは、Linuxおよびその他のUnixライクなオペレーティングシステムのコマンドです。ファイルまたはディレクトリの権限(またはアクセスモード)を変更できます。

次の2つの方法で権限を変更できます。-テキストベースのchmod-数値ベースのchmod

テキスト方式

ファイルのアクセス権またはアクセスモードを変更するには、ターミナルでchmodコマンドを使用します。以下は、コマンドの一般的な構造です。

chmod who=permissions filename

ここで、Whoは一連の文字のいずれかであり、それぞれが、許可を与える人物を示します。それらは次のとおりです。

u - The user that owns the file.
g - The group the file belongs to.
o - The other users i.e. everyone else.
a - all of the above - use this instead of having to type ugo.

権限は、すでに説明したものと同じです(rw、およびx)。

Chmodコマンドを使用すると、=の代わりに+または-を使用して、既存のセットにアクセス許可を追加および削除できます。これは上記のコマンドとは異なり、基本的に権限を書き換えます(つまり、権限をr--からrw-に変更するには、rコマンドの=の後にwchmodを含める必要があります。rを逃した場合=で書き換えられているため、r権限が削除されます。+と-を使用すると、現在の権限のセットを追加または削除して、これを回避できます)。

数値法

chmodでは、数字を使用して権限を設定することもできます。

番号の使用は、3つの所有者、グループ、その他すべての権限を同時に編集できるもう1つの方法です。このコードの基本的な構造は次のとおりです。

chmod xxx file/directory

ここで、xxxは3桁の数字で、各桁は1〜7です。最初の数字は所有者の権限に適用され、2桁目はグループの権限に適用され、3桁目はその他すべての権限に適用されます。

この数値表記では、値r、w、xには独自の数値があります。

r=4
w=2
x=1

3桁の数字を考え出すには、所有者、グループ、ユーザーにどのようなアクセス許可を付与するかを検討し、それらの値を合計する必要があります。たとえば、ディレクトリの所有者に読み取り/書き込みと実行のアクセス許可を付与したいとし、グループと他のすべてのユーザーに読み取りと実行のアクセス許可のみを付与したいとします。私はそのような数値を思いつくでしょう:

Owner: rwx = 4+2+1=7
Group: r-x = 4+0+1=5 (or just 4+1=5)
Other: r-x = 4+0+1=5 (or just 4+1=5)

Final number = 755

$ chmod 755 filename

これは、以下を使用するのと同じです。

chmod u=rwx filename
chmod go=rx filename

ほとんどのフォルダー/ディレクトリは755に設定されて、所有者に対して読み取りと書き込み、および実行を許可しますが、他のすべてのユーザーに対しては書き込みを拒否します。ファイルは通常、所有者に対して読み取りと書き込みを許可し、他のすべてのユーザーに対してのみ読み取りを許可するために644に設定されています。実行可能でないファイルにはx権限がないことに注意してください-ここでも同じことです。

7
Peter

Dの質問

これにより、Unixファイルの種類がわかります。デフォルトでは、Unixには3種類のファイルしかありません。彼らです:

  • --通常のファイル
  • d-ディレクトリファイル
  • 特殊ファイル(5つのサブタイプ):
    • b-ブロックファイル
    • c-キャラクターデバイスファイル
    • p-名前付きパイプファイルまたは単にパイプファイル
    • l-シンボリックリンクファイル
    • s-ソケットファイル

詳細はこちら: Linux/Unixでのファイルタイプの詳細説明

0777777

スティッキービットが指定されているかどうか。ディレクトリのスティッキービットが設定されている場合、ファイルシステムはそのようなディレクトリ内のファイルを特別な方法で処理するため、ファイルの所有者、ディレクトリの所有者、またはrootユーザーのみがファイルの名前を変更または削除できます。スティッキービットが設定されていない場合、ディレクトリの書き込みおよび実行権限を持つユーザーは、ファイルの所有者に関係なく、含まれているファイルの名前を変更または削除できます。

0777は777ファイルのアクセス権を設定し、スティッキービットを0に設定します-特別なモードはありません。

777は、スティッキービットを変更せずに、777ファイルのアクセス権を設定しています。

続きを読む: sticky bit および chmod

0
csny

私が常に混乱していて、上記で触れていない2つの関連するものは:


I)1」が行うこと:

chmod:各 '1' en許可を許可します。 chmod 777 enすべて可能ですが、
in umask:各 '1' dis許可を許可します。 umask 777 disすべてを可能にします。


II)ファイル'所有者'対ファイル'ユーザー'

言い換えれば、「所有」しているユーザー「使用しているユーザー」があります。

各ファイルは、同時に2つのエンティティによってownedになります。

  • 単一の特定のser、および
  • 単一の特定のgroup(1人以上のユーザーの)。

したがって、各ファイルは、次の3つの方法で特定のユーザーが使用にすることができます。

1)直接、ファイルを所有するユーザーとして、
2)in直接、ファイルを所有するグループのメンバーとして、および
3)おそらく、他の誰かとして。


それ以外の場合、上記の答えは素晴らしい仕事をします!皆様ありがとうございました。

0
Elliptical view