CUESTIÓN
He hecho la práctica de la sesión,
la he repasado mil veces, pero resulta que cuando la
ejecuto me da el error:
<ENCINA>/home/gyermo$ cambia pepe
lchown:pepe: Not owner
SOLUCIÓN
Primero comprobamos si el fallo es de nuestro programa o es que el sistema
está configurado así. Para ello, usamos la orden del sistema operativo
que se usa para cambiar de grupo a un fichero: chgrp
<ENCINA>/home/gyermo$ ls -l dirent.txt
-rw-r--r-- 1 gyermo profes 1688 feb 19 20:11 dirent.txt
<ENCINA>/home/gyermo$ chgrp 666 dirent.txt
chgrp: dirent.txt: Not owner
Todas las órdenes del sistema operativo, incluída chgrp
,
no son más que programas en C parecidos al programa cambia
,
pero escritos por los autores del sistema operativo. Vemos que
chgrp
produce el mismo error que nuestro programa, por lo
que nos tememos que el problema no es que el programa que hemos hecho
esté mal.
Localicemos lo que nos dice la página de manual de lchown
acerca de ese error:
<ENCINA>/home/gyermo$ man lchown
Reformatting page. Please Wait... done
System Calls chown(2)
NAME
chown, lchown, fchown - change owner and group of a file
SYNOPSIS
#include <unistd.h>
#include <sys/types.h>
int chown(const char *path, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);
int fchown(int fildes, uid_t owner, gid_t group);
DESCRIPTION
The chown() function sets the owner ID and group ID of the
file specified by path or referenced by the open file
[...]
ERRORS
The chown() and lchown() functions will fail if:
[...]
EPERM The effective user ID does not match the owner of the
file or the process is not the super-user and
_POSIX_CHOWN_RESTRICTED indicates that such privilege
is required.
O, traducido al román paladino:
Las funciones chown() y lchown() fallarán si:
(EPERM) La ID del usuario efectivo no coincide con el
propietario del fichero o el proceso no es (del)
superusuario y _POSIX_CHOWN_RESTRICTED indica que
se requiere tal privilegio.
Como el fichero al que intentamos cambiar el permiso sí es nuestro,
si se produce el error es porque está activa la opción del sistema
_POSIX_CHOWN_RESTRICTED y en efecto no somos el superusuario.
Este es un mecanismo de seguridad adicional que viene en UNIXes
nuevos. No se permite cambiar el grupo de un fichero a no ser que
se sea el superusuario.
© 2002 Guillermo González Talaván.