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).