

rootユーザーのUIDとGIDに0が割り振られていると思いますが、この件に関するドキュメントについて教えてください。

質問1)  
上記に関する公式な情報(１次情報)はどこになりますでしょうか？

質問2)  
上記に関する情報をmanやinfoで確認することはできるのでしょうか？


CC BY-SA 4.0
2022-08-14T22:59:32.500
90563
2022-08-15T21:40:26.133
4260
question
linux
rootユーザーのUIDとGIDに関するドキュメント


Linuxディストリビューション(以下、単に「Linux」と言った場合はLinuxディストリビューションのことを指します)はLinuxカーネルを採用していることが必要条件であり、`root`ユーザーのUIDとGIDが0でなければならない(UIDとGIDが0な`root`というユーザーがいなくてはならない)ということはありません。しかし、各Linuxが好き勝手に実装してしまうと世間を混乱させるだけであるためであるため、相互の互換性を保つために、業界の標準規格として
**Linux Standard Base** ( **LSB** )を定め、ほとんどのLinuxが準拠しています。

LSBはPOSIXやSingle UNIX Specification
(SUS)を基に拡張するように作られました。POSIXやSUSはUNIXの標準規格です。LinuxはUNIXと互換性を持たせるように作られたという経緯があるため、LSBもPOSIXやSUSを基にしたということです。ただ、LinuxがPOSIXに準拠しているというわけでありません。ですので、Linuxの公式な一次情報としてはLSBをみるのがいいのかと思います。

LSBはISO/IEC 23360として国際標準化されています。現在の最新版は2015年6月2にリリースされたLSB 5.0 (ISO/IEC
23360:2021)です。LSBはいくつかの章・節に分けれています。`root`ユーザに言及があるのは「Part 1-2: Core
specification generic part」です。以下のサイトから仕様書が入手可能です。

[ISO/IEC 23360-1-2:2021 Linux Standard Base (LSB) — Part 1-2: Core
specification generic part](https://www.iso.org/standard/77866.html)

価格は198スイスフランです。ただ、標準化のために無料でダウンロードして、閲覧できます。最初のメモにある"download"からリンクを辿ってみてください。

`root`ユーザーについては、p.940の「23.2 User & Group Names」に書いてあります。

> Table 23-1 describes required mnemonic user and group names. This
> specification makes no attempt to numerically assign user or group identity
> numbers, with the exception that both the User ID and Group ID for the user
> `root` shall be equal to 0.

>
> 表23-1は必要なニーモニックユーザー名とグループ名を示しています。本仕様書ではユーザーとグループのID番号を割り当てることはありませんが、例外として、`root`ユーザーのユーザーIDとグループは共に0でなければなりません。

rootユーザーとは何であるかは表23-1のコメント欄でAdministrative user with all appropriate
privileges(全ての適切な権限を持つ管理者ユーザー)と書いてあります。なお、`root`以外のユーザーについてはUIDやGIDがいくつであるべきかは定められていません。

ISO/IECとして標準化されているLSBの仕様書は本来は有料で購入する書籍であり、標準化のために無料ダウンロード可能とは言え、勝手に複製し配付することはできません。それとは別で、[LSB
Specifications - Linux
Foundation](https://refspecs.linuxfoundation.org/lsb.shtml)
からも入手可能で、GFDLになっています。LinuxによってはLSBを内部に含んでいて、`man`や`info`で表示できるLinuxが存在する可能性あります。(私は見つけられませんでしたので、他の方にお任せします)


CC BY-SA 4.0
2022-08-15T02:47:31.013
90565
2022-08-15T21:40:26.133
2022-08-15T21:40:26.133
3054
7347
90563
answer


「ユーザー ID `0` に root というユーザー名が割り当てられている」という表現が実際に近いと思います。

### ユーザーID `0` の特権

ID が `0` のユーザーは特権ユーザー（スーパーユーザー）です。この特権は、

[code]

    man 7 capabilities
    
[/code]

で解説されています。

特権ユーザーの ID が `0` であるのは、Linux カーネルに書かれており変更不可です。また、他の Unix でも殆どが `0` です。

参考: [Does the root account always have UID/GID
0?](https://superuser.com/q/626843/563358)

### root というユーザー名

強い習慣・伝統として、ユーザーID `0` には `root` というユーザー名が設定されます。そこから、特権ユーザーのことを「root
ユーザー」とも呼びます。しかし、少なくとも Linux カーネルから見た場合、この名前が技術的に必須ということは無いです。

この割り当ては、殆どのディストリビューションであらかじめ用意されている `/etc/passwd` で行われます。

[code]

    man 5 passwd
    
[/code]

### 規格

POSIX にこの点の記述はありません。

> POSIX.1 にはスーパーユーザの概念はありません。その代わりに、ある種の操作には「適切な権限」が必要としていますが、POSIX.1
> では「適切な権限」の定義は実装に任せています。  
>  —— 書籍『詳解UNIXプログラミング 第3版』「2.2.2 IEEE POSIX」より

Linux Standard Base に関しては [raccy
さんの回答にあります](https://ja.stackoverflow.com/a/90565/3054)。ただし、この規格を尊重する度合いは、ディストリビューションにより様々です。


CC BY-SA 4.0
2022-08-15T21:39:38.067
90575
2022-08-15T21:39:38.067
3054
90563
answer