“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服务器执行此文件,则权限已经正确.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...