“su _www helloworld.php”什么都不做
在更大的努力的背景下,我遇到了令我困惑的特定问题.
在Mac OS X 10.6.7上,使用Apache和PHP提供的系统,我创建了一个简单的HelloWorld.php脚本,毫不奇怪,只需打印Hello,World!没有别的. 如果我执行它作为PHP helloworld.php工作正常. 但是,如果我: sudo su su _www php helloworld.php 它什么都不发; php几乎立即返回,没有任何执行迹象. 我在哪里脱轨(更重要的是,我应该收集哪些诊断信息来帮助推断问题)? 没有骰子. bash-3.2$ls -alF foo.php -rw-r--r-- 1 _www _www 37 Apr 4 21:08 foo.php bash-3.2$ls -dalF . drwxr-xr-x 56 _www _www 1904 Apr 4 21:08 ./ bash-3.2$whoami bbum bash-3.2$php foo.php Hello,World! bash-3.2$sudo sh sh-3.2# php foo.php Hello,World! sh-3.2# su _www php foo.php sh-3.2# 如果我将foo.php复制到我的Web服务器的文档根目录,它就可以了.就像我在用户的docroot中一样;无论位置如何,它都可以通过网络服务器执行. 甚至su _www php -v也没有发现任何东西.这里有点腥. DERP. _www用户刚被破坏;没有壳.从shell尝试时,即使是最简单的命令也会搞砸.
这与我的问题
“Run cgi-script on commandline as user www?”(FreeBSD)非常相似.
问题在于:用户’_www’的shell设置为/usr/bin/false.根据联机帮助页“虚假实用程序始终以非零退出代码退出.” su _www将永远失败,按设计. 这是出于安全原因.如果有人能够成功运行针对_www(用于运行您的Web应用程序的帐户)的远程攻击,那么他们将遇到一个立即退出的shell.如果这个shell留下类似于/ bin / sh的东西,那么_www用户就可以在命令行上运行许多命令,这对安全性来说是不利的.因此,它设置为/usr/bin/false以限制因您的网络服务器遭受任何妥协而造成的损害.禁用它是不明智的. 但是,将_www shell设置为/usr/bin/false也意味着用户’_www’无法在命令行上执行命令.即使像whoami这样简单的命令也会失败: # su _www whoami # echo $? 1 解决方案是使用sudo,而不是su.这个简单的例子表明我现在可以执行简单命令,如用户’_www’: # sudo -u _www id uid=70(_www) gid=70(_www) groups=70(_www) 您还需要确保用户_www能够读取该文件.但是,如果您能够使用Apache Web服务器执行此文件,则权限已经正确. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |