• ベストアンサー

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 --------------------------結果--------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

system()はシェルを起動するだけです。2度関数を呼んでもシェルが2度起動されるだけで、 相互の関連はありません。恐らく、意図されていることを行うには、 1.system("reboot"); を含むソースをコンパイルする。 2.できたプログラムのオーナーをrootにする。 3.chmod u+s プログラム で、オーナー権限で動作するようにする。 というのが妥当ではないかと思います。

hanada
質問者

補足

できあがったプログラムの権限を変更するのではなく、プログラムの中でroot権限に変更するということはできないのでしょうか?

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

幾つかの勘違いがありそうです。 ひとつ、大きなことは、No.1 の回答にある内容です。 次に、su コマンドについて、きちんと理解できていないようです。 まずは、「オプションには、パスワードを指定するわけではない」ということです。 "su - password" という書式は、「password という *ユーザで* そのログイン環境と同じシェルを立ち上げる」と いうことを意味します。 あくまでも、パスワードの入力を求められます。 ちなみに、パスワードの入力さえできれば、"su -c reboot -" という書式で root 権限で reboot を実行することができます。 で、解決の方法としては、No.1 で指示されている方法か、sudo というツールを導入する(→参考URL)のが 簡単だと思います。

参考URL:
http://www.linux.or.jp/JM/html/sudo/man8/sudo.8.html

関連するQ&A