NOMBRE¶
chmod, fchmod - cambia los permisos de un fichero
SINOPSIS¶
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *path, mode_t mode);
int fchmod(int fildes, mode_t mode);
DESCRIPCIÓN¶
Cambia el modo del fichero dado mediante
path o referido por
fildes
Los modos se especifican mediante un O lógico de los siguientes valores:
- S_ISUID
- 04000 asignar ID de usuario al ejecutar
- S_ISGID
- 02000 asignar ID de group al ejecutar
- S_ISVTX
- 01000 bit pegajoso (sticky bit)
- S_IRUSR (S_IREAD)
- 00400 lectura para el propietario
- S_IWUSR (S_IWRITE)
- 00200 escritura para el propietario
- S_IXUSR (S_IEXEC)
- 00100 ejecución/busqueda para el propietario
- S_IRGRP
- 00040 lectura para el grupo
- S_IWGRP
- 00020 escritura para el grupo
- S_IXGRP
- 00010 ejecución/busqueda para el grupo
- S_IROTH
- 00004 lectura para otros
- S_IWOTH
- 00002 escritura para otros
- S_IXOTH
- 00001 ejecución/busqueda para otros
El UID efectivo del proceso debe ser cero o debe coincidir con el propietario
del fichero.
Si el UID efectivo del proceso no es cero y el grupo del fichero no coincide con
el ID de grupo efectivo del proceso o con uno de sus IDs de grupo
sumplementarios, el bit S_ISGID se desactivará, aunque esto no
provocará que se devuelva un error.
Dependiendo del sistema de ficheros, los bits
S_ISUID y
S_ISGID
podrían desactivarse si el fichero es escrito. En algunos sistemas de
ficheros, solo el superusuario puede asignar el bit pegajoso, lo cual puede
tener un significado especial. Para el bit pegajoso, y para los bits SUID y
SGID sobre directorios, véase
stat(2).
En sistemas de ficheros NFS, la restricción de permisos influirá
inmediatamente en los ficheros ya abiertos, ya que el control de acceso se
hacen en el servidor, pero los ficheros abiertos son mantenidos por el
cliente. La ampliación de permisos puede verse retrasada para otros
clientes si en ellos está habilitada la ocultación (caching) de
atributos.
VALOR DEVUELTO¶
En caso de éxito, devuelve 0. En caso de error, -1 y se asigna a la
variable
errno un valor adecuado.
ERRORES¶
Dependiendo del sistema de ficheros, se pueden devolver otros errores. Los
más generales para
chmod están listados a continuación:
- EPERM
- El UID efectivo no coincide con el propietario del fichero,
o no es cero.
- EROFS
- El fichero nombrado reside en un sistema de ficheros de
sólo lectura.
- EFAULT
- path apunta fuera del espacio de direcciones
accesible.
- ENAMETOOLONG
- path es demasiado largo.
- ENOENT
- El fichero no existe.
- ENOMEM
- No hubo suficiente memoria en el núcleo.
- ENOTDIR
- Un componente del camino path no es un
directorio.
- EACCES
- Se ha denegado el permiso de búsqueda para uno de los
componentes del camino.
- ELOOP
- Se han encontrado demasiados enlaces simbólicos al
resolver path.
- EIO
- Ha ocurrido un error de E/S.
Los errores comunes para
fchmod son:
- EBADF
- El descriptor de fichero fildes no es
válido.
- EROFS
- Lea nota anterior.
- EPERM
- Lea nota anterior.
- EIO
- Lea nota anterior.
La llamada
chmod conforma con SVr4, SVID, POSIX, X/OPEN, 4.4BSD. SVr4
documenta además las condiciones de error EINTR, ENOLINK y EMULTIHOP,
pero no ENOMEM. POSIX.1 no documenta las condiciones de error EFAULT, ENOMEM,
ELOOP y EIO, ni las macros
S_IREAD,
S_IWRITE y
S_IEXEC.
La llamada
fchmod conforma con 4.4BSD y SVr4. SVr4 documenta además
las condiciones de error EINTR y ENOLINK. Si se define al menos una de la
variables
_POSIX_MAPPED_FILES o
_POSIX_SHARED_MEMORY_OBJECTS,
POSIX exige la función
fchmod y documenta las condiciones de error
adicionales ENOSYS y EINVAL, pero no documenta EIO.
VÉASE TAMBIÉN¶
open(2),
chown(2),
execve(2),
stat(2)