をtask_struct *
呼び出すことで得たものがありfind_task_by_vpid(get_pid())
ます。作成しているシステムコールで権限チェックを実行できるように、そのプロセスを所有しているユーザーを把握したいのですが、task_struct
ソースコードを調べてもあまり役に立ちませんでした。役に立ったと思われるのは、だけですが、loginuid
次のようにアクセスしようとすると、何らかの理由でカーネルがコンパイルされませんmy_task_struct->loginuid
。プロセスを呼び出したユーザーをから取得する別の方法はありtask_struct
ますか?
2605 次
2 に答える
7
残念ながら、ユーザー/グループ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) */
于 2012-10-27T23:22:36.183 に答える
0
カーネル空間内のユーザーID(UID)にアクセスするには、次のように実行できます(Linux 4.9.13以降)。
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))
。
于 2017-08-21T13:41:22.273 に答える