- ベストアンサー
system関数を使用してsuコマンドを実行したいのですが
Linux RedHat7.2の環境にて、system関数を使用してsuコマンドを実行し、ルートになりたいのですが(さらにその後rebootしたい)、以下の結果のようになってしまいルートになれません。system()の使用方法がまずいのでしょうか。 どなたか助けてください。お願いします。 --------------------------ソースコード-------------------------------- #include <stdio.h> #include <stdlib.h> int main( int argc, char **argv) { int i; i = system("su - password"); i = system("reboot"); return 0; } --------------------------ソースコード-------------------------------- --------------------------結果-------------------------------- [nmpb@nmpb_linux02 BIN]$ ./aaa.out su: user password does not exist --------------------------結果--------------------------------
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
system()はシェルを起動するだけです。2度関数を呼んでもシェルが2度起動されるだけで、 相互の関連はありません。恐らく、意図されていることを行うには、 1.system("reboot"); を含むソースをコンパイルする。 2.できたプログラムのオーナーをrootにする。 3.chmod u+s プログラム で、オーナー権限で動作するようにする。 というのが妥当ではないかと思います。
その他の回答 (1)
- a-kuma
- ベストアンサー率50% (1122/2211)
幾つかの勘違いがありそうです。 ひとつ、大きなことは、No.1 の回答にある内容です。 次に、su コマンドについて、きちんと理解できていないようです。 まずは、「オプションには、パスワードを指定するわけではない」ということです。 "su - password" という書式は、「password という *ユーザで* そのログイン環境と同じシェルを立ち上げる」と いうことを意味します。 あくまでも、パスワードの入力を求められます。 ちなみに、パスワードの入力さえできれば、"su -c reboot -" という書式で root 権限で reboot を実行することができます。 で、解決の方法としては、No.1 で指示されている方法か、sudo というツールを導入する(→参考URL)のが 簡単だと思います。
補足
できあがったプログラムの権限を変更するのではなく、プログラムの中でroot権限に変更するということはできないのでしょうか?