2012-07-20 14 views
6

"programación Perl" -w operador archivo test descrito como:¿Por qué el operador de prueba de archivos no funciona (Perl)? En

-w fichero puede ser escrito por UID efectivo/GID.

Tengo dos archivos:

-rwsrwxrwx 1 testuser testuser 226 Jul 20 20:31 script.pl 
-rw-rw-r-- 1 testuser testuser 34 Jul 14 17:24 file.txt 

suid se encuentra en script.pl, así que cuando lo ejecuto como Calígula usuario, identificador de usuario efectivo/GID debe ser uno de testuser. script.pl es:

#!/usr/bin/perl 
use v5.14; 
if (-w 'file.txt') { 
    say "true"; 
} 
else { 
    say "false"; 
} 

Pero cuando lo ejecuto [email protected]:~$ ./script.pl la salida es siempre false. ¿Por qué sucede eso, puede ser que no entendí el uso correcto de ese operador?

Mi aprecio.

+1

FYI: Perl 5.16.0 es ahora disponible, aunque eso puede ser una noticia vieja para todos menos para mí, ya que las fechas más recientes en el asfalto son 2012-05-20, por lo que se empaquetó entonces. –

Respuesta

11

Perl se puede configurar para que los scripts SUID se ignoren; es el valor predeterminado, y es probable que el tuyo esté configurado. Debería imprimir el UID y GID real y efectivo en el script.

Puede validar esta concretamente con una modesta oscura Perl de una sola línea:

$ perl -MConfig -e 'foreach $key (keys %Config) { print "$key = $Config{$key}\n"; }' | 
> grep -i -e 'se*t*[ug]id' 
d_dosuid = 
d_setresgid = define 
d_setresuid = define 
d_suidsafe = 
$ 

O, un poco menos oscuramente ahora que he encontrado el nombre correcto:

$ perl -MConfig -e 'print "d_suidsafe = $Config{d_suidsafe}\n"' 
d_suidsafe = 
$ 

Esto demuestra que este Perl (un 5.12.1 que construí) no considera los scripts SUID como seguros.

Los valores de usuario e ID de grupo reales y efectivos son reportable con: RUID $<, EUID $>, RGID $( y EGID $), o (más sensible) utilizando Inglés:

#!/usr/bin/env perl 
use English '-no_match_vars'; 
print "EUID = $EUID; RUID = $UID; EGID = $EGID; RGID = $RGID\n"; 
+4

'perl -V: '. * Se * t * [ug] id. *'' /// 'perl -V: d_suidsafe' – ikegami

Cuestiones relacionadas