chmod
私は今日までそれがどのように機能するのか本当に理解していませんでした。私はチュートリアルに従い、それは私に1つの大きなことを説明しました。
たとえば、次の 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
?
しかし、いくつかの質問をしてはいけないので、一つの質問でまとめてみましょう。
すべてのLinuxディストリビューションなどのUNIXベースのシステムでは、権限に関して最初のd
部分()はどういう意味ですか?これらの権限の用途は何ですか?
答え1
あなたの質問については、ファイル形式、権限、さまざまな形式の3つの部分に分けて回答しますchmod
。
ファイルタイプ
出力の最初の文字はls -l
ファイル形式を表します。d
つまり、ディレクトリです。ファイルの生成方法によっては設定や設定解除はできません。ファイル形式の完全なリストは以下にあります。ls ドキュメント;あなたが会えるのは
-
:ファイルを書き込むことができるすべてのプログラムを使用して生成された「一般」ファイルb
:通常、ディスクまたはパーティションデバイスであるブロック特殊ファイルは、以下を使用して作成できます。mknod
c
:文字特殊ファイルを使用して作成することもできますmknod
(/dev
例を参照)。d
:次のコマンドを使用して作成できるディレクトリmkdir
l
:次のコマンドを使用して生成できるシンボリックリンクln -s
p
:次のコマンドを使用して生成できる名前付きパイプmkfifo
s
:Socket(次のコマンドを使用して作成できます)nc -U
D
:ドア、Solaris / openindianaの一部のサーバープロセスによって生成されます。
特権
chmod 0777
変更などをchmod
組み合わせるのではなく、1回の実行ですべての権限を設定するために使用されます。u+
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
出力では、 "sticky"suid
はsgid
項目の位置に表示されますx
。suid
ofs
またはS
for the user x
, sgid
fors
またはS
for the groupx
および "sticky" for t
or T
for someone else x
。小文字は特殊ビットと実行可能ビットの両方が設定されたことを示し、大文字は特殊ビットのみが設定されたことを示します。
様々な形態のchmod
上記の動作により、合計4桁の数字を使用するのは混乱する可能性があり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
他のすべてのファイルに適用されます。
答え2
したがって、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/
chmod 777と0777の場合
このchmod
コマンドは通常、入力が8進数であることを期待し、先行ゼロはSticky / sgid / suidビット三重項の値を表します。ただし、Cでは(octal)777
に変換され、01411
固定ビット(chmod(2)
マンページを参照)、所有者の読み取り権限、グループなどの実行ビット(AではなくA)を設定する点が異なります。奇妙な組み合わせ)
編集1
Linuxの権限に関する別の写真を見つけました。わかりやすいように添付します。
答え3
d
はディレクトリという意味で、ファイルがあればファイルであり-
、リンクなら検索できますl
。設定/設定解除できません。
0777を権限として使用すると、システム内のすべてのユーザー/グループにすべての権限(読み取り+書き込み+実行)が付与されます。これは、ユーザー/グループがディレクトリ/ファイルにアクセスできないときに問題を解決するための怠惰な方法です。
たとえば、ディレクトリの内容を一覧表示して次のような場合:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preload_libintl.soユーザールートとグループルートが所有するファイル。これ所有者読み取りおよび書き込みアクセス権があります。グループ読み取り専用とすべて他のユーザー読み取り権限があります。これは644と解釈されます。
777に変更すると、次のようになります。
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
答え4
質問dの場合
これはUnixファイルの種類を伝えます。デフォルトでは、Unixには3種類のファイルしかありません。彼らは:
-
- 一般ファイルd
- カタログファイル- 特殊ファイル(5つのサブタイプを含む):
b
- ファイルのブロックc
- キャラクターデバイスファイルp
- 名前付きパイプファイルまたは単にパイプファイルl
- シンボリックリンクファイルs
- ソケットファイル
詳しくはこちらをご覧ください。Linux/Unixのファイル形式の詳細な説明
0777
そして777
固定ビットを指定するかどうか。ディレクトリの固定ビットが設定されると、ファイルシステムは、ファイルの所有者、ディレクトリの所有者、またはルートユーザーのみがファイル名を変更したりファイルを削除したりできるように、そのディレクトリ内のファイルを特別な方法で処理します。固定ビットが設定されていない場合、ディレクトリへの書き込みおよび実行権限を持つユーザーは、ファイルの所有者に関係なく、含まれるファイルの名前を変更または削除できます。
0777
777ファイル権限を設定し、固定ビットを0(特殊モードなし)に設定します。
777
固定ビットを変更せずに777ファイル権限を設定します。