今日までchmod
がどのように機能するかを実際に理解したことはありません。私に大したことを説明したチュートリアル。
たとえば、3つの異なる権限グループがあることを「読んだ」:
- 所有者(
u
) - グループ(
g
) - 全員(
o
)
これらの3つのグループに基づいて、次のことがわかりました。
- ファイルがユーザーによって所有されている場合、ユーザーのアクセス許可によってアクセスが決まります。 。
- ファイルのグループがユーザーのグループと同じである場合、グループ権限によってアクセスが決定されます。
- ユーザーがファイルの所有者ではなく、そうでない場合グループ内では、他の権限が使用されます。
また、次の権限があることもわかりました。
- 読み取り(
r
) - 書き込み(
w
) - 実行()
新しく取得した知識をテストするためのディレクトリを作成しました:
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
の使用例。
ファイルタイプ
ls -l
outputはファイルタイプを表します。 d
は、ディレクトリであることを意味します。設定または設定解除することはできません。ファイルの作成方法によって異なります。ファイルタイプの完全なリストは、 lsドキュメントにあります。遭遇する可能性が高いのは
-
-
:ファイルを書き込むことができる任意のプログラムで作成された「通常の」ファイルです -
b
:ブロック特殊ファイル(通常はディスクまたはパーティションデバイス)は、mknod
-
c
:文字特殊ファイル。mknod
を使用して作成することもできます(例については、/dev
を参照してください)。 -
d
:ディレクトリ。mkdir
- :シンボリックリンク。
ln -s
-
p
:名前付きパイプで作成できます。mkfifo
-
s
で作成できます:ソケット、nc -U
-
D
:ドア。Solaris/上の一部のサーバープロセスによって作成されます。 openindiana。
許可
chmod 0777
は、変更をiv id = “と組み合わせるのではなく、1回のchmod
実行ですべての権限を設定するために使用されます。 9406d3ddbd “>
など。4桁のそれぞれは、権限のセットを表す8進数の値です:
-
suid
、sgid
および「スティッキー」(以下を参照) - ユーザー権限
- グループ権限
- 「その他」の権限
8進数値は、アクセス許可の合計として計算されます。
- 「読み取り」は4
- 「書き込み」は2
- 「実行」は1
最初の桁の場合:
-
suid
は4です。このビットが設定されたバイナリは、所有者ユーザーとして実行されます(通常はroot
) -
sgid
は2です。このビットセットのバイナリは所有者グループとして実行され(これはゲームで使用されたため、ハイスコアを共有できましたが、ゲームの脆弱性と組み合わせるとセキュリティリスクになることがよくあります)、このビットセットのディレクトリに作成されたファイルはに属しますデフォルトでは、ディレクトリの所有者グループ(これは共有フォルダの作成に便利です) - 「スティッキー」(または「制限付き削除」)は1です。このビットが設定されたディレクトリ内のファイルは、所有者、ディレクトリの所有者、または
root
のみが削除できます(一般的な例については、/tmp
を参照してください)。
詳細については、 chmod
のマンページを参照してください。このすべてにおいて、ファイルに対するユーザーのアクセス許可を変更する可能性のある他のセキュリティ機能(SELinux、ファイルACL …)を無視していることに注意してください。
特別なビットは、ファイルのタイプに応じて異なる方法で処理されます(通常ファイルまたはディレクトリ)および基盤となるシステム。 (これはchmod
のマンページに記載されています。)これをテストするために使用したシステムでは(coreutils
8.23でext4
ファイルシステム、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
、および「sticky」がx
エントリ:suid
はs
またはS
ユーザーのx
の代わりに、sgid
はs
またはivid = “ceaa565000グループのx
の代わりに “> であり、「sticky」はt
またはT
xの代わりに/ div>。小文字は、特殊ビットと実行可能ビットの両方が設定されていることを示します。大文字は、特殊ビットのみが設定されていることを示します。
さまざまな形式のchmod
上記の動作のため、chmod
は混乱する可能性があります(少なくとも私は混乱していたことがわかりました)。パーミッションビットだけでなく特別なビットも設定する場合に便利です。それ以外の場合、ファイルを操作している場合はビットがクリアされ、ディレクトリを操作している場合は保持されます。したがって、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
を他のすべてのファイル。
コメント
- 他の回答はかなり良かったのですが、あなたは本当にこの質問に答えるのに時間を費やしました。ありがとう。
- * BSDディレクトリでは、実際の値に関係なく、
sgid
ビットが常に設定されているかのように動作します。 FreeBSDでは、suid
ビットをsgid
と同様に動作するように構成できます(つまり、内部で作成されたファイルとサブディレクトリは、ディレクトリと同じ所有者になります)、基盤となるファイルシステムがそれをサポートし、suiddir
オプションでマウントされている場合。 - ”
+X
は、実行権限の1つがすでに設定されている場合、またはファイルがディレクトリである場合にのみ、実行権限を追加します”ありがとうございますあなた@ stephen-kittが “を見逃しているとすでに設定されています” ドキュメントは本当に私をループさせていました!
回答
したがって、Linuxでのアクセス許可は非常に重要です。簡単な説明をしようと思います。
ファイルモードの一部の場合
すべてのUnixファイルには、ファイルの読み取り、書き込み、または実行ができるかどうかを決定する一連のアクセス許可があります。 ls -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/
chmod777と0777の場合
chmod
コマンドは通常、入力を予期します8進数であるため、先行ゼロはsticky / sgid / suidビットトリプレットの値を示します。ただし、Cでは、777
が01411
(8進数)に変換され、スティッキービットが設定されるため、違いが生じます(を参照)。 chmod(2)
manページ)、所有者の読み取り権限とグループおよびその他の実行可能ビット(これはかなり奇妙な組み合わせです)。
編集1
Linuxのアクセス許可に関する他の写真を見つけたので、わかりやすくするために添付します:
コメント
- 777と0777については間違っています。どちらも8進数です(10進数はとにかく意味がありません)この場合)、ただし4文字の形式では、最初の桁が特別なビットを設定します(sticky & setuid)。
- @orion場合によっては、実際には真実です。例えばCのようなコードでは、
chmod(777)
は実際にはchmod 1411
(つまり、chmod
引数1411
)を使用したdiv>コマンド。 - …これは、syscall(またはそのラッパー)と同じ名前のバイナリの場合は次のようになります。少し紛らわしいです。
- Pythonマスターレースは、0で始まるすべての”番号”を禁止することで、この後方の問題を解決しました。 、10進数以外のものが必要な場合は、ユーザーに明示的に強制します。 16進数:
0x1FF
、2進数:0b111111111
または8進数:0o777
。 PYTHON POWER - 画像ソース?
回答
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」)は、所有者が属するグループです(グループの詳細を参照してください)。
次の列は、ファイルまたはディレクトリのサイズ(バイト単位)とその後の情報です。ファイルまたはディレクトリが最後に変更された日時であり、もちろんファイルまたはディレクトリの名前です。
権限の意味
最初の3文字の後の最初の3文字-
またはd
は、所有者が持っている権限です。次の3文字は、グループに適用される権限です。最後の3文字は、他のすべての人に適用される権限です。
3文字の各セットは、r
w
およびx
。 r
は常に最初の位置にあり、w
は常に2番目の位置にあり、x
は常に3番目の位置にあります。 r
は読み取り権限、w
は書き込み権限、x
は実行権限です許可。これらの文字のいずれかの代わりにハイフン(-
)がある場合は、許可が付与されていないことを意味し、文字が存在する場合は許可されます。
フォルダ
フォルダの場合、モードビットは次のように解釈できます。
-
r
(読み取り)スタンド指定されたディレクトリのコンテンツテーブルを読み取る機能の場合、 -
w
(書き込み)は、指定されたディレクトリのコンテンツテーブルを書き込む機能を表します。 (新しいファイル、フォルダーの作成、名前の変更、既存のファイル、フォルダーの削除)実行ビットが設定されている場合のみ。それ以外の場合、この権限は無意味です。 -
x
(実行)は、コマンドcdを使用して特定のディレクトリにアクセスし、そのディレクトリ内のファイルやフォルダにアクセスする機能を表します。
chmodコマンドを使用した権限の変更
chmod
は、Linuxおよびその他のUnixライクなオペレーティングシステムのコマンドです。ファイルまたはディレクトリのアクセス許可(またはアクセスモード)を変更できます。
アクセス許可は、次の2つの方法で変更できます。-テキストベースのchmod
-数値ベースのchmod
テキストメソッド
アクセス許可またはファイルのアクセスモードを変更するには、次のコマンドでchmodコマンドを使用します。ターミナル。コマンドの一般的な構造は次のとおりです。
chmod who=permissions filename
ここで、文字の範囲の誰が誰であり、それぞれが許可を与える相手を示します。 。次のとおりです。
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コマンドを使用すると、代わりに+または-を使用して既存のセットに権限を追加および削除できます。 of =。これは、基本的に権限を書き換える(つまり、権限をr--
からrw-
に変更する上記のコマンドとは異なります。 、=
の後に=
とw
を含める必要があります。 div id = “4f801e3eef”>
コマンド。r
を見逃した場合、r
権限が失われます。 =で書き直されています。Usin g +および-現在の権限のセットを追加または削除して、これを回避します)。
番号メソッド
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権限の欠如に関する最後のメモを参照してください-ここでも同じことです。
コメント
- 別の記事からテキストをコピーするだけでは、少なくとも失礼です。たぶん著作権侵害でもあります。コピーされただけでなく、実際に小さなパーツを使用した場合(フェアユースのおかげで著作権に優しい)、少なくとも参照/引用している記事へのリンクを追加してください。
回答
dの質問の場合
これにより、Unixファイルの種類がわかります。デフォルトでは、Unixには3種類のファイルしかありません。
-
-
-通常のファイル -
d
-ディレクトリファイル - 特別なファイル(5つのサブタイプ):
-
b
-ブロックファイル -
c
-文字デバイスファイル -
p
-名前付きパイプファイルまたは単にパイプファイル -
l
-シンボリックリンクファイル -
s
-ソケットファイル
-
詳細はこちら: Linux / Unixのファイルタイプの詳細説明
0777
vs 777
スティッキービットが指定されているかどうか。ディレクトリのスティッキービットが設定されている場合、ファイルシステムはそのようなディレクトリ内のファイルを特別な方法で処理するため、ファイルの所有者、ディレクトリの所有者、またはrootユーザーのみがファイルの名前を変更または削除できます。スティッキービットがない場合設定すると、ディレクトリの書き込みおよび実行権限を持つすべてのユーザーが、ファイルの所有者に関係なく、含まれているファイルの名前を変更または削除できます。
0777
は777ファイルの権限を設定します、およびスティッキービットを0に設定します-特別なモードはありません。
777
は、スティッキービットを変更せずに777ファイルのアクセス許可を設定しています。
コメント
- より良い:しかし、他の回答がまだカバーしていない’それでも何も提供しません…
- ( 1)3つの基本的なファイルタイプがあります:プレーンファイル、ディレクトリ、その他すべて。何?どこで手に入れますか?物事の素晴らしいスキームでは、プレーンファイルとディレクトリはかなり似ています。名前付きパイプとシンボリックリンクは、デバイスファイルやソケットではなく、プレーンファイルやディレクトリに似ています。 (2)
chmod 777
は、setuid、setgid、およびstickyビットをクリアしないと思いますか?試してみてください。 - Unixには3つではなく7つのファイルタイプがあります。
回答
私がいつも混乱していると感じ、上記では触れていない2つの関連事項は、次のとおりです。
I)「 1 “は:
chmod
:各 “1” en は、chmod 777 en はすべて可能ですが、
umask
にあるため、注意が必要です。 :各 “1” dis は権限を付与します(例:umask 777 dis すべての可能性
II )ファイル「所有者」とファイル “users” :
つまり、「所有」するユーザー、および「使用する」ユーザー。
各ファイルは所有されています同時に、2つのエンティティによって所有されています:
- 単一の特定のユーザー、および
- 単一の特定の group (1人以上のユーザー)
したがって、各ファイルは特定のユーザーが次の3つの方法でを使用しました。
1)直接、所有するユーザーとしてfile、
2) in 直接、ファイルを所有するグループのメンバーとして、および
3 )おそらく、他の誰かとして。
それ以外の場合、上記の答え、素晴らしい仕事をしてください!みんなありがとう。
S_IFDIR
という名前のヘッダーファイルにあります。 ‘はファイルモードの設定時に使用しませんが、stat()
関数は実際には。