web-dev-qa-db-ja.com

「umask」とは何ですか、またどのように機能しますか?

Umaskは file permissions を制御するものだと思いますが、完全には理解していません。

端末umask 0644を実行した後、コマンドラインテキストエディターnanoで作成したファイルを読み取ることができません。そのファイルのパーミッションがデフォルトの0022ではなく0755に設定されていることに気付きました。

Umaskはどのように機能しますか? 07777 - 6 = 1、および7 - 4 = 3からumaskの各桁を削除できると思ったので、許可が0133になると予想しますが、明らかにそうではありませんケース。

  1. Umaskとは正確には何ですか? 「Linux初心者」のように説明してください
  2. Umaskで計算する方法は?
  3. Umaskの使用例は何ですか?
189
Lekensteyn

Umaskは、アプリケーションがファイルに設定できない一連の権限として機能します。 processesのファイルモード作成マスクであり、ディレクトリ自体には設定できません。ほとんどのアプリケーションは、実行権限が設定されたファイルを作成しないため、デフォルトの666になり、umaskによって変更されます。

所有者の読み取り/書き込みビットと他のユーザーの読み取りビットを削除するようにumaskを設定したため、アプリケーションの777などのデフォルトでは、ファイル許可が133になります。これは、ユーザー(および他のユーザー)がファイルを実行でき、他のユーザーがファイルに書き込みできることを意味します。

ファイルを所有者以外のユーザーが読み取り/書き込み/実行できないようにする場合は、077などのumaskを使用して、グループおよびその他のユーザーのアクセス許可を無効にする必要があります。

対照的に、000のumaskは、すべてのユーザーが新しく作成されたディレクトリを読み取り可能、書き込み可能、​​および下降可能にします(アクセス許可は777になります)。このようなumaskは非常に安全ではないため、umaskを000に設定しないでください。

Ubuntuのデフォルトのumaskは022でした。つまり、新しく作成されたファイルは誰でも読み取り可能ですが、所有者のみが書き込み可能です。

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Ubuntu Oneiric(11.10)以降、デフォルトのumaskは002に緩和され、所有者グループへの書き込みアクセスが拡張されました。

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

Umaskの表示と変更

現在のumask設定を表示するには、 ターミナルを開く でコマンドを実行します:

umask

現在のシェルのumask設定を077などの別のものに変更するには、次を実行します。

umask 077

この設定が機能するかどうかをテストするには、newファイルを作成し(既存のファイルのファイル権限は影響を受けません)、次に関する情報を表示できますファイル、実行:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Umask設定は、同じシェルから開始されたプロセスに継承されます。たとえば、ターミナルでgeditを実行してテキストエディターGEditを起動し、geditを使用してファイルを保存します。新しく作成されたファイルは、ターミナルと同じumask設定の影響を受けます。

ユースケース:マルチユーザーシステム

複数のユーザーが共有するシステムを使用している場合、他のユーザーがホームディレクトリ内のファイルを読み取れないことが望まれます。そのため、umaskは非常に便利です。 ~/.profileを編集して、次の行を追加します:

umask 007

この~/.profileのumaskの変更を有効にするには、再ログインする必要があります。次に、ワールドの読み取り、書き込み、実行ビットを削除して、ホームディレクトリ内のファイルの既存のファイルアクセス許可を変更する必要があります。 端末を開く を実行します:

chmod -R o-rwx ~

このumask設定をシステム上のすべてのユーザーに適用する場合は、/etc/profileでシステム全体のプロファイルファイルを編集できます。

142
ajmitch

受け入れられた答えの良い議論に加えて、12.04以降でどのように管理されているかに関して、umaskについてさらにポイントを追加する価値があります。

Umaskおよびpam_umask

デフォルトのumaskは/etc/login.defsではなく、/etc/profileではなく/etc/profileにあります。

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umaskについて簡単に説明しますが、ユーザーがカスタムumask設定を配置するためのデフォルトファイルは~/.profileのままです。

Pam_umaskは、Ubuntuの操作に不可欠な多くの重要な PAMモジュール の1つです(他のモジュールのマンページを見つけるにはapropos '^pam_'を実行します)。 manpage for pam_umaskでは、

pam_umaskは、現在の環境のファイルモード作成マスクを設定するPAMモジュールです。 umaskは、新しく作成されたファイルに割り当てられたデフォルトの許可に影響します。

デフォルトのumaskに関する注意事項

$HOMEの新しいフォルダは、デフォルトの775権限を持つmkdirと、デフォルトのumaskが022である場合でも、デフォルトの664権限を持つtouchで作成されたファイルによって作成できます。説明する価値があります。

Ubuntuのデフォルトのumaskは022ですが、/etc/login.defsには、条件が満たされた場合にルート以外のユーザーのumaskを002に設定できる設定があるため、これがすべてではありません(以下の抜粋を参照)。通常のインストールでは、/etc/login.defsには設定USERGROUPS_ENAB yesが含まれます。これは何

