> Linux Reviews > man >

setuid

setuid


  1. setuid.2.man


1. setuid.2.man

Manpage of SETUID

SETUID

Section: Руководство программиста Linux (2)
Updated: 2010-02-21
Index Return to Main Contents
 

ИМЯ

setuid - устанавливает идентификатор пользователя  

ОБЗОР

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

int setuid(uid_t uid);  

ОПИСАНИЕ

setuid() устанавливает эффективный идентификатор владельца вызывающего процесса. Если эффективный идентификатор вызывающего является суперпользователем (root), то также устанавливаются действительный и сохранённый идентификаторы.

В Linux setuid() реализован как и в стандарте POSIX с возможностью _POSIX_SAVED_IDS. Это позволяет setuid-программам (не setuid-root) сбрасывать все привилегии, делать непривилегированную работу, а затем безопасным путём возвращать себе исходный эффективный идентификатор пользователя.

Если пользователь root или программа установлена как setuid root, при работе требуется особая осторожность. Функция setuid() проверяет эффективный идентификатор вызвавшего пользователя и, если это суперпользователь, то все устанавливаемые значения идентификаторов равны uid. После этого программа уже никаким образом не сможет вернуть права пользователя root.

Таким образом, программа setuid-root, собирающаяся сбросить права root, временно поработать с правами непривилегированным пользователем, а затем восстановить права root, не сможет использовать setuid(). Требуемого результата можно достичь с помощью вызова seteuid(2).  

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.  

ОШИБКИ

EAGAIN
Значение uid не совпадает с текущим uid и uid выводит процесс за его ограничение по ресурсу RLIMIT_NPROC.
EPERM
Пользователь не является суперпользователем (Linux: нет мандата CAP_SETUID), а uid не совпадает с действительным или сохранённым идентификатором пользователя вызывающего процесса.
 

СООТВЕТСТВИЕ СТАНДАРТАМ

SVr4, POSIX.1-2001. Этот системный вызов не полностью совместим с 4.4BSD, который устанавливает действительный, эффективный и сохранённый идентификаторы пользователя.  

ЗАМЕЧАНИЯ

 

Замечания, касающиеся Linux

Linux поддерживает идентификатор пользователя файловой системы, обычно совпадающий с эффективным идентификатором. Системный вызов setuid() также устанавливает идентификатор пользователя файловой системы вызывающего процесса. См. setfsuid(2).

Если uid отличается от старого эффективного идентификатора, то процессу нельзя будет создавать core-файлы.  

СМОТРИТЕ ТАКЖЕ

getuid(2), seteuid(2), setfsuid(2), setreuid(2), capabilities(7), credentials(7)


 

Index

ИМЯ
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
СООТВЕТСТВИЕ СТАНДАРТАМ
ЗАМЕЧАНИЯ
Замечания, касающиеся Linux
СМОТРИТЕ ТАКЖЕ

This document was created by man2html using the manual pages.
Time: 17:41:59 GMT, May 11, 2012

SVENSKA - SVENSKA - SVENSKA - SVENSKA - ja - nl