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

Linuxのシェルスクリプトでそのスクリプトファイルを実行したユーザーにかかわらずそのスクリプト内のコマンドがルート権限として実行されるようにしたいのですが良い方法はありますか?

ルートのパスワードを入力せずに一時的にルート権限を使用できるようにしたいのです。


やりたいことは
screenでルートユーザでしかアタッチできないプロセスに一時的にアタッチしてコマンドを実行してデタッチするということなのですが…

screenにはマルチユーザー機能が在るようで、それはscreenでルートがアタッチしてる場合のみですよね?
間違っていたらすみません。

OSはCentOS 6.2です。

必要な情報があれば補足で追加致します。

宜しくお願いします。

A 回答 (2件)

ラッパープログラムを作成して、そのプログラムにsetuid(所有者をrootにして


chmod 4755)を設定するのがよいでしょう。

以下はラッパープログラムの一例です。execvの引数(/bin/bashの部分)とargvを
書き換えることで任意のプログラムを起動できるでしょう。

--
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <grp.h>
#include <sys/wait.h>

int
main ()
{
 struct passwd *pw;

 pw = getpwuid (geteuid ());

 if (!(pw && pw->pw_name && pw->pw_name[0]))
  {
   perror ("getpwuid");
   exit (EXIT_FAILURE);
  }

 if (initgroups (pw->pw_name, pw->pw_gid) == -1)
  {
   perror ("initgropuos");
   exit (EXIT_FAILURE);
  }

 if (setgid (pw->pw_gid) == -1)
  {
   perror ("setgid");
   exit (EXIT_FAILURE);
  }

 if (setuid (pw->pw_uid) == -1)
  {
   perror ("setuid");
   exit (EXIT_FAILURE);
  }

 char *argv[4];

 argv[0] = "-bash";
 argv[1] = "-c";
 argv[2] = "screen.sh";
 argv[3] = NULL;

 if (execv ("/bin/bash", argv) == -1)
  {
   perror ("execv");
   exit (EXIT_FAILURE);
  }

 exit (EXIT_SUCCESS);
}
--

特定のユーザのみ起動できるようにしたい場合はグループ(ここではwrapperとする)を
作成してchgrp wrapper、chmod 4750すればよいでしょう。

この回答への補足

1.最後の chmod 4750とはどういった設定なのでしょうか?

2.このプログラムを実行、実装するにあたって脆弱性はどのようになりますか?

補足日時:2012/06/21 18:58
    • good
    • 0
この回答へのお礼

回答有り難うございます。
ソースコードも実装にそって書いていただきわかりやすく感謝致します。

回答に関して2点ほど疑問点がありましたので補足法で加筆させて頂きます。

お礼日時:2012/06/21 18:55

下記のURLに書かれているような方法はいかがでしょう。



参考URL:http://dminor11th.blogspot.jp/2011/01/setuid.html
    • good
    • 0
この回答へのお礼

回答有り難うございます。
こういった方法も在るのですね。
セキュリティ面が気になるところですが、勉強として参考にさせて頂きます。

お礼日時:2012/06/21 18:18

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