MAN access 2

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск


Вернуться в раздел мануалов


Это - статья, добавленная автоматически, при помощие специальной программы-робота. Пожалуйста убедитесь что статья добавлена коррекно, исправьте её если это потребуется и уберите пометку {{Bot added}}].

Содержание

[править] Имя

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

[править] Обзор

#include <unistd.h>
int access(const char * pathname , int mode );

[править] Описание

access проверяет, имеет ли процесс права на чтение или запись, или же просто проверяет, существует ли файл (или другой объект файловой системы), с именем pathname . Если pathname является символьной ссылкой, то проверяются права доступа к файлу, на который она ссылается.

mode -- это маска, состоящая из одного или более флагов R_OK , W_OK , X_OK и F_OK . R_OK , W_OK и X_OK запрашивают соответственно проверку существования файла и возможности его чтения, записи или выполнения. F_OK просто проверяет существование файла.

Результаты проверки зависят от прав доступа к каталогам, находящимся по пути к файлу, заданному параметром pathname , и от прав доступа к каталогам и файлам, на которые ссылаются символьные ссылки, встреченные по пути.

Проверка осуществляется, используя реальные , а не эффективные идентификаторы пользователя и группы. Эффективные идентификаторы будут использоваться при действительной попытке выполнения той или иной операции. Это дает setuid-программам простой способ проверить права доступа настоящего пользователя.

Проверяются только биты прав доступа, а не тип файла или его содержимое. Таким образом, если каталог имеет "возможность записи", это, вероятно, означает, что в нем можно создавать файлы, а не что в этот каталог можно писать так же, как в обычный файл. Подобно этому файл из DOS может показаться "выполняемым", но системный вызов execve (2) завершится неудачно.

Если процесс имеет соответствующие привилегии, то некоторые реализации могут показать успех для X_OK даже если права на файл не содержат бит, разрешающий выполнение.

[править] Возвращаемое значение

В случае успеха (есть все запрошенные права) возвращается нуль. При ошибке (по крайней мере один запрос прав из mode был неудовлетворен, или случилась другая ошибка), возвращается -1, а errno устанавливается должным образом.

[править] Ошибки

access будет завершаться с ошибкой если:

0.8i EACCES Запрошенный тип доступа не удовлетворен или один из каталогов в pathname не позволяет поиск.

ELOOP Во время определения pathname встретилось слишком много символьных ссылок (зацикливание по символьным сслыкам -- прим. пер.).

ENAMETOOLONG pathname слишком длинно.

ENOENT Компонент пути pathname не существует или является "висячей" символической ссылкой.

ENOTDIR Компонент пути, использованный как каталог в pathname , в действительности таковым не является.

EROFS Файл находится на файловой системе, смонтированной только для чтения.


access может завершиться с ошибкой, если: EFAULT pathname указывает за пределы доступного адресного пространства.

EINVAL mode был задан неверно.

EIO Произошла ошибка ввода-вывода.

ENOMEM Ядру не хватило памяти.

ETXTBSY Права на запись были затребованы для исполняемого файла, который уже выполняется.

[править] Ограничения

access возвращает ошибку, если один из запрошенных типов доступа не будет удовлетворён, даже если другие типы прошли бы успешно.

access может работать неверно на файловых системах NFS со включенным преобразованием UID'ов, потому что это преобразование происходит на сервере и спрятано от клиента, который пытается проверить права.

Использование access для проверки, можно ли пользователю, например, открыть файл перед тем, как действительно выполнить open (2), создает дыру в защите, потому что пользователь может в короткий промежуток между проверкой и открытием файла как-то его изменить.

[править] Соответствие стандартам

SVID, AT&T, POSIX, X/OPEN, BSD 4.3

[править] Смотри также

stat (2), open (2), chmod (2), chown (2), setuid (2), setgid (2).

[править] Перевод

Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999, Виктор Вислобоков <corochoone@perm.ru> 2003

[править] Комментарии к man файлу

Hey Emacs! This file is -*- nroff -*- source.

This manpage is Copyright (C) 1992 Drew Eckhardt;
1993 Michael Haardt, Ian Jackson.

Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one

Since the Linux kernel and libraries are constantly changing, this
manual page may be incorrect or out-of-date. The author(s) assume no
responsibility for errors or omissions, or for damages resulting from
the use of the information contained herein. The author(s) may not
have taken the same level of care in the production of this manual,
which is licensed free of charge, as they might when working
professionally.

Formatted or processed versions of this manual, if unaccompanied by
the source, must acknowledge the copyright and authors of this work.

Modified Wed Jul 21 19:36:29 1993, Rik Faith (faith@cs.unc.edu)
Modified 21 Aug 1994 by Michael Chastain (mec@shell.portal.com):
Removed note about old kernel (pre-1.1.44) using wrong id on path.
Modified 18 Mar 1996 by Martin Schulze (joey@infodrom.north.de):
Stated more clearly how it behaves with symbolic links.
Added correction due to Nick Duffek (nsd@bbc.com), aeb, 960426
Modified Sat Sep 07 18:17:26 MET DST 1996 by Michael Haardt:
Restrictions for NFS
Modified by Joseph S. Myers <jsm28@cam.ac.uk>, 970909
Modified Tue Jan 13 21:21:03 MET 1998 by Michael Haardt:
Using access is often insecure
Modified Tue Oct 16 02:40:48 CEST 2001 by aeb
Modified Tue Apr 23 19:51:15 CEST 2002 by Roger Luethi <rl@hellgate.ch>
Дата последней коррекции перевода 06.12.2003
Оригинальный перевод Алексея Махоткина <alexm@hsys.msk.ru> 1999-2001
Дополнения и правки перевода сделал Виктор Вислобоков <corochoone@perm.ru>
http://www.linuxshare.ru/projects/trans/mans.html

Источник — «http://ru.gentoo-wiki.com/MAN_access_2»
Личные инструменты