web-dev-qa-db-ja.com

奇妙なstraceとsetuidの動作:straceでアクセスが拒否されましたが、正常に実行されていません

これは この質問 に関連しています。

スクリプトがあります(fix-permissions.sh)いくつかのファイルパーミッションを修正します:

#! /bin/bash 
Sudo chown -R person:group /path/
Sudo chmod -R g+rw /path/

そしてこれを実行するための小さなcプログラムはsetuidedです:

#include "sys/types.h"
#include "unistd.h"
int main(){
    setuid(geteuid());
    return system("/path/fix-permissions.sh");
}

ディレクトリ:

-rwsr-xr-x  1 root  root  7228 Feb 19 17:33 fix-permissions
-rwx--x--x  1 root  root   112 Feb 19 13:38 fix-permissions.sh

これを行うと、すべてが正常に見え、アクセス許可は正しく修正されます。

       james $ Sudo su someone-else
someone-else $ ./fix-permissions

しかし、straceを使用すると、次のようになります。

someone-else $ strace ./fix-permissions
/bin/bash: /path/fix-permissions.sh: Permission denied

identicalセットアップ(permissions、cプログラム)で同じアクセス許可拒否エラーが発生しますが、使用していない場合でもスクリプトが異なることに注意してください。 strace。これは、私が明らかにしているsetuidでのある種のheureustic魔法の振る舞いですか?

何が起こっているのかをどのように理解する必要がありますか?

システムはUbuntu10.04.2 LTS、Linux 2.6.32.26-kvm-i386-20101122#1SMPです

1
James

Linuxは、straceまたは同様のプログラムでプロセスを実行するときに、setuidビットを無視します。

  • Linux-カーネルメーリングリスト、 Re:2.4.16 + strace 4.4 + setuidプログラム

    差出人:Manfred Spraul
    日付:2001年12月6日木曜日-12:25:53 EST

    Setuidのものをstraceし、setuidビットを尊重する場合は、-uオプションを指定してstraceをrootとして実行する必要があります。

    いいえ、それでももう不可能です。 rootがptracingしている場合でも、プロセスがptraceされている場合、setuidは常に無視されるようになりました。これは、最新のptraceルートエクスプロイト(2.4.1x)の修正です。

これはおそらく話している:

4
user1686