为什么文件测试操作符不起作用(Perl)?
发布时间:2020-12-15 21:43:46 所属栏目:大数据 来源:网络整理
导读:在“Programming Perl”中–w文件测试运算符描述为: –w File is writable by effective UID/GID. 我有两个文件: -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是在script.pl
在“Programming Perl”中–w文件测试运算符描述为:
我有两个文件: -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是在script.pl上设置的,所以当我以用户caligula运行它时,有效的UID / GID应该是testuser的一个. script.pl是: #!/usr/bin/perl use v5.14; if (-w 'file.txt') { say "true"; } else { say "false"; } 但是当我运行它时,caligula @ ubuntu-host:?$./script.pl输出始终为false.为什么会发生这种情况,可能是我不明白该操作符的正确用法? 我的赞赏. 解决方法
可以配置Perl以便忽略SUID脚本;这是默认设置,也可能是您的设置方式.您应该在脚本中打印真实有效的UID和GID.
你可以用一个谦虚模糊的Perl单线来具体验证这个: $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 = $ 或者,稍微不那么模糊,现在我找到了正确的名字: $perl -MConfig -e 'print "d_suidsafe = $Config{d_suidsafe}n"' d_suidsafe = $ 这表明这个Perl(我构建的5.12.1)并不认为SUID脚本是安全的. 真实有效的用户和组ID值可通过以下方式报告:RUID $<,EUID $> ;,RGID $(和EGID $),或者(更明智地)使用英语: #!/usr/bin/env perl use English '-no_match_vars'; print "EUID = $EUID; RUID = $UID; EGID = $EGID; RGID = $RGIDn"; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |