pid ppid uid euid gid egid

本文详细介绍了如何在Linux环境下通过C语言获取进程的PID、PPID、UID、EUID、GID、EGID的方法,包括用户空间和内核空间的操作方式。

pid --- 进程号

ppid --- 父进程号

uid --- 用户id, 也就是该进程的所有者id
euid --- 有效用户id,

uid为文件的执行者,而euid为文件的所有者,ps命令中看到的用户为文件的所有者。

1. 用户空间获取pid, uid, euid,gid方法:

示例代码如下:

#include <stdio.h>
#include <unistd.h>

int main (int argc, char **argv)
{
        pid_t pid;
        pid = getpid();

        pid_t ppid;
        ppid = getppid();

        fprintf(stdout, "pid = %d, ppid = %d\n", pid, ppid);

        uid_t uid, euid;
        gid_t gid, egid;

        current->pid;


        uid = getuid(); 
        euid = geteuid(); 
        gid = getgid(); 
        egid = getegid(); 

        fprintf(stdout, "uid = %d, euid = %d\n", uid, euid); 
        fprintf(stdout, "gid = %d, egid = %d\n", gid, egid); 
        sleep(500); 
        return 0;
}

2. 内核空间驱动程序中, 可以使用如下函数获得uid, euid, gid, egid, pid, ppid.

获得当前进程的uid:

current_uid()
获得当前进程的euid:
current_euid()

获取当前进程的父进程pid:

current->pid;
获得当前进程的命令名:
current->comm;
都包含在头文件linux/sched.h 中。

以前老的版本中,task_struct 结构体终究包含uid, 和 euid, 新版本中,已经移除了。


type=AVC msg=audit(1757470792.691:207): avc: denied { read } for pid=1623 comm="httpd" name="tools" dev="0:44" ino=33561573 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir permissive=0 type=SYSCALL msg=audit(1757470792.691:207): arch=c000003e syscall=257 success=no exit=-13 a0=ffffffffffffff9c a1=55e883c3df50 a2=90800 a3=0 items=0 ppid=1437 pid=1623 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null) type=PROCTITLE msg=audit(1757470792.691:207): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44 type=AVC msg=audit(1757470793.787:208): avc: denied { read } for pid=1623 comm="httpd" name="tools" dev="0:44" ino=33561573 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir permissive=0 type=SYSCALL msg=audit(1757470793.787:208): arch=c000003e syscall=257 success=no exit=-13 a0=ffffffffffffff9c a1=55e883c41f70 a2=90800 a3=0 items=0 ppid=1437 pid=1623 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null) type=PROCTITLE msg=audit(1757470793.787:208): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44 type=USER_ACCT msg=audit(1757470801.484:209): pid=2422 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:accounting grantors=pam_access,pam_unix,pam_localuser acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success' type=CRED_ACQ msg=audit(1757470801.484:210): pid=2422 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:setcred grantors=pam_env,pam_unix acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success' type=LOGIN msg=audit(1757470801.485:211): pid=2422 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=2 res=1 type=USER_START msg=audit(1757470801.494:212): pid=2422 uid=0 auid=0 ses=2 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success' type=CRED_REFR msg=audit(1757470801.494:213): pid=2422 uid=0 auid=0 ses=2 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:setcred grantors=pam_env,pam_unix acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success' type=CRED_DISP msg=audit(1757470801.502:214): pid=2422 uid=0 auid=0 ses=2 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:setcred grantors=pam_env,pam_unix acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success' type=USER_END msg=audit(1757470801.504:215): pid=2422 uid=0 auid=0 ses=2 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_close grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'
09-11
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值