さて、あなたはあなたの場合の選択肢に少し制限があります。
RFCによると、クライアントとサーバーの両方が特権ポートでリッスンする必要があります。
その他のこと-DHCPクライアントは通常、IPアドレス、ドメイン名、ホスト名などのシステム情報を変更するため、クライアントがrootとして実行されない場合、達成できるのはオファーを受け取ることとその情報を使って何もしません。
[編集]
そしてもう1つ、DHCPサーバーはそれだけではオファーを送信しません。通常、クライアントはDHCP要求を送信し、サーバーはそのMACアドレスを構成済みのホストやホストグループに一致させようとしてから、オファーを送信します。
非特権ユーザー向けのDHCP実装を見つけました:http ://code.google.com/p/ndhcp/wiki/ClientREADME
特権を削除するために次のCコードを使用します。
void drop_root(uid_t uid, gid_t gid)
{
if (uid == 0 || gid == 0) {
log_line("FATAL - drop_root: attempt to drop root to root?\n");
exit(EXIT_FAILURE);
}
if (getgid() == 0) {
if (setregid(gid, gid) == -1) {
log_line("FATAL - drop_root: failed to drop real gid == root!\n");
exit(EXIT_FAILURE);
}
}
if (getuid() == 0) {
if (setreuid(uid, uid) == -1) {
log_line("FATAL - drop_root: failed to drop real uid == root!\n");
exit(EXIT_FAILURE);
}
}
/* be absolutely sure */
if (getgid() == 0 || getuid() == 0) {
log_line("FATAL - drop_root: tried to drop root, but still have root!\n");
exit(EXIT_FAILURE);
}
}
この場合、JonLinの提案が機能するはずです。1つの注意点-rootとして開始する必要があり、後で非特権ユーザーに自動切り替えされると思います。したがって、rootアクセスがまったくない場合は、運が悪いと思います。