C语言中设置用户识别码的相关函数的简单讲解

C语言setuid()函数:设置真实的用户识别码

头文件:

#include <unistd.h>

定义函数:

int setuid(uid_t uid);

函数说明:
setuid()用来重新设置执行目前进程的用户识别码. 不过, 要让此函数有作用, 其有效的用户识别码必须为0(root). 在Linux 下, 当root 使用setuid()来变换成其他用户识别码时, root 权限会被抛弃, 完全转换成该用户身份, 也就是说, 该进程往后将不再具有可setuid()的权利, 如果只是向暂时抛弃root 权限, 稍后想重新取回权限, 则必须使用seteuid().

返回值:执行成功则返回0, 失败则返回-1, 错误代码存于errno.

附加说明:一般在编写具 setuid root 的程序时, 为减少此类程序带来的系统安全风险, 在使用完root 权限后建议马上执行setuid(getuid());来抛弃root 权限. 此外, 进程uid 和euid 不一致时Linux 系统将不会产生core dump.

C语言setreuid()函数:设置真实及有效的用户识别码

头文件:

#include <unistd.h>

定义函数:

int setreuid(uid_t ruid, uid_t euid);

函数说明:setreuid()用来将参数ruid 设为目前进程的真实用户识别码, 将参数euid 设置为目前进程的有效用户识别码. 如果参数ruid 或euid 值为-1, 则对应的识别码不会改变。

返回值:执行成功则返回0, 失败则返回-1, 错误代码存于errno.

C语言setfsuid()函数:设置文件系统的用户识别码
头文件:

 #include <unistd.h>

定义函数:

int setfsuid(uid_t fsuid);

函数说明:setfsuid()用来重新设置目前进程的文件系统的用户识别码. 一般情况下, 文件系统的用户识别码(fsuid)与有效的用户识别码(euid)是相同的. 如果是超级用户调用此函数, 参数fsuid 可以为任何值, 否则参数fsuid 必须为real/effective/saved 的用户识别码之一.

返回值:执行成功则返回0, 失败则返回-1, 错误代码存于errno 附加说明此函数为 Linux 特有

错误代码:
EPERM:权限不够, 无法完成设置.

(0)

