Umaskは file permissions を制御するものだと思いますが、完全には理解していません。
端末 でumask 0644
を実行した後、コマンドラインテキストエディターnano
で作成したファイルを読み取ることができません。そのファイルのパーミッションがデフォルトの0022
ではなく0755
に設定されていることに気付きました。
Umaskはどのように機能しますか? 0777
、7 - 6 = 1
、および7 - 4 = 3
からumaskの各桁を削除できると思ったので、許可が0133
になると予想しますが、明らかにそうではありませんケース。
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設定を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
でシステム全体のプロファイルファイルを編集できます。
受け入れられた答えの良い議論に加えて、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 を参照してください。
他の回答者は、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
これはかなり古いですが、これは言及する価値があります。ファイルシステムのアクセス許可とは異なり、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
022
(666-022)
の許可を取得するために減算:644 (rw-r–r–)
次のように、ベースパーミッションからumaskを差し引くだけで、ディレクトリの最終的なパーミッションを決定できます。
777 – 022 = 755
777
022
(777-022)
の権限を取得します:755 (rwxr-xr-x)
基本概念:
あなたがほとんどの人間に似ていて、一体型が何であるかを理解していない場合、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 rwx
、group rx
、other rx
のパススルーを許可することを意味します。これは、group w
、others 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)