スポンサーリンク

このドキュメントの内容は、以下の通りです。

[2012-02-22-1]
「Unix suidなコマンドからsystem関数を呼ぶと子プロセスではrootのeuidが失われる」
で書いた通り、 suid なプログラムから setuid(0) などせずに system() を呼び出すと、 system() から起動されるプログラムは、suid の権限を失っている。
これは、 system() から /bin/sh が起動されて、 sh の中で権限を消してしまうからである。

実行する user の uid が 500 だとして、
uid 500 の user がスクリプトを起動する。
そのスクリプトに root の suid ビットを立ててあったとして、
/bin/sh が起動されたときに、 euid が 0, ruid が 500で、
euid が 500 で上書きされて、 suid が結果的に失われる。

スクリプトに suid しても root 権限で実行できないじゃん、
ということで、多段ロケットにしてしまえばいい。

run.c


#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int
main (int argc, char *argv[])
{
	setuid (0);
	system ("/path/to/script.sh");
	exit (0);
}

コンパイル


コンパイルと事前準備。
gcc run.c -o run
chmod u+s run
sudo chown root:wheel run

これで /path/to/script.sh は、権限を失わずに実行できる。
root user の権限でスクリプトが起動されるなら、
そもそも script.sh の suid は立てる必要がないはずなのでは。

この記事のタイトルがおかしくて、
suid できないスクリプトをどうやって root user で起動するか
という話になっている。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー