プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (2件)

system()はシェルを起動するだけです。

2度関数を呼んでもシェルが2度起動されるだけで、
相互の関連はありません。恐らく、意図されていることを行うには、

1.system("reboot"); を含むソースをコンパイルする。
2.できたプログラムのオーナーをrootにする。
3.chmod u+s プログラム で、オーナー権限で動作するようにする。

というのが妥当ではないかと思います。

この回答への補足

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

補足日時:2002/12/06 19:25
    • good
    • 0

幾つかの勘違いがありそうです。



ひとつ、大きなことは、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. …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています