[Flug] Comportamento strano sui permessi

Daniele Masini d.masini@tiscali.it
Mer 17 Feb 2010 11:56:01 CET


Mi succede una cosa che non capisco, ma che vorrei capire ;-)
Ho un programma (esempio) che crea un file sul filesystem. Tale
programma appartiene all'utente 500 (gruppo 500) e ha il bit setuid e
setgid impostati. Si trova in una directory /test_user il cui
proprietario è l'utente 501 (gruppo 501). La directory /test_user ha
impostati tutti i permessi (rwx) per tutti gli utenti.
In particolare sono due i casi di cui non capisco il funzionamento: caso
in cui sulla directory /test_user gli altri utenti non hanno il permesso
di scrittura e quello in cui sia gli altri che il gruppo proprietario
non hanno permessi di scrittura.
Di seguito riporto la sequenza di comandi per illustrare il
comportamento del sistema nei vari casi.


$ id -u
501

$ id -g
501

$ id -G
501

$ ls -lnd /test_user
drwxrwxrwx 2 501 501 4096 17 feb 09:42 /test_user/

$ pwd
/test_user

$ ls -ln
totale 20
-rwsrwsrwx 1 500 500 5434 17 feb 09:52 esempio
-rw-rw-r-- 1 500 500  288 17 feb 09:52 esempio.c


*** Di seguito il sorgente di esempio

#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
   printf ("effective uid = %d  effective gid = %d\n",
     (int) geteuid(), (int) getegid());
   printf ("real uid = %d  real gid = %d\n",
     (int) getuid(), (int) getgid());
   creat("file",0666);
}

*** Fine del sorgente di esempio


$ ./esempio
effective uid = 500  effective gid = 500
real uid = 501  real gid = 501

$ ls -ln
totale 20
-rwsrwsrwx 1 500 500 5434 17 feb 09:52 esempio
-rw-rw-r-- 1 500 500  288 17 feb 09:52 esempio.c
-rw-rw-r-- 1 500 500    0 17 feb 09:57 file

$ rm -f file

$ chmod o-w /test_user

$ ls -lnd /test_user
drwxrwxr-x 2 501 501 4096 17 feb 09:42 /test_user/

$ ./esempio
effective uid = 500  effective gid = 500
real uid = 501  real gid = 501

$ ls -ln
totale 20
-rwsrwsrwx 1 500 500 5434 17 feb 09:52 esempio
-rw-rw-r-- 1 500 500  288 17 feb 09:52 esempio.c
-rw-rw-r-- 1 500 500    0 17 feb 10:00 file

*** Togliendo il permesso di scrittura in test_user per gli altri
utenti, l'utente 500 non dovrebbe più avere il permesso di creare file
al suo interno. E invece può.

*** Cambio utente: 501 -> 500

$ id -u
500

$ id -g
500

$ id -G
500

$ rm -f file
rm: impossibile rimuovere `file': Permission denied

*** Correttamente il sistema non permette a 500 di eliminare il file in
test_user

*** Fine cambio utente

$ id -u
501

$ id -g
501

$ id -G
501

$ rm -f file

$ ls -ln
totale 20
-rwsrwsrwx 1 500 500 5434 17 feb 09:52 esempio
-rw-rw-r-- 1 500 500  288 17 feb 09:52 esempio.c

$ chmod g-w /test_user

$ ls -lnd /test_user
drwxr-xr-x 2 501 501 4096 17 feb 10:08 /test_user/

$ ./esempio
effective uid = 500  effective gid = 500
real uid = 501  real gid = 501

$ ls -ln
totale 20
-rwsrwsrwx 1 500 500 5434 17 feb 09:52 esempio
-rw-rw-r-- 1 500 500  288 17 feb 09:52 esempio.c

*** Togliendo al gruppo 501 i permessi di scrittura su /test_user,
esempio non è più in grado di creare il file. Perché?


Se qualcuno sa darmi una spiegazione lo ringrazio in anticipo.


Saluti,

Daniele

-- 
Registered GNU/Linux User # 335746
http://www.vandali.org/DanieleMasini
GPG key ID: 0x42721648
GPG key fingerprint: 444A 193A 28C2 2A99 1966 B2A5 4216 2453 4272 1648



Maggiori informazioni sulla lista flug