Linuxのumaskとは何ですか、またどのように使用しますか?
公開: 2022-07-29 Linuxでは、すべてのディレクトリとファイルにアクセス許可があります。 chmod
を使用して、さまざまなユーザーの優先アクセス権を設定できます。 しかし、デフォルトの権限を決定するのは何ですか? umask
について話しましょう。
アクセス許可
すべてのディレクトリとファイルには、読み取り、書き込み、または実行できるかどうかを決定するモードビットと呼ばれるフラグがあります。 ファイルを実行するということは、プログラムやスクリプトのようにファイルを実行することを意味します。 ディレクトリの場合、そのディレクトリにcd
するためにディレクトリを「実行」できる必要があります。 まとめて、ビットモード設定は、ディレクトリまたはファイルのアクセス許可と呼ばれます。
3セットの権限があります。 1つのセットは、ディレクトリまたはファイルの所有者用です。 chown
で所有権が変更されていない限り、所有者はディレクトリまたはファイルを作成した人です。
2番目の権限セットは、ディレクトリまたはファイルが割り当てられているユーザーグループのメンバー用です。 通常、これは所有者のユーザーグループです。
「その他」に対する3番目の最後の権限セットがあります。 これは、最初の2つのセットに含まれていないすべての人にとってのキャッチオールです。
このように権限を分離することで、3つのカテゴリに異なる機能を与えることができます。 これは、Linuxでディレクトリとファイルへのアクセスを制御する方法です。 これは単純なスキームですが、任意のディレクトリまたはファイルで誰が何を実行できるかを指示するための柔軟で堅牢な方法を提供します。
モードビット
ls
コマンドと-l
(長い形式)オプションを使用して、ファイルのアクセス許可を確認できます。
ls -l any *
また、 -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
( ch ange mod e bits)コマンドは、ディレクトリとファイルのアクセス許可を設定するために使用されるツールです。 ただし、ディレクトリまたはファイルを作成するときに、ディレクトリまたはファイルにどのようなアクセス許可を設定するかは決まりません。 そのために、デフォルトの権限セットが使用されます。
デフォルトの権限とumask
ディレクトリのデフォルトのアクセス許可は777で、ファイルのデフォルトのアクセス許可は666です。これにより、すべてのユーザーにすべてのディレクトリへのフルアクセスと、任意のファイルの読み取りおよび書き込み機能が付与されます。 実行ビットはファイルに設定されていません。 実行ビットがすでに設定されているファイルを作成することはできません。 それはセキュリティリスクを引き起こす可能性があります。
ただし、新しいディレクトリと新しいファイルを作成してそれらのアクセス許可を確認すると、777と666に設定されません。ファイルとディレクトリを作成し、 grep
を介してパイプされたstat
を使用して次の行を抽出します。それらの権限の8進表現。
タッチumask-article.txt
mkdir howtogeek
stat umask-article.txt | grep"アクセス:("
stat howtogeek | grep"アクセス:("
ディレクトリの場合は775、ファイルの場合は664に設定されています。 umask値と呼ばれる別の値がそれらを変更するため、これらはグローバルなデフォルトのアクセス許可に設定されていません。
umask値
umask値はグローバルに設定され、rootには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になりました。
stat umask-article.txt | grep"アクセス:("
stat howtogeek | grep"アクセス:("
これにより、ディレクトリとファイルの両方のその他のカテゴリから書き込み権限が削除されます。
rootがディレクトリを作成する場合、そのumask値022が適用されます。 その他のカテゴリとグループカテゴリの書き込み権限も削除されます。
sudo mkdir root-dir
stat howtogeek | grep"アクセス:("
777のデフォルトの権限が755に減少していることがわかります。
関連: Lynisを使用してLinuxシステムのセキュリティを監査する方法
デフォルトの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
新しい値がアクティブです。
関連: Windows、macOS、またはLinuxからSSHサーバーに接続する方法
umaskの短期的な変更
別のumask値が短期的に必要な場合は、 umask
コマンドを使用して現在のセッションの値を変更できます。 おそらく、ディレクトリツリーといくつかのファイルを作成し、それらのセキュリティを強化したいとします。
umask値を077に設定してから、新しい値がアクティブであることを確認できます。
umask 077
umask
グループおよびその他のカテゴリでマスクの値を7に設定すると、これらのカテゴリからすべての権限が削除されます。 あなた(およびroot)以外の誰もが新しいディレクトリに入り、ファイルを読んだり編集したりすることはできません。
mkdirsecure-dir
ls -ld secure-dir
唯一の権限は、ディレクトリ所有者に対するものです。
mkdir secure-file.txt
ls -ld secure-file.txt
このファイルは、他のユーザーからのスヌーピングに対して安全です。 ターミナルウィンドウを閉じると、一時的なumask設定が破棄されます。
umaskが使用される他の方法
Linuxでは、一部のプロセスがシステムのumask値を継承したり、独自のumask設定を指定したりできます。 たとえば、 useradd
はumask設定を使用して、新しいユーザーのホームディレクトリを作成します。
umask値はファイルシステムにも適用できます。
少ない/etc/ fstab
このコンピューターでは、「/ boot/efi」ファイルシステムに077のumask設定が適用されています。
ls
を使用してファイルシステムのマウントポイントを見ると、umask値によって、所有者であるroot以外のすべてのユーザーからすべてのアクセス許可が削除されていることが確認できます。
ls / boot / efi -ld
umaskとパーミッションはお互いを必要とします
デフォルトの権限は、umask値によって変換された後、ディレクトリまたはファイルに適用されます。 ユーザーのumask値を永続的に変更する必要があることは非常にまれですが、機密性の高いディレクトリまたはドキュメントのコレクションを作成するときに、umask値を一時的に設定してより厳密なアクセス許可を与えることは、それらを強化するための迅速で簡単な方法です。安全。
関連: UFWファイアウォールでLinuxサーバーを保護する方法