Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么文件测试操作符不起作用(Perl)?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_944_0@
在“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 $&gt ;,RGID $(和EGID $),或者(更明智地)使用英语:

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

大佬总结

以上是大佬教程为你收集整理的为什么文件测试操作符不起作用(Perl)?全部内容,希望文章能够帮你解决为什么文件测试操作符不起作用(Perl)?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。