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


190

umaskはファイルのアクセス権を制御するものであると考えていますが、完全には理解していません。

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

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

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

app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
-grabantot

回答:


143

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

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

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

対照的に、のumask 000は、新しく作成されたディレクトリをすべての人が読み取り可能、書き込み可能、​​および下降可能にします(パーミッションはになります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

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

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

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

chmod -R o-rwx ~

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


3
それでは、umaskの数字は何を意味するのでしょうか?なぜ777グループや他の人は書き込みできるのに、書き込み077できないのでしょうか?
HelloGoodbye

3
また、umaskがの000場合、ファイル許可はになると言います777。デフォルトのマスクを持つので022、ファイルのアクセス権があってはならない755、すなわちに対応した-rwxr-xr-x、ではありませんか-rw-r--r--
HelloGoodbye

12
認めなければならない、この説明は私を助けた以上に私を混乱させた。
コネルフーリー

8
注意していることをUbuntuのデフォルトのumaskを0002に変更し、この答えが掲載された後ちょうど一ヶ月。
ジェフパッケット

7
@HelloGoodbyeは、umaskが000許可されていない場合、許可は削除されません。以下のようなアプリケーションtouchnano、デフォルトでファイルを作成666、ファイルのアクセス権が残りますので、666しかし、のumask値は022、そのグループおよびその他の書き込みビットを削除します666に還元ます644またの名を -rw-r--r--考えてみましょうmkdirのモードを作成したデフォルト777のumask値と022に権限を削減する755
ジェフパッケット

38

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

Umaskとpam_umask

デフォルトのumaskはin /etc/login.defsでなくin /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_'他のモジュールのマンページを見つけるために実行します)。でmanページのためpam_umaskのことが注目されます

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

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

中に新しいフォルダ$HOMEが作成できmkdirて作成されたデフォルトで775のパーミッションやファイルtouchのデフォルトのumaskが022であるときに、デフォルトで664権限も、これは矛盾し、最初は、と思われる、と説明する価値があります。

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

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

したがってstat、新しいフォルダがmkdirmineなどの単一のユーザーシステムで作成されたときに次のように表示される理由(uidとgidは同じです):

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

詳細についてはman pam_umask、およびオンラインUbuntuマンページを参照して ください。


2番目の部分に何かが欠けているように見えますか?(USERGROUP_ENABLE?)更新された情報の+1
Lekensteyn

2
@Lekensteyn奇妙なことに、設定/etc/login.defsは間違いなくUSERGROUPS_ENAB yesそれをチェックした後です。そのファイルの構文は少し変わっています。

ファイルとソースを確認したところ、この設定(および他のいくつかの設定)の名前は紛らわしい「_ENAB」です。
-Lekensteyn

33

これはかなり古いですが、これは言及する価値があります。ファイルシステムのアクセス許可とは異なり、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)

3
私はそれが最終的な許可がどのように計算されるとは思わない、その場合にマスク解除値が077どのように減算666-077するのか?
スフィヤンゴリ

5
@SufiyanGhori Baronの説明は、ファイルの許可に関して完全ではありません。あなたの場合と将来の計算では、覚えやすいように、この方法でそれらを減算することに留意する必要があります:6-0 6-7 6-7これら3つの結果が-1の場合、0にします。最終結果600を持つ
Huy.PhamNhu

1
@ Huy.PhamNhuそれも正しくありません。666の基本許可と033のumaskを使用すると、確実に633を取得できません。
-maaartinus

7
ダメダメダメ。減算を使用してumaskを計算することはできません(すべてではありませんが、特定の値で機能します)。umaskは「ビットを無効にする」と考える必要があります。SufiyanとWisbuckyによる他の回答を参照してください。
ウィスバッキー

33

他の回答者は、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

7
これが答えになるはずです!
アブデルアアブ16

@SufiyanGhoriもしそうであれば umask 177(001 111 111)、それらがある場合、それは最初の7つの最下位ビットをオフにします1
Kasun Siyambalapitiya

それは正しい@KasunSiyambalapitiyaある
Sufiyan Ghori

1
式もresult = file permission & (!umask)
同様です

1
@EricHodgins:はい、正確に。
アミットナイドゥ

14

基本コンセプト:

あなたがほとんどの人間に似ていて、「8進数のumaskがビット単位のNOTを使用して引数の単項補数のビット単位のANDを介して計算される」という意味がわからない場合、ここに簡単な説明があります。

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

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

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

だから、octal 022 (000 010 010)マスクは無効にすることgroup writeothers 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 wにすることを意味しothers wます。このコマンドを実行してチェックするとumask、が表示されます022
  • umask u=rwx,g=,o=はのパススルーを許可することを意味しuser rwxます。これはのためのすべてのアクセスを無効に暗示groupしてothers。このコマンドを実行してチェックするとumask、が表示されます077

ボーナス計算:

「ビット単位のNOTを使用して、引数の単項補数のビット単位のANDを介して計算される8進数のumask」の意味を実際に理解したい場合、ここにいくつかの論理表があります。マスクビット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)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.