相关推荐

  • 简要对比C语言中的dup()函数和dup2()函数

    C语言dup()函数:复制文件描述词 头文件: #include <unistd.h> 定义函数: int dup (int oldfd); 函数说明:dup()用来复制参数oldfd 所指的文件描述词, 并将它返回. 此新的文件描述词和参数oldfd 指的是同一个文件, 共享所有的锁定.读写位置和各项权限或旗标. 例如, 当利用lseek()对某个文件描述词作用时, 另一个文件描述词的读写位置也会随着改变. 不过, 文件描述词之间并不共享close-on-exec 旗标. 返回值:当复制成功

  • 用C语言求幂函数和指数函数的方法

    C语言pow()函数:求x的y次方(次幂) 头文件: #include <math.h> pow() 函数用来求 x 的 y 次幂(次方),其原型为: double pow(double x, double y); pow()用来计算以x 为底的 y 次方值,然后将结果返回.设返回值为 ret,则 ret = xy. 可能导致错误的情况: 如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误. 如果底数 x 和指数 y 都是 0,可能会导致 domain err

  • C语言中fgetgrent()函数和fgetpwent()函数的用法对比

    C语言fgetgrent()函数:读取组格式函数 头文件: #include <grp.h> #include <stdio.h> #include <sys/types.h> 定义函数: struct group * getgrent(FILE * stream); 函数说明:fgetgrent()会从参数stream 指定的文件读取一行数据, 然后以group 结构将该数据返回. 参数stream 所指定的文件必须和.etc/group 相同的格式. group 结

  • C语言中设置用户识别码的相关函数的简单讲解

    C语言setuid()函数:设置真实的用户识别码 头文件: #include <unistd.h> 定义函数: int setuid(uid_t uid); 函数说明: setuid()用来重新设置执行目前进程的用户识别码. 不过, 要让此函数有作用, 其有效的用户识别码必须为0(root). 在Linux 下, 当root 使用setuid()来变换成其他用户识别码时, root 权限会被抛弃, 完全转换成该用户身份, 也就是说, 该进程往后将不再具有可setuid()的权利, 如果只是向暂

  • C语言中获取进程识别码的相关函数

    C语言getpid()函数:获取进程识别码 头文件: #include <unistd.h> 定义函数: pid_t getpid(void); 函数说明:getpid ()用来取得目前进程的进程识别码,许多程序利用取到的此值来建立临时文件, 以避免临时文件相同带来的问题. 返回值:目前进程的进程识别码 范例 #include <unistd.h> main() { printf("pid=%d\n", getpid()); } 执行: pid=1494 /*每

  • C语言中设置进程优先顺序的方法

    C语言setpriority()函数:设置程序进程执行优先权 头文件: #include <sys/time.h> #include <sys/resource.h> 定义函数: int setpriority(int which, int who, int prio); 函数说明:setpriority()可用来设置进程.进程组和用户的进程执行优先权.参数which 有三种数值, 参数who 则依which 值有不同定义. which who 代表的意义: 1.PRIO_PROC

  • C语言中获取文件状态的相关函数小结

    C语言stat()函数:获取文件状态 头文件: #include <sys/stat.h> #include <unistd.h> 定义函数: int stat(const char * file_name, struct stat *buf); 函数说明:stat()用来将参数file_name 所指的文件状态, 复制到参数buf 所指的结构中. 下面是struct stat 内各参数的说明: struct stat { dev_t st_dev; //device 文件的设备编

  • C语言中返回错误信息的相关函数用法总结

    C语言strerror()函数:返回错误原因的描述字符串 头文件: #include <string.h> 定义函数: char * strerror(int errnum); 函数说明:strerror()用来依参数errnum 的错误代码来查询其错误原因的描述字符串, 然后将该字符串指针返回. 返回值:返回描述错误原因的字符串指针. 范例: /* 显示错误代码0 至9 的错误原因描述 */ #include <string.h> main() { int i; for(i =

  • C语言中操作utmp文件的相关函数用法

    C语言getutent()函数:从utmp文件中取得账号登录数据 头文件: #include <utmp.h> 定义函数: struct utmp *getutent(void); 函数说明:getutent()用来从utmp 文件(/var/run/utmp)中读取一项登录数据, 该数据以utmp 结构返回. 第一次调用时会取得第一位用户数据, 之后每调用一次就会返回下一项数据, 直到已无任何数据时返回NULL. utmp 结构定义如下: struct utmp { short int ut

  • C语言中操作进程信号的相关函数使用详解

    C语言signal()函数:设置信号处理方式 头文件: #include <signal.h> 定义函数: void (*signal(int signum, void(* handler)(int)))(int); 函数说明:signal()会依参数signum 指定的信号编号来设置该信号的处理函数. 当指定的信号到达时就会跳转到参数handler 指定的函数执行. 如果参数handler 不是函数指针, 则必须是下列两个常数之一: 1.SIG_IGN 忽略参数signum 指定的信号. 2

  • C语言中获取和改变目录的相关函数总结

    C语言getcwd()函数:取得当前的工作目录 头文件: #include <unistd.h> 定义函数: char * getcwd(char * buf, size_t size); 函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小. 注: 1.在调用此函数时,buf 所指的内存空间要足够大.若工作目录绝对路径的字符串长度超过参数size 大小,则返回NULL,errno 的值则为ERANGE. 2.倘若参数buf

  • C语言中对字母进行大小写转换的简单方法

    C语言tolower()函数:将大写字母转换为小写字母 头文件: #include <ctype.h> 定义函数: int toupper(int c); 函数说明:若参数 c 为小写字母则将该对应的大写字母返回. 返回值:返回转换后的大写字母,若不须转换则将参数c 值返回. 范例:将s 字符串内的小写字母转换成大写字母. #include <ctype.h> main(){ char s[] = "aBcDeFgH12345;!#$"; int i; prin

  • django的settings中设置中文支持的实现

    今天创建了个django工程,用的是目前django 1.9.6,创建工程后,settings.py中设置中文显示支持(最简单的,例如把admin界面的默认英文改成中文),定义 TIME_ZONE = 'Asia/Shanghai' LANGUAGE_CODE = 'zh-cn' 当然TIME_ZONE只是指定时区,和中文显示没有关系,这里一并修改了默认值.结果运行项目时报错了,如下: django IOError: No translation files found for default

随机推荐