修改进程用户相关信息
int access (__const char *__name, int __type):检测当前进程是否拥有对某文件的访问权限
参数1:待访问文件
参数2:相应权限 4(R_OK 可读),2(W_OK 可写), 1(X_OK 可执行), 0(F_OK 文件存在)
如果具有权限,将返回0,否则返回-1.错误状态包括 EACCES(不具有访问权限), ENOENT(文件不存在), EROFS(只读的文件系统要求写权限)
int i;if((i = access("/etc/exports", X_OK)) == -1){ perror("access"); exit(EXIT_FAILURE);}else{ //...}
int setuid (__uid_t __uid):设置进程真实用户RUID
参数为预设值的真实用户号。
超级用户执行:将设置真实用户号UID,有效用户号EUID为指定ID,并返回0表示成功。
普通用户执行:若设置为自己的UID值,可以成功;否则无权修改,返回-1.
#include#include #include int main(){ int uid, euid, suid; getresuid(&uid, &euid, &suid); printf("uid = %d, euid = %d, suid = %d\n", uid, euid, suid); printf("after setuid(501)\n"); setuid(501); uid = -1; euid = -1; suid = -1; getresuid(&uid, &euid, &suid); printf("uid = %d, euid = %d, suid = %d\n", uid, euid, suid); return 0;}
root用户执行结果,可以成功修改
普通用户执行结果,不可修改
int setgid (__gid_t __gid):修改过进程用户的GID,使用方法与setuid类似。
int seteuid (__uid_T __uid):设置有效用户号EUID
超级用户:设置有效用户号为指定ID,成功返回0,失败返回-1;
普通用户:可以设置为自己的ID,设置为其他失败。
int setegid (__gid_t __gid):设置有效用户组id
int setreuid (__uid_t __ruid, __uid_t __euid):同时设置RUID和EUID
int setregid (__gid_t __rgid, __gid_t __egid):同时设置真实用户组和有效用户组