てきとうなメモ

本の感想とか技術メモとか

コマンドラインからユーザを作る

デーモン用のアカウントを作りたいと思った時に,システム環境設定->アカウントから作成するといろいろ余計なものもくっついてくるので,もう少しカスタマイズできる方法ないのかなと思って探していた.まあクライアントマシンでテスト用にデーモン起動させたいだけなので,rootで起動しても問題ないのだけども...

Max OS X 10.5だとOpenDirectoryというディレクトリサービス経由でユーザ管理をしており,そこにアクセスすればいいっぽい.アクセスするにはdsclというコマンドラインユーティリティがある.

$ dscl . list /Users 
_amavisd
_appowner
_appserver
_ard
_atsserver
...
$ dscl . read /Users/_www
AppleMetaNodeLocation: /Local/Default
NFSHomeDirectory: /Library/WebServer
Password: *
PrimaryGroupID: 70
RealName:
 World Wide Web Server
RecordName: _www www
RecordType: dsRecTypeStandard:Users
UniqueID: 70
UserShell: /usr/bin/false

デーモンの場合は_で始まるユーザ名になっているらしいので,dummyというデーモン用アカウントを作りたい場合は以下のようになるのかな

$ dscl . create /Groups/_dummy
$ dscl . create /Groups/_dummy PrimaryGroupID <GID>
$ dscl . create /Groups/_dummy RealName <NAME>
$ dscl . append /Groups/_dummy RecordName dummy

$ dscl . create /Users/_dummy
$ dscl . create /Users/_dummy UniqueID <UID>
$ dscl . create /Users/_dummy PrimaryGroupID <GID>
$ dscl . create /Users/_dummy RealName <NAME>
$ dscl . create /Users/_dummy UserShell /usr/bin/false
$ dscl . create /Users/_dummy NFSHomeDirectory /var/empty
$ dscl . append /Users/_dummy RecordName dummy

UIDとかGIDは設定する前に既に存在しないかチェックしないと危険.

$ dscl . search /Users UniqueID 70
_www		UniqueID = (
    70
)
$ dscl . search /Groups PrimaryGroupID 70
_www		PrimaryGroupID = (
    70
)