“su _www helloworld.php”什么都不做

bbu*_*bum 4 php su mac-osx

在更大努力的背景下,我遇到了一个令我困惑的特定问题。

在 Mac OS X 10.6.7 上,使用系统提供的 Apache 和 PHP,我创建了一个简单的HelloWorld.php脚本,毫不奇怪,它只是打印Hello, World!,没有别的。

如果我将它作为php helloworld.php.

但是,如果我:

sudo su
su _www php helloworld.php
Run Code Online (Sandbox Code Playgroud)

它什么也不发出; 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# 
Run Code Online (Sandbox Code Playgroud)

如果我复制foo.php到我的 Web 服务器的文档根目录,它就可以工作。就像在我用户的 docroot 中所做的那样;无论位置如何,它都可以通过网络服务器执行。


甚至su _www php -v什么都吐不出来。这里有些鱼腥味。

德普。_www 用户刚刚被破解;没有壳。从 shell 尝试时,即使是最简单的命令也会出错。

Ste*_*ski 5

这与我的问题“以用户 www 身份在命令行上运行 cgi-script?”非常相似(FreeBSD)。

问题在于:用户“_www”的外壳设置为/usr/bin/false. 根据联机帮助页“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
Run Code Online (Sandbox Code Playgroud)

解决办法是太用了sudo,不行su。这个简单的例子表明我现在可以以用户“_www”的身份执行简单的命令:

# sudo -u _www id
uid=70(_www) gid=70(_www) groups=70(_www)
Run Code Online (Sandbox Code Playgroud)

您还需要确保用户 _www 能够读取该文件。但是,如果您能够使用 Apache 网络服务器执行此文件,则权限已经正确。