系統給每個進程定義了一個唯一標識該進程的非負正數,稱作進程標識符。網路進程標識符簡單的表示為網路中主進程表中的一個索引。
基本介紹
- 中文名:網路進程標識符
- 外文名:Network process identifier
- 定義:網路中主進程表中的一個索引
- 系統:Windows和Linux
- 保存位置:進程的PCB中
- 領域:計算機網路
標識簡介
進程標識符
#include <sys/types.h>
#include <unistd.h>
pid_t getpid(void); //返回值:調⽤進程的進程ID
pid_t getppid(void); //返回值:調⽤進程的⽗進程ID
uid_t getuid(void); //返回值:調⽤進程的實際⽤戶ID
uid_t geteuid(void); //返回值:調⽤進程的有效⽤戶ID
gid_t getgid(void); //返回值:調⽤進程的實際組ID
gid_t getegid(void); //返回值:調⽤進程的有效組ID
#include <sys/types.h>
#include <unistd.h>
uid newuid;
pid newgid;
int status;
/* 設定進程的有效用戶標識符 */
status=setuid(newuid);
/* 設定進程的有效組標識符 */
status=getgid(newgid);
Linux進程標識符
/* 取進程的實際用戶標識符 */
uid=getuid();
/* 取進程的有效用戶標識符 */
euid=geteuid();
/* 取進程的實際組標識符 */
gid=getgid();
/* 取進程的有效組標識符 */
egid=getegid();
/* 設定進程的有效用戶標識符 */
status=setuid(newuid);
/* 設定進程的有效組標識符 */
status=setgid(newid)
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<fcntl.h>
#include<stdlib.h>
int main(int argc,char* argv[])
{
int fd;
fd = fork();
switch(fd){
case -1:{
perror("fork");
exit(-1);
}
break;
case 0:
{ //開始進程用戶id和有效用戶id
printf("uid=%d,euid=%d\n",getuid(),geteuid());
//設定用戶id為1000,改變用戶許可權
setuid(1000);
//改變後的用戶id和有效用戶id
printf("uid=%d,euid=%d\n",getuid(),geteuid());
//root用戶才能查看shadow檔案,測試許可權是否改變
execlp("cat","cat","/etc/shadow",NULL);
}
break;
default:
{ //開始進程用戶id和有效用戶id
printf("uid=%d,euid=%d\n",getuid(),geteuid());
//root用戶才能查看shadow檔案
execlp("cat","cat","/etc/shadow",NULL);
}
break;
}
return 0;
}
[root@embedclub file]# ./a.out
uid=0,euid=0
uid=1000,euid=1000
cat: /etc/shadow: 許可權不夠
uid=0,euid=0
root:$$MG0tTs8yWCPoKMrG$tVrZQKQ6IK52ucaSGfHIMKdVHB7zP.rpqD5GO/1w07eYQj0Jgue9S/UijUtyYYQa9Irm2vwj7r.DwaY.5IXIp0:15195:0:99999:7:::
bin:*:14789:0:99999:7:::
[root@embedclub file]# ./a.out
uid=0,euid=0
uid=1000,euid=1000
setuid to root: Operation not permitted
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<fcntl.h>
#include<stdlib.h>
int main(int argc,char* argv[]){
//開始進程用戶id和有效用戶id
printf("uid=%d,euid=%d\n",getuid(),geteuid());
//設定有效用戶id為1000,暫時改變用戶許可權
seteuid(1000);
//改變後的用戶id和有效用戶id
printf("uid=%d,euid=%d\n",getuid(),geteuid());
//設定有效用戶id為0,改變用戶許可權為自己
if(-1 == setuid(0)){
perror("setuid to root");
exit(-1);
}
//改變後的用戶id和有效用戶id
printf("uid=%d,euid=%d\n",getuid(),geteuid());
return 0;
}
#./a.out
uid=0,euid=0
uid=0,euid=1000
uid=0,euid=0
[root@embedclub file]# ./a.out uid=0,euid=0 uid=0,euid=1000 uid=0,euid=0