Creating users and groups in Leopard
この日記を書いている時点で、Carbon Emacsのコンパイルが通っていません。configureは通るのですが、Carbon関係のコンパイルで落ちるようです。
その間にCarbon Emacsがなくても進められるdovecotの設定を済ませておくことにしました。
追記(2007/11/27)
本エントリに記載している手法はハック的要素の強いものです。Mac OS X 10.5.x Leopardにおけるユーザーおよびグループの操作におけるより安全な手法として、dsclコマンドを用いたユーザーおよびグループの作成方法に関するエントリを記載しました。そちらも是非ご参照ください。
- Creating Users and Groups on Leopard using dscl command - agwの日記
- http://d.hatena.ne.jp/agw/20071126/1196152803
dovecotは、任意のユーザーおよびグループを用います。デフォルトでは、dovecotユーザーとdovecotグループになります。これを、Mac OS X 10.5がpostfixを_postfixとして用意しているように、_dovecotとして作成することを目指してみます。uidおよびgidにはそれぞれ128を用います*1。
まずdovecotをtarボールからインストールし、設定を行います。その後、_dovecotユーザーおよびグループを作成せずにdovecotを起動してみます。勿論、ユーザーが見つからず、起動しません。
> sudo /usr/local/sbin/dovecot Error: Login user doesn't exist: _dovecot Fatal: Invalid configuration in /usr/local/etc/dovecot.conf
Mac OS X 10.5ではNetInfo Managerが廃止されたようですが*2、ローカルで保持しているアカウント等の情報はプロパティーリストにて登録されているようです。これらのプロパティリストは以下に保存されています*3。
+ /var + db + dslocal + nodes + Default
例えば、_postfixユーザーおよび_postfixグループに関する情報はそれぞれ、以下に保存されています。
+ /var + db + dslocal + nodes + Default + users + _postfix.plist + groups + _postfix.plist
これらのファイルの内容は以下になります。
users/_postfix.plist: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>gid</key> <array> <string>27</string> </array> <key>home</key> <array> <string>/var/spool/postfix</string> </array> <key>name</key> <array> <string>_postfix</string> <string>postfix</string> </array> <key>passwd</key> <array> <string>*</string> </array> <key>realname</key> <array> <string>Postfix Mail Server</string> </array> <key>shell</key> <array> <string>/usr/bin/false</string> </array> <key>uid</key> <array> <string>27</string> </array> </dict> </plist>
groups/_postfix.plist: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>generateduid</key> <array> <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string> </array> <key>gid</key> <array> <string>27</string> </array> <key>name</key> <array> <string>_postfix</string> <string>postfix</string> </array> <key>passwd</key> <array> <string>*</string> </array> <key>realname</key> <array> <string>SMTP Mail Access</string> </array> <key>smb_sid</key> <array> <string>X-X-X-X-XXX</string> </array> </dict> </plist>
groups以下の全てのプロパティリストにはgenerateduidというプロパティが存在しており、私のシステムにインストールされているグループ群は、ほぼ全てのグループに異なるgenerateduidがアサインされていました*4。このプロパティにどのような意味合いがあるのか不明であったこともあり、正攻法で作ることにしました。
グループを新規作成するには、System Preferencesを用います。System Preferences > System > Accountsにて+ボタンをクリックし、以下を設定し、Create Groupボタンをクリックします。
- New
- Group
- Name
- _dovecot
groupsディレクトリ以下に作成される_dovecot.plistは以下のような内容となります。
groups/_dovecot.plist: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>generateduid</key> <array> <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string> </array> <key>gid</key> <array> <string>502</string> </array> <key>groupmembers</key> <array/> <key>name</key> <array> <string>_dovecot</string> </array> <key>passwd</key> <array> <string>*</string> </array> <key>realname</key> <array> <string>_dovecot</string> </array> </dict> </plist>
これを、_postfix.plistと比較しながら編集します。前述したように、gidには128を指定しました。以下は編集後の_dovecot.plistです。
groups/_dovecot.plist: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>generateduid</key> <array> <string>XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</string> </array> <key>gid</key> <array> <string>128</string> </array> <key>groupmembers</key> <array/> <key>name</key> <array> <string>_dovecot</string> <string>dovecot</string> </array> <key>passwd</key> <array> <string>*</string> </array> <key>realname</key> <array> <string>IMAP4 Mail Access</string> </array> </dict> </plist>
さて、次に_dovecotユーザーを作成します。役割的に近いと思われる_postfixのプロパティリストを元に、以下のようにしてみました。
users/_dovecot.plist: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>gid</key> <array> <string>128</string> </array> <key>home</key> <array> <string>/usr/local/libexec/dovecot</string> </array> <key>name</key> <array> <string>_dovecot</string> <string>dovecot</string> </array> <key>passwd</key> <array> <string>*</string> </array> <key>realname</key> <array> <string>Dovecot Mail Server</string> </array> <key>shell</key> <array> <string>/usr/bin/false</string> </array> <key>uid</key> <array> <string>128</string> </array> </dict> </plist>
users/_dovecot.plistを作成した後に、一回リブートします*5。リブート後に、再度dovecotを起動します。
> sudo /usr/local/sbin/dovecot > ps auxll | grep '[d]ovecot' root 319 0.0 0.0 75556 324 ?? Ss 7:46PM 0:00.00 0 1 0 31 0 - /usr/local/sbin/dovecot _dovecot 323 0.0 0.0 76584 584 ?? S 7:46PM 0:00.01 128 319 0 31 0 - imap-login _dovecot 322 0.0 0.0 76584 584 ?? S 7:46PM 0:00.01 128 319 0 31 0 - imap-login _dovecot 321 0.0 0.0 76584 584 ?? S 7:46PM 0:00.01 128 319 0 31 0 - imap-login root 320 0.0 0.0 76728 532 ?? S 7:46PM 0:00.00 0 319 0 31 0 - dovecot-auth
Mail.appを起動してIMAP4と接続出来ることを確認しました。うまく動作しているようです。では、rootのcronプロセスにて、dovecotを自動的に起動するようにして終了です*6。
> sudo su - Password: # crontab -l * * * * * ( killall -0 dovecot || /usr/local/sbin/dovecot ) > /dev/null 2>&1
まとめ
今回はLeopardのNetInfoデータベースに関して、以下を検証しました。
- グループを作成し、任意のgidを与える方法
- プロパティリストから任意のuidを持ったユーザーを作成する方法
LeopardではNetInfo Managerがなくなりました。しかし私感では、LeopardはNetInfoデータベースの呪縛から離れられているようには到底思えません。むしろ上述のようなユーザーやグループの操作は、NetInfo Managerで操作したほうが安全であるように感じられました。
*1:この番号を選んだ根拠は特にありません
*2:これを知らずに/Applications/Utilities内を覗いて腰を抜かしました
*3:Default以下の閲覧には、管理者権限が必要です
*4:70個のgroups/*.plistを精査。そのうちの、_keytabusers.plistおよびmail.plistは同一のgenerateduidを使用していました
*5:NetInfoデータベースを反映させる方法は確実にあるはずなのですが、私はまだ知りません
*6:Mac OS X 10.4.xにてさんざんlaunchdによる起動を試してみたのですが、認証系に問題が出るためこの方法を選択しています