- 论坛徽章:
- 0
|
本帖最后由 xiyoulaoyuanjia 于 2012-07-28 02:20 编辑
现实中需要从服务中启动一个perl脚本,无奈脚本中需要root权限!所以阐释了以下小例子
1. 设置setuid 位 (注意shell 脚本与 perl 脚本在此处的区别! shell脚本的setuid位不起作用! 是由bash来读文件的)
sudo chown root lianxi.pl
sudo chmod +s lianxi.pl
2. lianxi.pl 代码如下- #!/usr/bin/perl
- `date -s "$SARGV[1] $SARGV[2]"`;
复制代码 结果:
nsecure $ENV{PATH} while running setuid at
3.- $ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:';
复制代码 4. ./lianxi.pl 2012-3-4- 1 #!/usr/bin/perl
- #####date -s "2007-08-03 14:15:00"
- $ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:';
- `date -s "$ARGV[0] $ARGV[1]"`;
复制代码 结果:
Insecure dependency in `` while running setuid at ....
5. ./lianxi.pl 2011-3-18 12:04:12- #!/usr/bin/perl
- #####date -s "2007-08-03 14:15:00"
- $ENV{'PATH'} = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:';
- my ($a,$b)=@SARGV;
- `date -s "$a $b"`;
复制代码 结果:
ok!
ps
1.在第二步之后我曾经想过用c写一个包裹函数 调用此perl 当然包裹文件需要设置为setuid的,也就是用有效用户为root的文件 exec 调用(或者system)此perl ,尝试之后是不可以的!
2.从这个步骤可见perl对setuid的使用是很谨慎的!。。
3.关于perl的setuid 其它 请参考 http://www.cs.cmu.edu/afs/cs/usr/rgs/mosaic/pl-suid.html
希望对大家有用~另外大家还有其它方法请指出 谢谢~~
|
|