NOMBRE¶
access - comprueba los permisos de usuario para un fichero
SINOPSIS¶
#include <unistd.h>
int access(const char *pathname, int mode);
DESCRIPCIÓN¶
access comprueba si al proceso se le permitiría leer, escribir o
comprobar la existencia del fichero (u otro objeto del sistema de ficheros)
cuyo nombre es
pathname. Si
pathname es un enlace simbólico
se comprueban los permisos del fichero referenciado por dicho enlace
simbólico.
mode es una máscara compuesta por uno o más de los siguientes
elementos:
R_OK,
W_OK,
X_OK y
F_OK.
R_OK,
W_OK y
X_OK se utilizan para la comprobación de
lectura, escritura o ejecución del fichero, respectivamente.
F_OK
se utiliza para ver si se permite la mera comprobación de la existencia
del fichero. Esto depende de los permisos de los directorios que aparecen en
el camino hasta el fichero, tal como se da en
pathname, y de los
permisos de los directorios y ficheros referenciados por los enlaces
simbólicos que se pueden encontrar a lo largo del camino.
La comprobación se realiza con los uid y gid
reales del proceso, en
lugar de utilizar los identificadores efectivos, tal como se hace cuando
realmente se intenta una operación. Esto permite a los programas con el
bit
SETUID activo determinar fácilmente la autoridad del usuario
invocador.
Sólo se comprueban los bits de acceso, no el tipo de fichero o sus
contenidos. Por lo tanto, si encontramos que un directorio se puede
"escribir", probablemente esto significa que se pueden crear
ficheros en el directorio, no que el directorio se pueda escribir como se hace
con un fichero. Similarmente, podemos encontrar un fichero DOS como
"ejecutable" y, aún así, puede fallar una llamada a
execve(2).
Si el proceso tiene los privilegios apropiados, una implementación puede
indicar éxito para
X_OK aun si ninguno de los bits de permiso de
ejecución del fichero están activos.
VALOR DEVUELTO¶
Si ha habido éxito (se han concedido todos los permisos solicitados) la
función devuelve un valor 0. Si se ha producido un error (al menos, uno
de los bits de
mode ha interrogado por un permiso que ha sido denegado,
o ha ocurrido algún otro tipo de error), la función devuelve -1 y a
errno se le asigna un valor adecuado.
ERRORES¶
access fallará si:
- EACCES
- Se denegaría el acceso solicitado al fichero o se
deniega el permiso de búsqueda para uno de los directorios en
pathname.
- ELOOP
- Se han encontrado demasiados enlaces simbólicos al
resolver pathname.
- ENAMETOOLONG
- pathname es demasiado largo.
- ENOENT
- Un directorio componente de pathname es accesible
pero no existe o es un enlace simbólico colgado.
- ENOTDIR
- Un componente usado como directorio en pathname no
es, de hecho, un directorio.
- EROFS
- Se ha solicitado permiso de escritura para un fichero en un
sistema de ficheros de sólo lectura.
access puede fallar si:
- EFAULT
- pathname apunta fuera del espacio de direcciones al
que tiene acceso."
- EINVAL
- mode se ha especificado incorrectamente
- ENOMEM
- No hay suficiente memoria disponible en el
núcleo.
- EIO
- Ha ocurrido un error de E/S.
- ENOMEM
- Memoria del núcleo insuficiente.
- ETXTBSY
- Se requiere acceso de escritura para un ejecutable que
está siendo ejecutado.
RESTRICCIONES¶
access regresa un error si falla cualquiera de los tipos de acceso
especificados en la llamada a la función, aunque los otros tipos tuvieran
éxito.
access no puede funcionar correctamente sobre sistemas de ficheros NFS
que tengan activa la aplicación del UID, porque la aplicación del
UID se realiza en el servidor y se oculta a los clientes que comprueban los
permisos.
Usar
access para comprobar si un usuario está autorizado a, por
ejemplo, abrir un fichero antes de que realmente lo haga usando
open(2), crea un agujero de seguridad ya que el usuario podría
explotar el breve intervalo de tiempo que hay entre la comprobación y la
apertura del fichero para manipularlo.
SVID, AT&T, POSIX, X/OPEN, BSD 4.3
VÉASE TAMBIÉN¶
stat(2),
open(2),
chmod(2),
chown(2),
setuid(2),
setgid(2)