umask
Qです。
本年もよろしくお願いします。
今回はumaskです。
■RHEL9系からumaskのデフォルト値が変わったよ
RHEL8系まではrootのumaskは「0022」、一般ユーザーのumaskは「0002」でしたが、
RHEL9系からはrootも一般ユーザーもumaskは「0022」に統一されました。
umaskが「0002」って、SVR系やBSD系と戯れていた人間としては
RHEL/CentOSに触れた当初はめちゃくちゃ違和感がありました。
「プログラム/スクリプトのアクセス権は作者が管理すべし」と思っているので
個人的には大歓迎です。
ちなみに他のLinux系OSも確認してみたところ こんな感じでした。
root | user | |
RHEL 9.5 | 0022 | 0022 |
Amazon Linux 2023 | 0022 | 0022 |
Debian 12 | 0022 | 0022 |
Ubuntu 24.04 | 0022 | 0002 |
▼ RHEL 9.5、Amazon Linux 2023
どちらも Fedora がベースなわけですが
/etc/login.defs で調整する方法に統一したように見えます。
/etc/login.defs の中で以下の通り定義されています。
117 UMASK 022
これを「002」に変更するとumaskのデフォルト値が「0002」に変わることは確認済みです。
▼ Debian 12、Ubuntu 24.04
PAMモジュール:pam_umask.so を利用するか、利用しないか で異なるようです。
Ubuntu は /etc/pam.d/common-session の中で pam_umask.so を呼び出しています。
26 session optional pam_umask.so
これをコメントアウトすれば Debian と同じくumaskのデフォルト値は「0022」になります。
※ ただしシステム全体に影響が及ぶので変更するときは要注意です。
稼働中のシステムで /etc/login.defs を変更するのは厳禁です。
調整することができるのはシステム構築初期段階のみと肝に銘じた方が良いです。
umaskの調整が必要になるケースは、十中八九、SSHユーザーの間で起きる
「編集できないぞ!」「Permission denied 出たんだけど・・・」になると思います。
私だったらユーザーHOMEディレクトリの.bashrc にumaskをセットして
既存のファイルやディレクトリのパーミッションを一括変更しちゃいます。
● ユーザー asuka の umask を「0022」から「0002」に変更する
# echo ‘umask 002’ >> /home/asuka/.bashrc
● ユーザー asuka が所有するディレクトリ、ファイルのパーミッションを一括変更する
# find /var/www/vhosts/ -type d -perm 755 -a -user asuka -a -group asuka -print0 | xargs -0 chmod 775
# find /var/www/vhosts/ -type f -perm 644 -a -user asuka -a -group asuka -print0 | xargs -0 chmod 664
■ そもそも 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 010 010 |
補数 (0755) | 111 101 101 |
ファイルとディレクトリそれぞれパーミッションのモードを計算してみます。
● ファイルの場合
デフォルト666 | 110 110 110 | rwー rwー rwー | 666 |
022の補数 | 111 101 101 | rwx r-x r-x | 755 |
AND演算結果 | 110 100 100 | rw- rーー r-ー | 644 |
※ ファイルの場合、umaskで 1ビット、3ビット、7ビットをONにすることはできません。
都度、chmodコマンドでセットすることになります。
●ディレクトリの場合
デフォルト777 | 111 111 111 | rwx rwx rwx | 777 |
022の補数 | 111 101 101 | rwx r-x r-x | 755 |
AND演算結果 | 111 101 101 | rwx r-x r-x | 755 |
どうでしょう。SSHログインするたびこんな計算が繰り返されていると思うと感動しませんか?
* 補数とか AND演算(論理積)とか OR演算(論理和)とか については
高校数学(中学かな?)で勉強したと思います。
手元に教科書がある方は読み返してみてください。
今回は以上です。それでは。