| 原作者 | AT&T ベル研究所 |
|---|---|
| 開発者 | さまざまなオープンソースおよび商用開発者 |
| 初回リリース | 1978年 |
| オペレーティング·システム | UnixおよびUnixライク |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 指示 |
コンピューティングでは、 は、新しく作成されたファイルに対してファイル権限を設定する方法を制御するマスクの設定を決定するコマンドumaskです。また、ファイル権限を明示的に変更する方法にも影響する場合があります。 はマスクを設定する関数でもあり、正式にはファイル モード作成マスクと呼ばれるマスク自体を参照する場合もあります。マスクはビットのグループであり、各ビットは新しく作成されたファイルに対して対応する権限を設定する方法を制限します。マスク内のビットは、 コマンドを呼び出すことによって変更できます。
umaskumask
概要
Unix のようなシステムでは、各ファイルには、誰がそのファイルを読み取り、書き込み、または実行できるかを制御する一連の属性があります。プログラムがファイルを作成すると、ファイル権限はマスクによって制限されます。マスクのビットが「1」に設定されている場合、対応する初期ファイル権限は無効になります。マスクのビットが「0」に設定されている場合、対応する権限はプログラムとファイル システムによって決定されます。言い換えると、マスクは、ファイルの作成時に権限を取り除く最終段階のフィルタとして機能します。つまり、「1」に設定された各ビットは、対応する権限を取り除きます。権限は、ユーザーとプログラムによって後で を使用して変更できますchmod。
各プログラム (技術的にはプロセスと呼ばれます) には独自のマスクがあり、関数呼び出しを使用して設定を変更できます。プロセスがシェルの場合、マスクはumaskコマンドで設定されます。シェルまたはプロセスが新しいプロセスを起動すると、子プロセスは親プロセスからマスクを継承します。通常、マスクは新しいファイルの作成時にのみファイル権限に影響し、既存のファイルでファイル権限が変更されたときには影響しません。ただし、chmodモード オプションがシンボリック モードを使用して指定され、ユーザーのクラスへの参照が指定されていない場合、コマンドはマスクをチェックします。
マスクはビットのグループとして保存されます。2進数、8 進数、または記号表記で表すことができます。コマンドを使用すると、マスクを 8 進数 (例) または記号表記 (例)umaskとして設定できます。
0754u=,g=w,o=wx
このコマンドはUnix 系umaskオペレーティング システムで使用され、その機能はPOSIX.1仕様で定義されています。
umask
歴史
マスク、umaskコマンド、関数は、 UNIXumaskのオリジナルの実装には含まれていなかった。このオペレーティングシステムは、セキュリティが問題とならなかった比較的小規模なコンピュータセンター環境で発展した。最終的には、さまざまな組織の何百人ものユーザーにサービスを提供するまでに成長した。当初、開発者は、特に実際のセキュリティ違反の場合に備えて、キーファイルの作成モードをより制限的なものにしたが、これは一般的な解決策ではなかった。マスクとコマンドは、1978年頃、オペレーティングシステムの第7版で導入され、[1]サイト、グループ、個人が独自のデフォルトを選択できるようにした。それ以来、マスクは、Unix系オペレーティングシステムの最新の実装のほとんど、あるいはすべてに実装されている。
umask
シェルコマンド
シェルでは、マスクはumaskコマンドを使用して設定されます。コマンドの構文は次のとおりです: [2]
umask [ -S ] [マスク式]
(括弧内の項目はオプションです。)
現在のマスクを表示する
引数なしでコマンドを呼び出すとumask、現在のマスクが表示されます。出力はOSに応じて8進数または記号表記になります。 [3]
C シェルを除くほとんどのシェルでは、引数 (つまり) は記号表記を使用して表示するように指示します。例:
-Sumask -Sumask
$ umask # 現在の値を表示 (8進数として) 0022
$ umask -S # 現在の値を記号で表示u = rwx、g = rx、o = rx
8進表記法を使用してマスクを設定する
コマンドが 8 進引数で呼び出されるとumask、マスクのビットがその引数に直接設定されます。
$ umask 007 # マスクを 007 に設定
$ umask # マスクを表示 (8 進数) 0007 # 0 - 特別な権限 (setuid | setgid | sticky) # 0 - マスクの (u)ser/owner 部分# 0 - マスクの (g)roup 部分# 7 - マスクの (o)others/not-in-group 部分
$ umask -S # マスクを記号で表示u = rwx,g = rwx,o =
4桁未満の数字が入力された場合は、先頭にゼロが付くものとみなされます。引数が有効な8進数でない場合、または4桁を超える場合はエラーが発生します。[4]右端の3桁の8進数は、それぞれ「所有者」、「グループ」、「その他」のユーザークラスを表します。4桁目がある場合は、左端(上位)の桁が、setuidビット、setgidビット、スティッキービットの3つの追加属性を表します。
8進コード
記号表記法を使用してマスクを設定する
がシンボリック表記を使用して呼び出されると、次の構文
を使用してmaskExpressionumaskで指定されたフラグを変更または設定します。
この構文は、組み込みコマンドの動作が異なるため、C シェルを使用する場合は機能しないことに注意してくださいumask。
複数のmaskExpressions はカンマで区切られます。
スペースはmaskExpression(s)を終了します。
権限はさまざまなユーザー クラスに適用されます。
オペレーターは、マスクの許可モードを調整する方法を指定します。
権限シンボルは、マスクによってどのファイル権限設定が許可または禁止されるかを示します。
例えば:
umask u-w
ユーザの書き込み権限の設定を禁止します。マスク内の残りのフラグは変更されません。
複数の変更の例:
umask u-w,g = r,o+r
これにより、マスクは次のように設定されます。
- 残りのフラグを変更せずに、ユーザーに対する書き込み権限の設定を禁止します。
- グループの読み取り権限を有効にし、書き込み権限と実行権限を禁止します。
- 他のフラグの残りは変更せずに、他のフラグに対して読み取り権限を有効にできるようにします。
コマンドラインの例
umaskマスクを変更するコマンド
の使用例をさらに示します。
効果を示す例umask:
$ umask -S # (多くの場合は初期) 設定u=rwx,g=rx,o=rxを表示$ gcc hello.c # コンパイルして実行可能ファイル a.out を作成$ ls -l a.out -rwxr-xr-x 1 me developer 6010 Jul 10 17:10 a.out $ # umask はグループとその他に書き込み権限を禁止します$ ls > listOfMyFiles # リダイレクトによって作成された出力ファイルは eXecute の設定を試行しません$ ls -l listOfMyFiles
-rw-r--r-- 1 me developer 6010 Jul 10 17:14 listOfMyFiles $ # umask はグループとその他に書き込み権限を禁止します$ ###################################################################### $ umask u-w # umask からユーザーの書き込み権限を削除します$ umask -S
u=rx,g=rx,o=rx $ ls > protectedListOfFiles
$ ls -l protectedListOfFiles
-r--r--r-- 1 me developer 6010 Jul 10 17:15 protectedListOfFiles $ rm protectedListOfFiles
override r--r--r-- me/developer for protectedListOfFiles? $ # protectedListOfFiles は書き込み可能ではないという警告。Y と答えるとファイルが削除されます$ ########################################################################################################################### $ umask g-r、または# マスクからグループ読み取りとその他の読み取りを削除しました$ umask -S
u=rx、g=x、o=x $ ls > secretListOfFiles
$ ls -l secretListOfFiles
-r-------- 1 me developer 6010 Jul 10 17:16 secretListOfFiles
マスク効果
マスクは、ファイルが作成されるたびに適用されます。マスクのビットが「1」に設定されている場合、それ以降にファイルが作成されるときに、対応するファイル権限は常に無効になります。マスクのビットが「0」に設定されている場合、それ以降にファイルが作成されるときに、対応する権限は要求プロセスとOSによって決定されます。言い換えると、マスクは、ファイルの作成時に権限を削除する最終段階のフィルターとして機能します。つまり、「1」に設定された各ビットは、ファイルの対応する権限を削除します。
マスクのつけ方
プログラム的には、OSはまずマスクを否定(補完)し、次に要求されたファイルモードとの論理積をとることでマスクを適用します。この機能を説明した[おそらく]最初のUNIXマニュアル[6]では、次のように書かれています。
新しく作成されたファイルの実際のモードは、指定されたモードと引数の補数の論理積です。マスクの下位 9 ビット (保護ビット) のみが関係します。言い換えると、マスクは、ファイルの作成時にオフにするビットを示します。
— UNIX 第 8 版マニュアル、ベル研究所 UNIX (マニュアル)、AT&T 研究所
例外
多くのオペレーティング システムでは、実行権限付きのファイルの作成は許可されません。これらの環境では、新しく作成されたファイルは、常にすべてのユーザーに対して実行権限が無効になります。
マスクは通常、新しいファイルを作成する関数にのみ適用されますが、例外もあります。たとえば、UNIXおよびGNUバージョンのを使ってchmodファイルの権限を設定する場合、記号表記が使用され、ユーザーが指定されていないと、要求された権限がファイルに適用される前に、マスクが権限に適用されます。たとえば、次のようになります。
$ umask 0000 $ chmod +rwxファイル名
$ ls -lファイル名
-rwxrwxrwx ファイル名$ umask 0022 $ chmod +rwxファイル名
$ ls -lファイル名
-rwxr-xr-x ファイル名
プロセス
各プロセスには独自のマスクがあり、プロセスが新しいファイルを作成するたびに適用されます。シェルまたは他のプロセスが新しいプロセスを生成すると、子プロセスは親プロセスからマスクを継承します。[7]プロセスがシェルの場合、マスクはコマンドによって変更されますumask。他のプロセスと同様に、シェルから起動されたプロセスはシェルのマスクを継承します。
マウントオプション
Linux カーネルでは、、、、およびファイル システムドライバは、ディスク情報を権限にマップする方法を制御するマウント オプション をサポートしていますfat。これhfsは、権限が同様の方法で計算されhpfsますが、上記のプロセスごとのマスクと同じではありません。これらのファイル システム ドライバの一部は、などのマウント オプションを使用して、ファイルとディレクトリの個別のマスクもサポートしています。
ntfsudf umask fmask
参照
参考文献
- ^ 「UNIX 7th Edition Manual, Bell Labs UNIX」。マニュアル。AT&T Laboratories 。2019年5月14日閲覧。
- ^ Olczak, Anatole (2019-06-09). 「Korn Shell: Unix および Linux プログラミング マニュアル」. Oreilly . Addison-Wesley Professional . 2013-01-14閲覧。
- ^ 「umask」、The Single UNIX 仕様、バージョン 2 (マニュアル)、The Open Group、1997 年、2013 年 1 月 14 日に取得
- ^ 注:一部のプログラミング言語では、8 進表記の前に数字 0 や文字 o または q などのプレフィックス記号が必要です。この
umaskコマンドでは、このタイプのプレフィックス表記は使用されず、8 進数字のみが使用されます。 - ^ 注意:オペレーティング システムは通常、新しく作成されたファイルの実行権限も削除します。
- ^ 「UNIX 8th Edition Manual, Bell Labs UNIX」。マニュアル。AT&T Laboratories 。2013年1月14日閲覧。
- ^ "umask(2)", Linux Programmer's Manual release 3.32 (manual), Linux man-pages project, 2008年1月9日, 2013年1月1日取得
