Provided by: manpages-es_1.55-10_all bug

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.

CONFORME A

       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)