/*修改进程用户相关信息
*进程的用户的相关信息有UID,EUID,GID,EGID
*UID,GUID 进程的真实用户即运行此程序的用户和组
*EUID,EGID 进程的有效用户和组,主要和进程的权限有关,即进程在运行时进程所拥有的权限和其
*EUID的权限是一样的,也就是说进程所拥有的权限不一定和执行此进程的用户一样,但几乎所有情况
*是一样的/
/*access核实用户权限
*extern int access(_const char *_name,int _type);
*第一个参数为欲访问文件的路径
*第二个参数为相应的访问权限
*#define R_OK 4 读权限
*#define W_OK 2 写权限
*#define X_OK 1 执行权限
*#define F_OK 0 文件是否存在
*如果具有测试的权限返回0否则返回-1*/
//在访问文件之前需要测试真实用户是否具有访问该文件的权限
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
if(!(access(argv[1],R_OK)))
{
printf("cam read\n");
}
return 0;
}
//设置进程真实用UID,任何进程都有一个UID,该ID为执行此程序的用户,如果要显式修改此值可以调用setuid
//对可执行文件设置 setuid 权限时,将对运行该文件的进程授予基于文件属主的访问权限。该访问权限不是基
//于正在运行可执行文件的用户。使用此特殊权限,用户可以访问通常只有属主才可访问的文件和目录。
extern int setuid(_uid_t _uid)
extern int setgid(_gid_t _gid)//设置用户组
//返回0表示成功否则-1
/*规则:如果当前用户是超级用户,则将设置真实用户号UID,有效用户号EUID为指定ID
*如果当前用户是普通用户,且欲设置的UID值为自己的UID,则可以修改成功,否则无权修改*/
//设置进程有效用户EUID,某个进程的EUID首先由该可执行文件的权限决定,如果该可执行文件没有设置setuid位
//则EUID为执行此进程的用户,如果可执行文件设置了setuid位,则EUID为该可执行文件的拥有者
//拥有者一般为创建该文件的用户
extern int seteuid(_uid_t _uid);
/*规则:如果是超级用户,将设置EUID为指定ID
*如果是普通用户,可以设置EUID为自己的ID,如果想设置其他用户ID会失败*/
//setegid可以用来设置EGUID原理和seteuid一样
extern int setegid(_gid_t _gid)
*进程的用户的相关信息有UID,EUID,GID,EGID
*UID,GUID 进程的真实用户即运行此程序的用户和组
*EUID,EGID 进程的有效用户和组,主要和进程的权限有关,即进程在运行时进程所拥有的权限和其
*EUID的权限是一样的,也就是说进程所拥有的权限不一定和执行此进程的用户一样,但几乎所有情况
*是一样的/
/*access核实用户权限
*extern int access(_const char *_name,int _type);
*第一个参数为欲访问文件的路径
*第二个参数为相应的访问权限
*#define R_OK 4 读权限
*#define W_OK 2 写权限
*#define X_OK 1 执行权限
*#define F_OK 0 文件是否存在
*如果具有测试的权限返回0否则返回-1*/
//在访问文件之前需要测试真实用户是否具有访问该文件的权限
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
if(!(access(argv[1],R_OK)))
{
printf("cam read\n");
}
return 0;
}
//设置进程真实用UID,任何进程都有一个UID,该ID为执行此程序的用户,如果要显式修改此值可以调用setuid
//对可执行文件设置 setuid 权限时,将对运行该文件的进程授予基于文件属主的访问权限。该访问权限不是基
//于正在运行可执行文件的用户。使用此特殊权限,用户可以访问通常只有属主才可访问的文件和目录。
extern int setuid(_uid_t _uid)
extern int setgid(_gid_t _gid)//设置用户组
//返回0表示成功否则-1
/*规则:如果当前用户是超级用户,则将设置真实用户号UID,有效用户号EUID为指定ID
*如果当前用户是普通用户,且欲设置的UID值为自己的UID,则可以修改成功,否则无权修改*/
//设置进程有效用户EUID,某个进程的EUID首先由该可执行文件的权限决定,如果该可执行文件没有设置setuid位
//则EUID为执行此进程的用户,如果可执行文件设置了setuid位,则EUID为该可执行文件的拥有者
//拥有者一般为创建该文件的用户
extern int seteuid(_uid_t _uid);
/*规则:如果是超级用户,将设置EUID为指定ID
*如果是普通用户,可以设置EUID为自己的ID,如果想设置其他用户ID会失败*/
//setegid可以用来设置EGUID原理和seteuid一样
extern int setegid(_gid_t _gid)