2016-05-19 7 views
4

私はsuidバイナリでptraceを実行できないことを理解しています。しかし、私はバイナリがその前世代をeuidではなくuidに落とした後、なぜptraceを実行できないのだろうと思っています。ptrace suid process(previlegeを落とした後)

たとえば、バイナリでは、suidバイナリはいくつかの手順の後に特権を削除します。

seteuid (euid); /* euid was obtained by geteuid() */ 
ret_chdir = chdir (path); 
seteuid (ruid); /* ruid was obtained by getuid() */ 

system("whoami"); 
printf("Enter any char"); 
scanf("%c", &junk); 

私の場合、「whoami」と表示されるのはプロセスのユーザー名であり、プロセスの所有者ではありません。プログラムが迷惑メール入力を待っているとき、私はuidをユーザ名として実行中のプロセスにアタッチしようとしていましたが、バイナリが特権を落としたにもかかわらず失敗しました。 ptrace attachがsaved-uid状態を使用して私が所有者ではないと判断する可能性はありますか?

+0

これはunix.stackexchange.comの方が良いかもしれません。これは、実際のプログラミングではなく、Unixの設計についてのさらなる質問です。 – Barmar

答えて

0

yama ptrace scopeはおそらくあなたがプロセスにアタッチすることを妨げています。本質的に、今日のほとんどのLinuxカーネルは、デフォルトでは任意のプロセスへのアタッチを許可していません。

プロセスは、その親(ptrace(PTRACE_TRACEME))でトレースする頼むことができますが、PTRACE_ATTACHを使用したい場合、あなたはそれがあなたのプロセスは、それに接続したいという、prctlを使用して、指定するそのプロセスを必要とする、または山のいずれかスコープを0に設定する必要があります(または、プロセスはもちろんルートとして実行できます)。

関連する問題