我正在尝试使用命令--ststus检查linux中的服务。但是我收到此错误:
在checkservices第3行使用-T开关运行时,$ ENV {PATH}不安全。
在这行我有这个:
My @services =
`status`;
这里有什么问题?
#!/user/bin/perl
Use strict;
My @services = `status`;
foreach my $service(@services){
If(! (service =~ /{running|UP} /)){
Print "up"; }
} `
答案 0 :(得分:3)
来自perlsec:
对于“不安全$ ENV {PATH}”消息,您需要将$ ENV {'PATH'}设置为已知值,并且路径中的每个目录必须是绝对的且不可由其他人写入,而不是其所有者和组。即使可执行文件的路径名完全合格,您也可能会惊讶地收到此消息。这不会生成,因为您没有提供程序的完整路径;相反,它是生成的,因为您从未设置PATH环境变量,或者您没有将其设置为安全的东西。因为Perl不能保证有问题的可执行文件本身不会转向并执行一些依赖于PATH的其他程序,所以它确保你设置了PATH。
当您传递系统并执行显式参数列表而不是带有可能的shell通配符的字符串时,Perl不会调用shell来扩展通配符。不幸的是,open,glob和backtick函数没有提供这样的替代调用约定,因此需要更多的伪装。