Unix/Linuxでのユーザ名・グループ名に関する制限


Overview

Unix/Linux系システムのアカウントを外部アプリケーションと連携させる時に各ディストリビューションでユーザ名やグループ名の制限(limitation)がどうなっているか気になったので調べてみた

ユーザ名の制限

ユーザ名長

Linux系ではlibcのバージョンによって変わってくる。libc5が使われている古いシステムとlibc6では制限が違う。また古いSolaris(8,9,10系)では8byte以上のユーザ名を作ろうとすると警告が表示され、ps系コマンドでユーザ名が暗黙的にtruncateされたりするなどユーザ名を使用するアプリケーションの挙動が変わってくる。

hard limit

種類 長さ
libc5 8
libc6 32

soft limit

種類 長さ
Solaris 8
libc6 32

使用可能文字

  • 数字、アルファベット、アンダーバーを使用可能
  • 大文字は使用不可
  • 先頭文字は数字は使用不可

正規表現で表すと ([a-z_][a-z0-9_]{0,30}) となる。

グループ名の制限

種類
Linux 32
Solaris 32

グループ名の長さを回避

GNU groupaddを--with-group-name-max-lengthオプションを付けてソースからコンパイルし直す。
ただしグループ名を使用するアプリケーションで32文字以上のグループ名が動作する保証はない。

グループ数の制限

長さとは関係ないが1ユーザが所属出来るグループ数にはNISやNFSにより上限がある

種類 グループ数
Linux Kernel < 2.6.3 16
Linux Kernel >= 2.6.3 32
Solaris 16

まとめ

各システムでのユーザ・グループの制限を確認し、すべてのシステムで使用可能なサイズとしてはユーザ名・グループ名ともに 8文字 ということが分かった。
レガシーなUnixシステムとの互換性を保つためにアプリケーション側でユーザ名やグループ名をあえて8文字までしか認識しないよう実装している可能性もあるため、念を入れたい場合はユーザ名・グループ名共に8文字までに抑えよう。