dav*_*veg 7 c linux permissions perl
这完全在RHEL6上
我试图通过将其包装在C二进制文件中然后设置二进制文件的setgid位来作为特定用户(perl脚本的所有者)运行perl脚本(参考:https://superuser.com/questions/440363/ can-i-make-a-script-always-execute-as-root).perl脚本使用各种perl模块.如果perl模块在试图运行C二进制文件的帐户的PERL5LIB中,并且未在C二进制文件上设置setgid-bit,则它运行正常.如果设置了setgid-bit,那么它会失败,因为使用的perl模块不在@INC中.
一些代码用于演示@INC如何随粘性位改变...
the.pl
#!/usr/bin/env perl
print "Size of INC: ".scalar(@INC)."\n";
exit;
Run Code Online (Sandbox Code Playgroud)
wrapper.c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
exit(execvp("/home/me/the.pl",(char **)argv));
}
Run Code Online (Sandbox Code Playgroud)
perl脚本权限是-rwxrwxr-x
当我将包装器的权限设置为-rwxr-xr-x时(注意未设置setgid位),然后从其他帐户运行二进制文件,我得到...
Size of INC = 87
Run Code Online (Sandbox Code Playgroud)
...这是我所期望的(PERL5LIB中有87个元素).
但是当我将包装器的权限设置为-rwxr-sr-x时(注意setgid位已设置),然后从其他帐户运行二进制文件,我得到...
Size of INC = 4
Run Code Online (Sandbox Code Playgroud)
即使我在perl脚本的所有者和运行包装器的帐户的.cshrc中加载了所有87个元素的PERL5LIB,我也会得到相同的结果.
我需要将二进制文件作为perl脚本的所有者运行,因为该帐户具有用户帐户所没有的priv.root用户不是任何一个玩家.
为什么我会丢失这些PERL5LIB元素?有没有办法解决这个问题?
提前致谢!
setuid perl脚本以污点模式运行,perlsec说:
当污点模式("
-T")生效时,"."目录被删除@INC,Perl忽略环境变量"PERL5LIB"和"PERLLIB".您仍然可以@INC使用"-I"命令行选项从程序外部进行调整,如中所述perlrun.这两个环境变量被忽略,因为它们被遮挡,运行程序的用户可能不知道它们被设置,而"-I"选项清晰可见,因此被允许.
如果无法@INC在程序内部进行调整(例如,使用use lib ...),则需要重写C程序以调用perl可执行文件而不是脚本名称,并在前面argv添加脚本名称和-I...要使用的任何适当参数.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |