権限4750のプロセスがあります。私のLinuxシステムには2人のユーザーが存在します。 rootユーザーとappzユーザー。このプロセスは、 "appz"ユーザとして実行されるプロセスマネージャの権限を継承します。Cでsetuidプログラムを実行する正しい方法
私は2つの基本的なルーチンがあります。
void do_root (void)
{
int status;
status = seteuid (euid);
if (status < 0) {
exit (status);
}
}
/* undo root permissions */
void undo_root (void)
{
int status;
status = seteuid (ruid);
if (status < 0) {
exit (status);
}
status = setuid(ruid);
if (status < 0) {
exit (status);
}
}
私の流れは以下の通りです:
int main() {
undo_root();
do some stuff;
do_root();
bind(port 80); //needs root perm
undo_root();
while(1) {
accept commads()
if (commands needs root user access)
{
do_root();
execute();
undo_root();
}
}
あなたは私がルートとしていくつかのコマンドを実行したい見ることができるように。権限を一時的に削除しようとしています。タスクにrootアクセスが必要な場合は、do_rootとundo_rootの間でコマンドをラップします。
しかし、私のプログラムは動作していないようです。
標準的な方法は何ですか?
seteuidが失敗したときに終了するのではなく、perrorあなたのプログラムはなぜそれが失敗しているかをあなたに伝えます。 –
root権限を削除すると、戻せません! – Petesh
技術的には、プロセスではなく4750のアクセス権を持つプログラムを保持しているファイルです。パーミッションが 'root:group:4750'であると直接言いません - それは安全な推論ですか? –