Uidがgidと同じで、ユーザー名がプライマリと同じ場合、非ルートユーザーの所有者ビット(例:022-> 002、077-> 007)と同じumaskグループビットの設定を有効にします。グループ名。

したがって、私のような単一ユーザーシステム上でstatを使用して新しいフォルダーが作成されたときに、mkdirで次のように表示されます(uidとgidは同じです)。

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

詳細については、man pam_umaskおよび buntu manpages online を参照してください。

38
user76204

他の回答者は、umaskingの概念とそれが必要な理由を非常によく説明しています。 2セントを追加し、アクセス許可が実際に計算される方法の数学的な例を示します。

まず第一に、「マスク」は算術的な意味で「減算」を意味しません-借用やキャリーは含まれません。第二に、umaskはマスクです。減算する数値ではありません。

第三に、マスクは許可ビットをオフにします。既にオフになっている場合、umaskは許可に変更を加えません。

たとえば、077であるファイルと666であるディレクトリのシステムデフォルトから777のマスクを解除する必要があると仮定します。

使用するコマンドは、

umask 077

(バイナリのマスク解除値、000 111 111

このアンマスクは、最初の6つのLSB(最下位ビット)が1である場合はオフにし、既にオフになっている場合は何も変更しません。

最終的な許可の計算方法は次のとおりです。

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

両方の110値が000に変更されたことを確認します。

同様に、

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
33
Sufiyan Ghori

これはかなり古いですが、これは言及する価値があります。ファイルシステムのアクセス許可とは異なり、umaskを計算します。 8進数のumaskは、ビット単位のNOTを使用して、引数の単項補数のビット単位のANDを介して計算されます。 8進数表記は次のとおりです。

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

次に、umaskの適切な許可を設定するために計算できます。

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

ファイルの最終的な許可の計算

次のように、ベースパーミッションからumaskを差し引くだけで、ファイルの最終パーミッションを決定できます。

666 – 022 = 644
  • ファイルベースのアクセス許可:666
  • umask値:022
  • 新しいファイル(666-022)の許可を取得するために減算:644 (rw-r–r–)

ディレクトリの最終的な許可の計算

次のように、ベースパーミッションからumaskを差し引くだけで、ディレクトリの最終的なパーミッションを決定できます。

777 – 022 = 755
  • ディレクトリベースの権限:777
  • umask値:022
  • 減算して、新しいディレクトリ(777-022)の権限を取得します:755 (rwxr-xr-x)
33
amrx

基本概念:

あなたがほとんどの人間に似ていて、一体型が何であるかを理解していない場合、8進数のumaskはビット単位のNOTを使用して引数の単項補数のビット単位のANDを介して計算されます」簡単な説明:

まず、「マスク」とは何かを考えます。マスクが何かをブロックします。マスキングテープを考えてください。この場合、umaskはマスキングテープに似ており、新しいファイルまたはディレクトリを作成するときに権限をブロック/無効にします。

新しいディレクトリを作成するときのデフォルトのパーミッションはoctal 777 (111 111 111)で、新しいファイルはoctal 666 (110 110 110)です。特定の許可をブロック/無効にするようにumaskを設定します。

  • 1のマスクビットは、その許可をブロック/無効にすることを意味します(そのビットにマスキングテープを貼り付けます)。
  • 0のマスクビットは、許可をパススルーさせます(そのビットにマスキングテープはありません)。

したがって、octal 022 (000 010 010)マスクは、group writeおよびothers writeを無効にし、他のすべてのアクセス許可を許可することを意味します。

計算:

次に、022 umaskを使用した新しいファイル(デフォルトの666許可)の計算例を示します。

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

そのため、新しいファイルを作成すると、644という結果になります。

簡単な方法:

ただし、逆マスク計算で混乱する場合は、シンボリックumask表記を使用する簡単な方法があります。この方法を使用する場合、マスクビットの代わりにパススルービットを指定するだけです。

  • umask u=rwx,g=rx,o=rxは、user rwxgroup rxother rxのパススルーを許可することを意味します。これは、group wothers wを無効にすることを意味します。このコマンドを実行してumaskをチェックすると、022が得られます。
  • umask u=rwx,g=,o=は、user rwxのパススルーを許可することを意味します。これは、groupおよびothersのすべてのアクセスを無効にすることを意味します。このコマンドを実行してumaskをチェックすると、077が得られます。

ボーナス計算:

実際に "8進数のumaskがビット単位のNOTを使用して引数の単項補数のビット単位のANDを介して計算される"の意味を理解したい場合、ここにいくつかの論理テーブルがあります。マスクビット1は無効を意味し、0はパススルーを意味することに注意してください。

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

NOT(mask)を使用してテーブルを作成すると、単純なAND論理テーブルになります。

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

そのための式は次のとおりです。result = perm AND (NOT mask)

13
wisbucky