PHP:检查是否正在使用sudo运行脚本,或者用户是否使用`php`

时间:2014-10-28 10:45:51

标签: permissions php

如何使用PHP检查脚本是否使用sudo访问运行?

3 个答案:

答案 0 :(得分:7)

注意:这个问题可能更适合Stack Overflow,尽管它指的是Unix上的PHP& Linux系统(权限提升,权限等)。

您可以使用PHP的POSIX函数:

这是一个小例子:

<?php
$userinfo = posix_getpwuid(posix_geteuid());
echo "This script is run with " . $userinfo["name"] . "'s privileges.";
?>

...测试

$ php myfile.php
This script is run with myuser's privileges.
$ sudo php myfile.php
This script is run with root's privileges.

顺便说一下,由于root总是UID为0,你可以检查posix_geteuid() == 0

现在,如果您现在想要用户是使用CLI(命令行)还是通过Web服务器,请查看this question on Stack Overflowphp_sapi_name()函数。

另一个注意事项:我很确定以root身份运行PHP脚本并不是最好的想法。您可能想再次考虑脚本真正需要的权限。

答案 1 :(得分:3)

如果它纯粹是关于确定是否使用sudosudo会在命令的环境中放置一些值:

SUDO_COMMAND=/usr/bin/commandname
SUDO_USER=wurtel
SUDO_UID=1000
SUDO_GID=1001

可以使用getenv()函数在php中检查这些。当然,将它与posix_geteuid()函数结合起来,以确保您确实拥有提升的权限,因为任何人都可以在环境中设置这些值。

答案 2 :(得分:0)

它必须只在PHP中吗?您可以将php目录chmod只能由root执行,这应该会为您实现相同的结果。

chmod 700 filename
chmod 700 foldername -R

<强> -R

-R表示递归,因此任何文件或子文件夹都将获得与父文件相同的权限。请谨慎使用。

为了进一步改善这一点,您可以创建一个“phpadmin”&#39;可以拥有这些文件的用户,除了root和phpadmin之外,没有其他用户可以执行它们。

useradd phpadmin
chown phpadmin:phpadmin foldername -R

警告

使用chmod&amp;时请务必小心chown命令。在使用这些命令之前,请确保定位正确的文件夹和文件名。