User Private Group (UPG) はいつから存在するのか？

## はじめに

User Private Group (UPG) がいつから存在するのか調べてみました。この記事はメモ書きみたいなもので User Private Group についての説明はしません。User Private Groupを採用しているのはLinux系だけだと思っていたのですが、よくよく見てみるとFreeBSDでも採用しており、こちらはUNIQUE GROUPS (UNIQ GROUP) と呼んでいるようです。

## User Private Group を採用しているUnix/Linux

採用しているOSは以下の通り

- Red Hat 系 Linux
- Debian 系 Linux
- FreeBSD
- OpenBSD

採用していないOSは以下の通り

- SUSE Linux
- macOS
- Solaris
- NetBSD

## 1995年5月のRed Hat Linux 1.0にある

Red Hat Linux 1.0 は当初は Red Hat Commercial Linux と名乗っていたようですが、このバージョンにすでに User Private Group があるようです。

https://www.linux.co.cr/distributions/review/1995/red-hat/node83.html#SECTION00720000000000000000

> Managing user and groups has traditionally been tedious. RHC Linux has a few tools and conventions that make user and groups easier to manage, and more useful.



補足情報: https://www.linux.co.cr/distributions/red-hat.html

## 1995年6月のFreeBSD 2.0.5にある

1995 年の FreeBSD 2.0.5 に記述を見つけました。一つ前の FreeBSD 2.0 にはなさそうです。現在は UNIQUE GROUPS と呼ばれていますが当時は UNIQ GROUP だったようです。

https://man.freebsd.org/cgi/man.cgi?query=adduser&sektion=8&manpath=FreeBSD+2.0.5-RELEASE

Rod Grimes（FreeBSDの最初の3人の開発者の1人）によると当時の10年ぐらい前からこのモデルを使用しているようです。

> UNIQ GROUP
>
> Perhaps your missing what \*can\* be done with this scheme that falls apart with most other schemes. With each user in his/her own group the user can safely run with a umask of 002 and have files created in there home directory and not worry about others being able to read them.
>
> For a shared area you create a seperate uid/gid (like cvs or ncvs on freefall), you place  each person that should	be able	to access this area into that new group.
>
> This model of uid/gid administration allows far greater flexibilty that lumping users into groups and having to muck with the umask when working in a shared area.
>
> I have been using this model for almost 10 years and found that it works for most situations, and has never gotten in the way. (Rod Grimes)

## 1983年9月の4.2BSDのグループスキーム？

以下のスレッドより 4.2BSD の頃に現在使われている新しいグループスキームが登場したと書かれています。詳しく調べきれていませんが、これが大元になるのかもしれません。

https://www.tuhs.org/mailman3/hyperkitty/list/coff@tuhs.org/thread/GLNXTHG3Y3TAFZEZJHQK6OYAWSIKJSGI/#TLZTM4WITC42BFAZ2XTJOTMJU3CJETGQ

歴史的な Unix は同時に一つのグループにしか所属できませんでした。4.1c/4.2 BSDで最大8個（システムビルドで変更可能）のグループに所属できるようになりました。そこから新しく生まれたグループスキルのような気がします。以下に1983年12月に「とりあえず思いついた方法」としてUPGと同じ？ような方法が提案されています。

https://www.tuhs.org/Usenet/comp.unix.wizards/1983-December/012536.html

ちなみに System V は 1989 年頃の System V Release 4 になるまで複数のグループが使えなかったようです。

## おまけ: 一般ユーザーの umask は 0002 (002) とは限らない

UPG を使っているからと言って umask を 0002 にしなければならないわけではありません。0002 にしても安全というだけです。0002 にする必要があるのは他のユーザーとディレクトリを共有して作業をするような場合です。

以下の環境では一般ユーザーの umask は 0022 のようです。

- AlmaLinux 9（[何かが修正された結果？](https://forums.rockylinux.org/t/missing-umask-in-etc-profile-in-rhel-9-beta/6131/6)）
  - /etc/profile や /etc/bashrc で設定するのをやめた？
  - pam_umask で設定するデフォルトに変更した？
- Debian 12 （[一時期 0002 だったが戻したらしい](https://wiki.debian.org/Debate/umask)）
- FreeBSD
- OpenBSD

以下の環境では一般ユーザーの umask は 0002 のようです。

- Ubuntu 23.10
- AlmaLinux 8

## さいごに

UPG はもう少し新しいものだと思っていたのですがかなり古いですね。Linuxカーネルのバージョンが1.0になったのが1994年なので、Linuxが知られるようになったほとんど最初からUPGという名前はあったも言って良いようです。UPGについて調べると Red Hat の名前が出てきますが、考え方自体が登場したのはその10年前ぐらいの BSD にさかのぼるようです。