Linux上でCを使用してアプリケーションを作成しています。私のアプリケーションでは、通常のユーザー(非rootユーザー)で最初にいくつかのタスクを実行する必要がありますが、実行の途中でrootユーザーといくつかのタスクを実行する必要があります。LinuxでCを使用して実行中にユーザーを切り替える方法
ところで、私は普通のユーザーの設定を変更することはできません。だから私はsudoersに通常のユーザーを追加することはできません。 OSの設定も変更できません。
私のアプリケーションが実際に行うことは、アプリケーションを実行し、分析のために出力を得ることです。
一部のアプリケーションはrootで実行する必要があります。私はマルチスレッドを使って、これらのアプリケーションの出力を並列に実行して分析し、各アプリケーションのレポートをReportと呼ばれる単一のものに保存します。サブプロセスでexecvp
を使用してこれらのアプリケーションを呼び出します。
私のアプリケーションの主な目的は、ソフトウェアテストを自動化することです。そして、ほとんどのタスクは、rootでないソフトウェア所有者で実行する必要があります。
だから、問題は、私は、実行時にユーザを切り替えることができますどのように
- のですか?
- 私はこれを1つの実行可能ファイルに実装できますか?
- これをPOSIX APIで行う方が良いでしょう。
- 通常のユーザーでアプリケーションを実行し、アプリケーションにrootパスワードを与え、rootパスワードを使用してrootに切り替えます。
http://man7.org/linux/manage/man2/setuid.2.html – oakad
@oakadありがとうございます。通常のユーザーで自分のアプリケーションを起動し、ルートパスワードを使用してrootに切り替えることは可能ですか? –
いいえ、rootとして実行される別のヘルパープロセスを起動して、IPC経由で通信することもできます。これを行う1つの方法は、ヘルパーにsetuidビットを設定することです。ヘルパーを可能な限り最小限に抑え、実際にルートアクセスが必要な非常に基本的な機能だけを提供し、メインアプリに残りをさせます。 –