task_struct *
私はfind_task_by_vpid(get_pid())
に電話しました。どのユーザがそのプロセスを所有しているのか分かりたいので、私が書いているシステムコールで何らかのパーミッションチェックをすることができますが、task_struct
のソースコードを見てもそれほど助けにはなりません。役に立ったと思われるのはloginuid
ですが、何らかの理由でこれにアクセスしようとするとカーネルはコンパイルされません:my_task_struct->loginuid
。 task_struct
からプロセスを呼び出したユーザーを取得する別の方法はありますか?プロセスのtask_structからプロセスを所有しているユーザーを見つける方法はありますか?
答えて
残念ながら、ユーザーIDとグループIDはタスク構造体に格納されず、代わりに、同じIDを持つすべてのタスク間で動的に割り当てられ、共有される別個の権限構造に格納されます。これは、順番にsetuid
が枯渇資源に起因する失敗する可能性が状況を作成し、権限を支えるためにsetuid
の失敗は、脆弱性の悪名高い源である...とにかく
、それはtask_struct
のこれらのメンバーである:
const struct cred __rcu *real_cred; /* objective and real subjective task
* credentials (COW) */
const struct cred __rcu *cred; /* effective (overridable) subjective task
* credentials (COW) */
あなたは(Linuxの4.9.13のように)以下の線に沿って何かを行うことができますカーネル空間内のユーザーID(UID)にアクセスする
本当に助けていただきありがとうございます。その初期化されたuser_structを初期化する方法を知っていますか? – saman
@サマン:そうではありませんが、 'setuid()'などのコードを見つけてください。 –
@R ..私はsetuidシステムコールの宣言をunistd.hで見つけることができますが、私はこのシステムコールの実装を見つけることができません[ここ](http://stackoverflow.com/questions/27594865/add-another -field-to-user-struct)は私の質問です。あなたはそれに答えることができますか? – saman
:
struct task_struct *task;
for_each_process(task) {
uid_t uid = __kuid_val(task_uid(task));
}
task_uid
は、構造体を返しますkuid_t
と呼ばれ、実際の値にアクセスするには、__kuid_val
に電話するか、直接アクセスしてください(task_uid(task).val
)。
また、from_kuid(&init_user_ns, task_uid(task))
を使用することもできます。
- 1. カーネル:プロセスのtask_structからすべてのスレッドを見つける方法?
- 2. プロセスを追跡しているユーザーを見つける方法
- 3. 実行中のプロセスのメモリリークを見つける方法はありますか?
- 4. perlスクリプト(Linuxプロセス)がハングしている場所を見つける方法
- 5. WindowsServiceからC#の現在ログインしているユーザーを見つける方法はありますか?
- 6. 死にかけているプロセスのコールスタックを取得する方法、つまりプロセスがどのように終了しているかを調べる方法
- 7. プロセスIDが与えられたプロセスのすべてのスレッドを見つける
- 8. .ashx WebハンドラファイルでProcessRequestと呼ばれるプロセスを見つける方法はありますか。
- 9. プロセスのキャッシュアクセストレースを見つける方法は?
- 10. プロセス名でプロセスidを取得する方法はありますか?
- 11. 特定のカーネルモジュールを使用してプロセスのリストを見つける方法は?
- 12. Solaris上で自分のプロセスにシグナルを送信したプロセスやプロセスを見つける方法
- 13. Cのforkedプロセスで共有/コピーされたメモリページを見つける方法
- 14. カーネル:pidでtask_structを見つける効率的な方法は?
- 15. Windowsの開いているファイルハンドルの所有者プロセスをリストしますか?
- 16. Pythonはユーザーが所有するすべてのプロセスを終了させます
- 17. ファイルを所有しているピップパッケージを見つけるには?
- 18. ユーザーの現在の場所(mozillaとchrome以外のブラウザ)を見つける方法はありますか?
- 19. C#:現在のプロセスを見つける
- 20. Cocoa App:実行中のプロセスを見つける方法
- 21. linuxの親プロセスIDを見つける方法
- 22. Glassfishでリモートデバッグを実行しているユーザーを見つける方法はありますか?
- 23. 子プロセスにファイル記述子を付ける方法はありますか?
- 24. コントロールのオーナースレッドを見つける方法はありますか?
- 25. Python変数を所有するクラスを見つける方法
- 26. あるプロセスから別のプロセスにpingする必要があります
- 27. IDからFacebookページのURLを見つける方法はありますか?
- 28. コンパイラプラグインからScalaプログラムのステートメントを見つける方法はありますか?
- 29. あるプロセスのstdoutを別のプロセスのstdinにリダイレクトする方法はありますか?
- 30. 別のプロセスからClojure REPLプロセスと対話する方法はありますか?
'geteuid'の実装を見てください。しかし、権限チェックのために、システムの残りの部分と矛盾する独自のロジックを作り上げるのではなく、そのようなもののために既存の一般的なフレームワークを使用したいと思うことはほぼ確実です。 – zwol
私は 'geteuid()'を使ってシステムコールを呼び出したユーザの 'euid 'を取得しますが、' task_struct'の 'uid'(または' euid')をどのように取得するのかはわかりません。 'pid'がシステムコール自体に渡されます。 – Mason