setuid() - Unix, Linux系统调用
Tutorials Point


  Unix入门
  Unix Shell编程
  高级Unix
  Unix有用参考
  Unix有用资源
  精选阅读

版权所有 © 2014 tutorialspoint



  首页     参考资料     讨论论坛     关于TP  

setuid() - Unix, Linux系统调用


previous next AddThis Social Bookmark Button

广告

名称

setuid - 设置用户身份

概要

#include <sys/types.h>
#include <unistd.h>

int setuid(uid_t uid);

描述

setuid() 设置当前进程的有效用户ID。如果调用者的有效UID是root,则也会设置真实UID和已保存的set-user-ID。

在Linux下,setuid() 的实现方式与具有_POSIX_SAVED_IDS 特性的POSIX版本相同。这允许set-user-ID(非root)程序放弃所有用户权限,执行一些非特权工作,然后以安全的方式重新启用原始有效用户ID。

如果用户是root或程序是set-user-ID-root,则必须特别小心。setuid() 函数会检查调用者的有效用户ID,如果它是超级用户,则所有进程相关的用户ID都将设置为uid。发生这种情况后,程序将无法恢复root权限。

因此,希望暂时放弃root权限,假定非root用户的身份,然后恢复root权限的set-user-ID-root程序不能使用setuid()。可以使用(非POSIX,BSD)调用seteuid()来实现此目的。

返回值

成功时,返回零。出错时,返回-1,并适当地设置errno

错误

标签描述
EAGAIN uid与当前uid不匹配,并且uid使进程超过其NPROC rlimit。
EPERM 用户没有权限(Linux:没有CAP_SETUID能力),并且uid与调用进程的真实UID或已保存的set-user-ID不匹配。

符合标准

SVr4,POSIX.1-2001。与设置所有真实、已保存和有效用户ID的4.4BSD调用不完全兼容。

Linux特定说明

Linux具有文件系统用户ID的概念,通常等于有效用户ID。setuid()调用还会设置当前进程的文件系统用户ID。参见setfsuid(2)。

如果uid与旧的有效uid不同,则进程将被禁止留下核心转储。

参见



previous next Printer Friendly

广告


  

广告



广告