今日まで、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
)は何を表し、権限のこの部分の使用法は何ですか?
質問には、ファイルの種類、権限、chmod
のさまざまな形式の使用例の3つの部分で回答します。
ls -l
の出力の最初の文字はファイルタイプを表します。 d
は、それがディレクトリであることを意味します。設定または設定解除できません。ファイルの作成方法によって異なります。ファイルタイプの完全なリストは ls documentation ;にあります。あなたが遭遇する可能性が高いものは
-
:ファイルを書き込むことができるプログラムで作成された「通常の」ファイルb
:ブロックスペシャルファイル(通常はディスクまたはパーティションデバイス)はmknod
で作成できますc
:キャラクタースペシャルファイル。mknod
でも作成できます(例は/dev
を参照)d
:ディレクトリ、mkdir
で作成できますl
:シンボリックリンク、ln -s
で作成できますp
:名前付きパイプ、mkfifo
で作成できますs
:ソケット、nc -U
で作成できますD
: door 、Solaris/openindiana上の一部のサーバープロセスによって作成されます。chmod 0777
は、変更をu+
などと組み合わせるのではなく、1つのchmod
実行ですべての権限を設定するために使用されます。4桁の数字はそれぞれ、権限のセットを表す8進値です。
suid
、sgid
、「粘着性」(下記参照)8進数の値は、権限の合計として計算されます。
最初の桁:
suid
は4です。このビットが設定されたバイナリは、所有者ユーザーとして実行されます(通常はroot
)sgid
は2です。このビットセットを持つバイナリは所有者グループとして実行されます(これはゲームに使用されたため、ハイスコアを共有できますが、ゲームの脆弱性と組み合わせるとセキュリティリスクになることがよくあります)。このビットセットでディレクトリに作成されたファイルは、デフォルトでのディレクトリの所有者グループ(これは共有フォルダを作成するのに便利です)root
のみが削除できます(この一般的な例については、/tmp
を参照してください)。詳細は the chmod
マンページ を参照してください。このすべてにおいて、ファイルに対するユーザーの権限を変更する可能性のある他のセキュリティ機能(SELinux、ファイルACLなど)は無視しています。
特殊ビットは、ファイルの種類(通常のファイルまたはディレクトリ)と基盤となるシステムに応じて、異なる方法で処理されます。 (これはchmod
のマンページに記載されています。)私がこれをテストするために使用したシステム(ext4
ファイルシステムでLinuxカーネル3.16.7-ckt2を実行しているcoreutils
8.23を使用)では、動作は以下の通りです。ファイルの場合、明示的に設定しない限り、特殊ビットは常にクリアされるため、chmod 0777
はchmod 777
と同等であり、両方のコマンドが特殊ビットをクリアして、ファイルに対する完全なアクセス許可を全員に付与します。ディレクトリの場合、4桁の数値形式を使用して特殊ビットが完全にクリアされることはないため、実際にはchmod 0777
もchmod 777
と同等ですが、一部の特殊ビットはそのままになるため、誤解を招きます。 。 (この回答の以前のバージョンではこれが間違っていました。)ディレクトリの特別なビットをクリアするには、u-s
、g-s
、および/またはo-t
を明示的に使用するか、負の数値を指定する必要があります。 chmod -7000
は、ディレクトリのすべての特殊ビットをクリアします。
ls -l
の出力では、suid
エントリの代わりにsgid
、x
、「sticky」が表示されます。suid
is s
またはS
ユーザーのx
の代わりに、sgid
はグループのs
の代わりにS
またはx
であり、「sticky」はt
または他の人のT
の代わりにx
。小文字は、特殊ビットと実行可能ビットの両方が設定されていることを示します。大文字は、特殊ビットのみが設定されていることを示します。
上記の動作のため、chmod
で4桁すべてを使用すると混乱する可能性があります(少なくとも、混乱していたことがわかります)。特別なビットと許可ビットを設定したい場合に便利です。それ以外の場合、ファイルを操作している場合はビットがクリアされ、ディレクトリを操作している場合は保持されます。したがって、chmod 2750
を使用すると、少なくともsgid
と正確にu=rwx,g=rx,o=
を取得できます。ただし、chmod 0750
は必ずしも特別なビットをクリアするとは限りません。
テキストコマンド([ugo][=+-][rwxXst]
)の代わりに数値モードを使用することは、おそらくコマンドの習慣と目的のより多くのケースです。数値モードの使用に慣れたら、多くの場合、そのようにフルモードを指定する方が簡単です。また、他の多くのコマンドが許可を使用できるため、許可を数値モードを使用して考えることができると便利です(install
、mknod
...)。
一部のテキストバリアントは便利です。ファイルをだれでも実行できるようにしたいだけの場合は、他の権限に関係なくchmod a+x
がそれを実行します。同様に、+X
は、実行権限の1つがすでに設定されているか、ファイルがディレクトリである場合にのみ、実行権限を追加します。これは、特別なケースのファイルとディレクトリを使用せずに、アクセス許可をグローバルに復元する場合に便利です。したがって、chmod -R ug=rX,u+w,o=
は、chmod -R 750
をすべてのディレクトリと実行可能ファイルに適用し、chmod -R 640
を他のすべてのファイルに適用することと同等です。
したがって、Linuxでの権限は非常に重要です。簡単な説明をさせていただきます。
ファイルモードの一部の場合
すべてのUnixファイルには、ファイルの読み取り、書き込み、または実行が可能かどうかを決定する一連の権限があります。 ls -lを実行すると、権限が表示されます。このような表示の例を次に示します。
_-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile
_
ファイルモードの一部の画像を添付します。
タイプは異なるものにすることができます。例えば:
すべてのディレクトリにいくつかの権限を設定する場合は、R属性を使用できます。次に例を示します。
_chmod -R 777 /some/directory/
_
chmod 777と0777の場合
chmod
コマンドは通常、入力が8進数であることを期待します。先行ゼロは、sticky/sgid/suidビットのトリプレットの値を指します。ただし、Cでは、_777
_が_01411
_(8進数)に変換され、スティッキービットが設定されるため(chmod(2)
のマニュアルページを参照)、読み取り権限があるため、違いが生じます。グループおよびその他の所有者および実行可能ビット(かなり奇妙な組み合わせです)。
編集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
ここで私の質問に答えてもらい、結果についていくつかの調査を行った後、すべてを非常によく説明している記事を見つけました。今後の参考のために、この記事の一部をここで共有したいと思います。
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文字の各セットは、r
w
とx
で構成されています。 r
は常に最初の位置にあり、w
は常に2番目の位置にあり、x
は常に3番目の位置にあります。 r
は読み取り権限、w
は書き込み権限、x
は実行権限です。これらの文字のいずれかの場所にハイフン(-
)がある場合、それは許可が付与されていないことを意味し、文字が存在する場合、それは付与されます。
フォルダの場合、モードビットは次のように解釈できます。
r
(read)は、指定されたディレクトリの目次を読み取る機能を表します。w
(書き込み)は、実行ビットが設定されている場合にのみ、指定されたディレクトリの目次を書き込む機能(新しいファイル、フォルダの作成、名前の変更、既存のファイル、フォルダの削除)を表します。それ以外の場合、この権限は意味がありません。x
(実行)は、コマンドcdを使用して特定のディレクトリに入り、そのディレクトリ内のファイルやフォルダにアクセスする機能を表します。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.
権限は、すでに説明したものと同じです(r
、w
、およびx
)。
Chmodコマンドを使用すると、=の代わりに+または-を使用して、既存のセットにアクセス許可を追加および削除できます。これは上記のコマンドとは異なり、基本的に権限を書き換えます(つまり、権限をr--
からrw-
に変更するには、r
コマンドの=
の後にw
とchmod
を含める必要があります。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権限がないことに注意してください-ここでも同じことです。
これにより、Unixファイルの種類がわかります。デフォルトでは、Unixには3種類のファイルしかありません。彼らです:
-
-通常のファイルd
-ディレクトリファイルb
-ブロックファイルc
-キャラクターデバイスファイルp
-名前付きパイプファイルまたは単にパイプファイルl
-シンボリックリンクファイルs
-ソケットファイル詳細はこちら: Linux/Unixでのファイルタイプの詳細説明
0777
対777
スティッキービットが指定されているかどうか。ディレクトリのスティッキービットが設定されている場合、ファイルシステムはそのようなディレクトリ内のファイルを特別な方法で処理するため、ファイルの所有者、ディレクトリの所有者、またはrootユーザーのみがファイルの名前を変更または削除できます。スティッキービットが設定されていない場合、ディレクトリの書き込みおよび実行権限を持つユーザーは、ファイルの所有者に関係なく、含まれているファイルの名前を変更または削除できます。
0777
は777ファイルのアクセス権を設定し、スティッキービットを0に設定します-特別なモードはありません。
777
は、スティッキービットを変更せずに、777ファイルのアクセス権を設定しています。
続きを読む: sticky bit および chmod
私が常に混乱していて、上記で触れていない2つの関連するものは:
chmod
:各 '1' en許可を許可します。 chmod 777 enすべて可能ですが、
in umask
:各 '1' dis許可を許可します。 umask 777 disすべてを可能にします。
言い換えれば、「所有」しているユーザーと「使用しているユーザー」があります。
各ファイルは、同時に2つのエンティティによってownedになります。
したがって、各ファイルは、次の3つの方法で特定のユーザーが使用にすることができます。
1)直接、ファイルを所有するユーザーとして、
2)in直接、ファイルを所有するグループのメンバーとして、および
3)おそらく、他の誰かとして。
それ以外の場合、上記の答えは素晴らしい仕事をします!皆様ありがとうございました。