【Linux】パーミッションを極める(umask編)

4 min

こんにちは。ナミレリです。今回はLinuxやMacなどのUnix系OSの「パーミッションを極める」をテーマにした2回目の記事でumaskについて詳しく紹介していきます。

前回の記事ではパーミッションの概要やよく記号と数字によるパーミッションの設定方法などを紹介しています。パーミッションについてイチから詳しく知りたい方は先にこちらをご覧ください。

この記事はこんな人にオススメ

  • umaskは知ってるけど、002とか022とかなに?という方
  • なんとなくコピペでumaskを設定している方
  • パーミッション、umaskをしっかり理解したい方

例えば、ApacheでWEBサーバを構築した後に多くの担当者がSSHやSFTP等でファイルをアップロードしたり、すでにアップロードされているファイルを別の担当者が更新する時などに、どのようにパーミッションを設定しておくかセキュリティ観点でとても重要です。

この記事でわかること

  • umaskのビットマスク演算
  • umask 022の意味
  • umask 002の意味
  • umaskコマンドの使い方

パーミッションはとっつきにくく難解なイメージもありますが、一度理解してしまえばファイルやディレクトリを安全に扱うことが出来ますのでこれを機会にぜひパーミッションを極めてみましょう。

umaskとは?

umaskとは、user maskの略でファイルやディレクトリを作成する際に、パーミッションを決定するための値です。

全てのファイルやフォルダにはパーミッションが設定されていますが、新しいファイルやフォルダを作成する際に、このumask に基づいてパーミッションが決定します。

umaskがどのようにパーミッションに影響するか説明していきます。

umaskをちゃんと理解する

ファイルの場合、最もパーミッションが緩い設定が666です。(下の表参照)

読み取り権限書き込み権限実行権限2進数8進数
所有者1101106
グループ1101106
その他全て1101106

この最も緩いパーミッションに対して、umaskで許可しない権限を指定します。(下の表参照)

読み取り権限書き込み権限実行権限2進数8進数
所有者1101106
グループ1許可しない!01004
その他全て1許可しない!01004

表のイメージのようにumaskで許可しない権限を指定します。ちなみにこの場合umask022です。(なぜ022なのかはこの後説明します)

ビットマスクで許可しない権限のビットを指定しますが、用語としてのビットマスクは下記引用の通りです。

論理演算の分野で、特定のビットをオンにしたりオフにしたりするために用いられるビットパターンを「ビットマスク」(bit mask)あるいは略してマスクという。

https://e-words.jp/w/マスク.html

ビットマスクの演算

ビットマスクの演算は以下のように行われます。デフォルトのパーミッションとumaskの否定との論理積です。

決定されるバーミッション = デフォルトのパーミッション & umaskの否定

AND(論理積)

&はビット演算のANDです。AND(論理積)とは、どちらも1の時だけ1となり、それ以外では0となります。

NOT(否定)

また、umaskの「否定」とは、NOT(否定)のことで10に、01となります。つまり10を反転させます。

ざっくりまとめ

少し小難しいですがざっくりまとめると、umaskは許可しないビットなので、まったく逆のビットが新しく作成されるパーミッションということになります。

下記サイトを参考にさせていただきました。

umaskの具体例

では下の式に従って良く使うパターンをみていきましょう。

決定されるバーミッション = デフォルトのパーミッション & umaskの否定

デフォルト777(ディレクトリ)でumask022の場合

デフォルト777(ディレクトリ)でumaskが002の場合

①と③の論理積は、①と③でどちらも1の時だけ1となり、それ以外では0です。

デフォルト777(ディレクトリ)でumask002の場合

デフォルト777(ディレクトリ)でumaskが002の場合

①と③の論理積は、①と③でどちらも1の時だけ1となり、それ以外では0です。

デフォルト666(ファイル)でumask022の場合

デフォルト666(ファイル)でumaskが022の場合

①と③の論理積は、①と③でどちらも1の時だけ1となり、それ以外では0です。

デフォルト666(ファイル)でumask002の場合

デフォルト666(ファイル)でumaskが002の場合

①と③の論理積は、①と③でどちらも1の時だけ1となり、それ以外では0です。

umaskコマンドの使い方

現在のマスク値を確認する

umaskに何も引数を付けずに実行するとマスク値が8進数で表示されます。また-Sオプションを使うと、新しく作成したファイルに設定されるパーミッションが記号表記で表示されます。


umask
022
umask -S
u=rwx,g=rx,o=rx


umask
002
umask -S
u=rwx,g=rwx,o=rx

macOSは特殊なので別の機会にしますが、Linuxの場合は/etc/profileにデフォルトのマスク値が設定されています。AWSのEC2、AmazonLinuxで確認してみます。


cat /etc/profile
55 # By default, we want umask to get set. This sets it for login shell
56 # Current threshold for system reserved uid/gids is 200
57 # You could check uidgid reservation validity in
58 # /usr/share/doc/setup-*/uidgid file
59 if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
60     umask 002
61 else
62     umask 022
63 fi

.zshrcにumaskを設定する

zshの場合は、.zshrcにumaskを設定することができます。下のようにシンプルに8進数で指定できます。


vi ~/.zshrc
・・中略
umask 022
・・中略

個人で使うMacやLinuxであればumask 022で良いと思います。複数人でコンテンツをアップロードするサーバなどではumask 002が妥当です。

本気で学ぶLinuxの初学者にオススメです

本気で学ぶ Linux実践入門 サーバ運用のための業務レベル管理術

最後に

最後まで読んでいただきありがとうございます。【Linux】パーミッションを極める(umask編)はいかがでしたでしょうか。ApacheでWEBサーバを構築した後に多くの担当者がSSHやSFTP等でファイルをアップロードしたり、すでにアップロードされているファイルを別の担当者が更新する時などに、どのようにパーミッションを設定しておくかわからない場合もあると思います。

パーミッションはとっつきにくく難解なイメージもありますが、一度理解してしまえばファイルやディレクトリを安全に扱うことが出来ますのでぜひ覚えてください。

MacやLinux、Pythonなど技術系のkindle本も豊富にあります。詳しくはこちらから。

Amazonの電子書籍読み放題サービス「Kindle Unlimited」でプライム会員を対象に、最初の3か月間を無料体験できるキャンペーンを実施中。マンガ、小説、ビジネス書、雑誌など500万冊から、好きな本を何冊でも読めるキャンペーンです。

初めてkindle unlimited 読み放題をご利用の方は30日間の無料で体験できます。
期間終了後は月額980円で、いつでもキャンセルできます。
200万冊以上が読み放題。お好きな端末で利用可能です。

定番おすすめ記事

関連記事