Setuid不能在Solaris上工作

我有一个Perl脚本标记为setuid,但是当我运行它,它说我没有权限这样做。 我正在运行Solaris 10.这在另一个系统上工作,但我不能告诉什么是不同的。 我究竟做错了什么?

$ ls -l total 16 -r-sr-x--- 1 root root 7354 Apr 19 2008 myscript $ ./myscript ./myscript: Permission denied. 

我得问….这个程序是由root用户拥有的。 运行该程序的用户显然不是root(没有#作为命令提示符),而是“root”组中的用户?

快速修复似乎是针对这个特定的情况:

  chmod o+rx myscript 

嗯这个问题的答案表明,在更现代的系统上,我只能设置程序,而不是shell脚本。 其他系统可能实际上是一个二进制,

虽然我怀疑mdpc的答案是正确的,并且您需要更改“其他”的权限,但是您可以使用一个方便的技术使脚本以其他用户身份运行。 你需要做的是创build一个非常简单的C程序,它需要argv [0],附加类似“.real”的东西,然后执行该string。 然后,将脚本从foo.pl移动到foo.pl.real,然后将编译的二进制文件移动到foo.pl并设置该二进制文件。 现在当你运行foo.pl时,你将会以你想要的用户身份运行foo.pl.real。

与任何setuid程序一样,您要确保不会导致安全问题。 你应该清理argv [0],以确保它是你认为你应该运行的程序,或者有一个人可能符合二进制文件,并获得他们不应该的权限。

mdpc的答案很可能是正确的,但是请注意,perl在运行setuid时运行方式不同。

除此之外,它会自动打开perl的污点模式,迫使你在使用之前清理你的input和参数。 PATH和其他可能被滥用的系统环境variables也非常挑剔。

请参阅perlsec(1)以获取更多细节(注意:在某些系统上,包括debian,perl文档可以在其他系统上使用,几乎可以肯定的包括Solaris 10,您将不得不运行“perldoc perlsec” man perlsec“)。

运行groups命令以列出您所属的组。 您必须是试图运行myscript的系统上根组的成员。

检查脚本所在的文件系统的安装选项。 有一个nosuid选项可以用来允许或禁止setuid或setgid执行。

mount | grep rchuck
/ home / rchuck在homedir.mydomain.com:/export/home4/03/rchuck remote / read / write / nosetuid / nodevices / intr / retrans = 10 / retry = 3 / xattr / dev = 59ca539 on Wed Jul 22 07: 2009年41:23