NOMBRE¶
chown, fchown, lchown - cambian el propietario de un fichero
SINOPSIS¶
#include <sys/types.h>
#include <unistd.h>
int chown(const char *path, uid_t owner, gid_t
group);
int fchown(int fd, uid_t owner, gid_t
group);
int lchown(const char *path, uid_t owner, gid_t
group);
DESCRIPCIÓN¶
Cambia el propietario del fichero especificado por
path o
fd.
Solamente el superusuario puede cambiar el propietario de un fichero. El
propietario de un fichero puede cambiar el grupo de dicho fichero a cualquier
grupo al que dicho usuario pertenezca. El superusuario puede cambiar el grupo
arbitrariamente.
Si a
owner o
group se asigna -1, entonces dicho ID no se altera.
Cuando un no superusuario cambia el propietario o grupo de un fichero
ejecutable, se limpian los bits de modo S_ISUID y S_ISGID. POSIX no especifica
si esto también debe ocurrir cuando el superusuario realiza un
chown; el comportamiento de Linux depende de la versión del
núcleo. En el caso de un fichero no ejecutable para el grupo (con el
bit S_IXGRP limpio) el bit S_ISGID indica un bloqueo obligatorio y no se
limpia al ejecutar
chown.
VALOR DEVUELTO¶
En caso de éxito, devuelve 0. Si se encuentra algún error,
devuelve -1, y a
errno se le asigna un valor apropiado.
ERRORES¶
Dependiendo del sistema de ficheros, se pueden generar otros errores. Los
errores más generales para
chown son:
- EPERM
- El UID efectivo no coincide con el propietario del fichero, y no es cero;
o el propietario (owner) o grupo (group) han sido
especificados incorrectamente.
- EROFS
- El fichero en cuestión reside en un sistema de ficheros de
sólo lectura.
- EFAULT
- path apunta fuera de su espacio de direcciones accesible.
- ENAMETOOLONG
- path es demasiado largo.
- ENOENT
- El fichero no existe.
- ENOMEM
- No había suficiente memoria disponible en el núcleo.
- ENOTDIR
- Un componente del camino path no es un directorio.
- EACCES
- Permiso de busqueda denegado en un componente del camino (path).
- ELOOP
- Se encontraron demasiados enlaces simbólicos al resolver
path.
Los errores comunes para
fchown se listan a continuación:
- EBADF
- El descriptor no es válido.
- ENOENT
- Lea nota anterior.
- EPERM
- Lea nota anterior.
- EROFS
- Lea nota anterior.
- EIO
- Ocurrió un error de E/S de bajo nivel mientras se modificaba el
nodo-i.
OBSERVACIONES¶
En las versiones de Linux anteriores a la 2.1.81 (y distintas de la 2.1.46),
chown no seguía los enlaces simbólicos. Desde la
versión 2.1.81 de Linux
chown sigue los enlaces
simbólicos y existe una nueva llamada al sistema,
lchown, que no
sigue los enlaces simbólicos. Desde la versión 2.1.86 de Linux,
esta nueva llamada (que tiene la misma semántica que la antigua
chown) tiene el mismo número de llamada al sistema y
chown obtiene el número recién introducido.
El prototipo para
fchown sólo está disponible si se ha
definido
_BSD_SOURCE(bien
explícitamente,o
explícitamente,al
nodefinir
_POSIX_SOURCE o compilando con la opción -ansi).
La llamada
chown es conforme a SVr4, SVID, POSIX y X/OPEN. La
versión de esta llamada en 4.4BSD sólo puede ser usada por el
superusuario (es decir, los usuarios ordinarios no pueden dar ficheros a otros
usuarios). SVr4 documenta otras condiciones de error como EINVAL, EINTR,
ENOLINK y EMULTIHOP, pero no ENOMEM. POSIX.1 no documenta las codiciones de
error ENOMEM ni ELOOP.
La llamada
fchown es conforme a 4.4BSD y SVr4. SVr4 documenta
además las condiciones de error EINVAL, EIO, EINTR y ENOLINK.
RESTRICCIONES¶
La semántica de
chown() es violada deliberadamente en los sistemas
de ficheros NFS que han habilitado la asociación del UID.
Además, se viola la semántica de todas las llamadas al sistema
que acceden a los contenidos de los ficheros ya que
chown() pueden
producir la revocación de acceso inmediata sobre ficheros ya abiertos.
La ocultación (caching) en los clientes puede producir retrasos entre
el instante en que la propiedad ha sido cambiada para permitir el acceso de un
usuario y el instante en que el fichero puede realmente ser accedido por el
usuario en otros clientes.
VÉASE TAMBIÉN¶
chmod(2),
flock(2).