テックブログ

umask

Qです。
本年もよろしくお願いします。

今回はumaskです。

■RHEL9系からumaskのデフォルト値が変わったよ

RHEL8系まではrootのumaskは「0022」、一般ユーザーのumaskは「0002」でしたが、
RHEL9系からはrootも一般ユーザーもumaskは「0022」に統一されました。

umaskが「0002」って、SVR系やBSD系と戯れていた人間としては
RHEL/CentOSに触れた当初はめちゃくちゃ違和感がありました。

「プログラム/スクリプトのアクセス権は作者が管理すべし」と思っているので
個人的には大歓迎です。

ちなみに他のLinux系OSも確認してみたところ こんな感じでした。

rootuser
RHEL 9.500220022
Amazon Linux 202300220022
Debian 1200220022
Ubuntu 24.0400220002

▼ RHEL 9.5、Amazon Linux 2023

どちらも Fedora がベースなわけですが
/etc/login.defs で調整する方法に統一したように見えます。
/etc/login.defs の中で以下の通り定義されています。

これを「002」に変更するとumaskのデフォルト値が「0002」に変わることは確認済みです。

▼ Debian 12、Ubuntu 24.04

PAMモジュール:pam_umask.so を利用するか、利用しないか で異なるようです。
Ubuntu は /etc/pam.d/common-session の中で pam_umask.so を呼び出しています。

これをコメントアウトすれば Debian と同じくumaskのデフォルト値は「0022」になります。

※ ただしシステム全体に影響が及ぶので変更するときは要注意です。
  稼働中のシステムで /etc/login.defs を変更するのは厳禁です。
  調整することができるのはシステム構築初期段階のみと肝に銘じた方が良いです。

umaskの調整が必要になるケースは、十中八九、SSHユーザーの間で起きる
「編集できないぞ!」「Permission denied 出たんだけど・・・」になると思います。

私だったらユーザーHOMEディレクトリの.bashrc にumaskをセットして
既存のファイルやディレクトリのパーミッションを一括変更しちゃいます。

● ユーザー asuka の umask を「0022」から「0002」に変更する

● ユーザー asuka が所有するディレクトリ、ファイルのパーミッションを一括変更する

■ そもそも umask とは?

manを見るとこうあります「set file mode creation mask」、
直訳すると「ファイルモード作成マスクを設定する」です。
「マスク」はコンピュータ/プログラムの世界では「ビットマスク」を指します。

「マスク」には 覆うとか、隠すとか、消すなどの意味がありますが、
「ビットマスク」と言うときは「特定のビットを隠す」言い換えると
「特定のビットをOFFにする」ということなります。

umaskからパーミッションを考えるとき ファイルの場合は モード「666」、
ディレクトリの場合は モード「777」を初期値として算出します。

では「umask 0022」をセットするとパーミッションはどうなるか、
補数とAND演算(論理積)を使って算出することができます。

「022」を2進数で表すと 000 010 010 になるので補数は 111 101 101 になります。

8進数2進数 (9ビット)
022 [OFFにしたいビット]000 00 0
補数 (0755)111 101 101

ファイルとディレクトリそれぞれパーミッションのモードを計算してみます。

● ファイルの場合

デフォルト666110 110 110rwー rwー rwー666
022の補数111 101 101rwx r-x r-x755
AND演算結果110 100 100rw- rーー r644

※ ファイルの場合、umaskで 1ビット、3ビット、7ビットをONにすることはできません。
  都度、chmodコマンドでセットすることになります。

●ディレクトリの場合

デフォルト777111 111 111rwx rwx rwx777
022の補数111 101 101rwx r-x r-x755
AND演算結果111 101 101rwx r-x r755

どうでしょう。SSHログインするたびこんな計算が繰り返されていると思うと感動しませんか?

* 補数とか AND演算(論理積)とか OR演算(論理和)とか については
  高校数学(中学かな?)で勉強したと思います。
  手元に教科書がある方は読み返してみてください。

今回は以上です。それでは。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください