2012-07-20 11 views
6

In "Programming Perl" -w operatore di file-test descritto come:Perché l'operatore di test dei file non funziona (Perl)?

File -w è scrivibile da UID efficace/GID.

ho due file:

-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 sorge su script.pl, così quando l'eseguo come Caligola utente, UID effettivo/GID dovrebbe essere uno del testuser. script.pl è:

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

Ma quando l'eseguo [email protected]:~$ ./script.pl l'uscita è sempre false. Perché succede, forse non ho capito l'uso corretto di quell'operatore?

Il mio apprezzamento.

+1

FYI: Perl 5.16.0 è ora disponibile, anche se potrebbe trattarsi di notizie vecchie per tutti, tranne me, dato che le date più recenti nella tar ball sono 2012-05-20 quindi è stato confezionato in quel momento. –

risposta

11

Perl può essere configurato in modo che gli script SUID siano ignorati; è il valore predefinito e probabilmente il modo in cui è impostato il tuo. Dovresti stampare l'UID e il GID reali ed efficaci nello script.

È possibile convalidare questo concretamente con una modesta oscura Perl one-liner:

$ 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 = 
$ 

Oppure, un po 'meno oscuro ora ho trovato il nome giusto:

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

Questo dimostra che questo Perl (un 5.12.1 che ho creato) non considera sicuri gli script SUID.

I valori utente e l'ID del gruppo reali ed efficaci sono oggetto di informativa con: RUID $<, EUID $>, RGID $( e EGID $), o (più sensibilmente) utilizzando l'inglese:

#!/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

Problemi correlati