Linux では、すべてのディレクトリとファイルに
アクセス許可が
あります。
chmod
を使用して、さまざまなユーザーに優先アクセス権を設定できます。しかし、デフォルトの権限は何によって決まるのでしょうか?
umask
について話しましょう。
アクセス許可
すべての
ディレクトリとファイルには、
読み取り、書き込み、または実行が可能かどうかを決定するモード ビットと呼ばれるフラグがあります。ファイルの実行とは、プログラムやスクリプトのようにファイルを実行することを意味します。ディレクトリの場合、ディレクトリを「実行」してそのディレクトリに
cd
できる必要があります。ビット モード設定を総称して、ディレクトリまたはファイルのアクセス許可と呼びます。
権限には 3 つのセットがあります。 1 つのセットはディレクトリまたはファイルの所有者用です。所有権が変更されていない限り、
chown
、所有者はディレクトリまたはファイルを作成した人です。
2 番目の権限セットは、ディレクトリまたはファイルが割り当てられているユーザー グループのメンバーに対するものです。通常、これは所有者のユーザー グループです。
「その他」に対する 3 番目の最後の権限セットがあります。これは、最初の 2 つのセットに含まれていないすべての人のための総括です。
このように権限を分離することで、3 つのカテゴリに異なる機能を与えることができます。これは、Linux でディレクトリとファイルのアクセスが制御される方法です。これは単純なスキームですが、ディレクトリまたはファイルに対して誰が何を実行できるかを指示する柔軟かつ堅牢な方法を提供します。
モードビット
ファイルのアクセス許可を確認するには、
ls
コマンドと
-l
(長い形式) オプション。
ls -l 任意*
-d
(ディレクトリ) オプションを追加してディレクトリも調べます。このオプションを使用しないと、
ls
ディレクトリ自体ではなく、ディレクトリ内のファイルを調べます。
ls -ld
ls
リストの各エントリの先頭には、10 文字のコレクションがあります。ここでは、ファイルとディレクトリの文字のクローズアップを示します。
一番上の行がファイル、下の行がディレクトリです。一番最初の文字は、ディレクトリとファイルのどちらを見ているのかを示します。 「d」はディレクトリを示し、ダッシュ「
-
」はファイルを示します。
3 つの権限セットは、3 文字の各グループによって示されます。左から右に、これらは所有者、グループ、その他の権限です。各権限セットの 3 文字は、左から右に、読み取り権限「r」、書き込み権限「w」、および実行権限「x」の設定を示します。文字は権限が設定されていることを意味します。ダッシュ「
-
」は、権限が設定されていないことを意味します。
このサンプル ファイルの場合、10 文字は次のことを意味します。
- – : これはディレクトリではなくファイルです。
- rwx : 所有者は、このファイルの読み取り、書き込み、および実行ができます。
- rw- : このファイルが割り当てられている同じグループの他のメンバーは、ファイルの読み取りと書き込みはできますが、ファイルを実行することはできません。
- r– : 他の人はファイルを読み取ることしかできません。
この例のディレクトリでは、10 文字は次のことを意味します。
- d : これはディレクトリです。
-
rwx
: 所有者は、このディレクトリの読み取り、書き込み、実行 (
cdによる実行) ができます。 -
rwx
: 同じグループの他のメンバーは、このディレクトリに対して読み取り、書き込み、および
cd実行できます。 -
rx
: 他の人はこのディレクトリに
cdできますが、ファイルの読み取りのみが可能です。ファイルの削除、編集、または新しいファイルの作成はできません。
アクセス許可は、ディレクトリまたはファイルのメタデータのモード ビットに保存されます。各モード ビットには数値があります。設定されていない場合、値はすべてゼロになります。
- r : 設定されている場合、読み取りビットの値は 4 になります。
- w : 設定されている場合、書き込みビットの値は 2 になります。
- x : 実行ビットは、設定されている場合、値が 1 になります。
3 つの権限のセットは、ビット値の合計で表すことができます。最大値は 4+2+1=7 で、セット内の 3 つの権限すべてが「オン」に設定されます。つまり、3 つのセットすべての順列を 3 桁の 8 進数 (基数 8) の値 で捉えることができます。
上記のファイルの例では、所有者には読み取り、書き込み、および実行のアクセス許可 (4+2+1=7) があります。ファイルが属するグループの他のメンバーには、読み取りおよび書き込み権限 (4+2=6) が与えられます。その他のカテゴリには、読み取り権限セット (単純に 4) のみがあります。
したがって、そのファイルのアクセス許可は 764 と表すことができます。
同じスキームを使用すると、ディレクトリのアクセス許可は 775 になります。
stat
コマンドを使用すると、アクセス許可の 8 進数表現を確認できます。
chmod
(
change
mode
bits) コマンドは、ディレクトリとファイルのアクセス許可を設定するために使用されるツールです。ただし、ディレクトリまたはファイルの作成時にどのようなアクセス許可が設定されるかは決まりません。そのためには、デフォルトの権限セットが使用されます。
デフォルトの権限とumask
ディレクトリのデフォルトの権限は 777、ファイルのデフォルトの権限は 666 です。これにより、すべてのユーザーにすべてのディレクトリへの完全なアクセス権が与えられ、任意のファイルの読み取りと書き込みが可能になります。ファイルには実行ビットが設定されていません。すでに実行ビットが設定されているファイルを作成することはできません。これにより、セキュリティ上のリスクが生じる可能性があります。
ただし、新しいディレクトリと新しいファイルを作成してそれらのアクセス許可を確認すると、それらは 777 と 666 に設定されていません。ファイルとディレクトリを作成し、
grep
を介してパイプされた
stat
を使用して
次の行を抽出します。権限の 8 進数表現。
umask-article.txt にタッチ
mkdir ハウツーギーク
統計 umask-article.txt | grep "アクセス: ("
統計ハウツーオタク | grep "アクセス: ("
ディレクトリの場合は 775、ファイルの場合は 664 に設定されます。これらは、umask 値と呼ばれる別の値によって変更されるため、グローバルなデフォルトの権限には設定されません。
umask 値
umask 値は、ルートに対して 1 つの値を使用し、他のすべてのユーザーに対しては異なる値を使用してグローバルに設定されます。ただし、誰でも新しい値に設定できます。現在の umask 設定を確認するには、
umask
コマンドを使用します。
umask
そしてルートの場合:
umask
新しく作成されたディレクトリまたはファイルの権限は、グローバルのデフォルト権限を変更する umask 値の結果です。
モード ビットと同様に、umask 値は同じ 3 つの権限セット (所有者、グループ、その他) を表し、それらを 3 つの 8 進数で表します。場合によっては、最初の桁がゼロの 4 桁で書かれているのを目にすることがあります。これは、「これは 8 進数です」と言う省略的な方法です。重要なのは右端の 3 桁です。
umask 値では権限を追加できません。許可を削除またはマスクアウトすることのみが可能です。そのため、デフォルトの権限は非常に寛大です。これらは、umask 値を適用することで適切なレベルに引き下げられるように設計されています。
1 つのデフォルトのアクセス許可セットがすべてのユーザーに適しているわけではなく、すべてのシナリオに適しているわけでもありません。たとえば、root によって作成されたディレクトリとファイルには、平均的なユーザーよりも制限されたアクセス許可が必要になります。また、平均的なユーザーであっても、「その他」カテゴリの全員が自分のファイルを参照したり変更したりできるようにすることは望ましくありません。
umask がアクセス許可をマスクする方法
デフォルトの権限からマスク値を減算すると、実際の権限が得られます。つまり、umask 値に権限が設定されている場合、ディレクトリまたはファイルに適用される権限には設定されません。
umask 値は、通常のアクセス許可値の逆として機能します。
- 0 : 権限は削除されません。
- 1 : 権限で実行ビットが設定されていません。
- 2 : 権限で書き込みビットが設定されていません。
- 4 : 読み取りビットは権限で設定されていません。
ディレクトリのデフォルトのアクセス許可 777、ファイルのアクセス許可 666 は、umask 値 002 によって変更され、テスト ディレクトリとファイルに対する最終的なアクセス許可 775 と 664 が得られました。
統計 umask-article.txt | grep "アクセス: ("
統計ハウツーオタク | grep "アクセス: ("
これにより、ディレクトリとファイルの両方のその他のカテゴリから書き込み権限が削除されます。
root がディレクトリを作成すると、umask 値 022 が適用されます。その他のカテゴリおよびグループ カテゴリの書き込み権限も削除されます。
sudo mkdir ルートディレクトリ
統計ハウツーオタク | grep "アクセス: ("
デフォルトの権限 777 が 755 に減少していることがわかります。
デフォルトの umask 値の変更
ログイン シェルと非ログイン シェルでは異なる umask 値があります。ログイン シェルは、ローカルまたは SSH 経由で リモートにログインできるシェルです。非ログイン シェルは、すでにログインしているときのターミナル ウィンドウ内のシェルです。
ログイン シェルの umask を変更する場合は、十分に注意してください。権限を増やしてセキュリティを低下させないでください。むしろ、それらを減らし、より制限を厳しくする傾向があるはずです。
Ubuntu および Manjaro では、umask 設定は次のファイルにあります。
- ログインシェルの umask : ログインシェルのデフォルトの umask 値: /etc/profile
- 非ログイン シェル : 非ログイン シェルのデフォルトの umask 値: /etc/bash.bashrc
Fedora では、umask 設定は次のファイルにあります。
- ログインシェルの umask : ログインシェルのデフォルトの umask 値: /etc/profile
- 非ログイン シェル : 非ログイン シェルのデフォルトの umask 値: /etc/bashrc
これらを変更する差し迫った必要がない場合は、そのままにしておくのが最善です。
推奨される方法は、デフォルトとは異なる必要がある個々のユーザー アカウントに新しい umask 値を設定することです。新しい umask 設定は、ユーザーのホーム ディレクトリにある「.bashrc」ファイルに追加できます。
gedit .bashrc
ファイルの先頭近くに umask 設定を追加します。
ファイルを保存してエディタを閉じます。新しいターミナル ウィンドウを開き、
umask
コマンドで umask 値を確認します。
umask
新しい値がアクティブになります。
umask への短期的な変更
別の umask 値に対する短期的な要件がある場合は、
umask
コマンドを使用して現在のセッションの値を変更できます。おそらく、ディレクトリ ツリーといくつかのファイルを作成し、それらのセキュリティを強化したいと考えているでしょう。
umask 値を 077 に設定し、新しい値がアクティブであることを確認できます。
ウマスク077
umask
グループおよびその他のカテゴリでマスクの値を 7 に設定すると、それらのカテゴリからすべての権限が剥奪されることになります。あなた (および root) 以外の誰も、新しいディレクトリに入ってファイルを読み取ったり、編集したりすることはできません。
mkdir セキュアディレクトリ
ls -ld セキュアディレクトリ
唯一の権限はディレクトリ所有者に対するものです。
mkdir セキュアファイル.txt
ls -ld セキュアファイル.txt
ファイルは他のユーザーからの覗き見に対して安全です。ターミナル ウィンドウを閉じると、一時的な umask 設定が破棄されます。
umask のその他の使用方法
Linux では、一部のプロセスがシステムの umask 値を継承したり、独自の umask 設定を与えられたりすることができます。たとえば、
useradd
umask 設定を使用して、新しいユーザーのホーム ディレクトリを作成します。
umask 値はファイルシステムにも適用できます。
/etc/fstab を減らします
このコンピュータでは、「/boot/efi」ファイルシステムに umask 設定 077 が適用されています。
ls
でファイルシステムのマウント ポイントを確認すると、umask 値によって、所有者である
root
を除くすべてのユーザーからすべてのアクセス許可が削除されていることを確認できます。
ls /boot/efi -ld
umask と権限は相互に必要です
デフォルトの権限は、umask 値によって変換された後、ディレクトリまたはファイルに適用されます。ユーザーの umask 値を永続的に変更する必要があることは非常にまれですが、機密性の高いディレクトリまたはドキュメントのコレクションを作成するときに、umask 値を一時的に設定してより厳格な権限セットを与えることは、ユーザー の機密性を強化する 迅速かつ簡単な方法です。 安全 。





