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

Permissions PHP:检查脚本是否正在使用sudo运行,或者用户是否没有使用`PHP`,permissions,php,Permissions,Php,如何检查脚本是否使用sudo access运行?注意:这个问题可能更适合于堆栈溢出,即使它涉及Unix和Linux系统上的PHP(权限提升、权限等) 您可以使用PHP的POSIX函数: 获取有效的用户ID 从UID获取用户信息 下面是一个小例子: <?php $userinfo = posix_getpwuid(posix_geteuid()); echo "This script runs with " . $userinfo["name"] . "'s privileges.";

如何检查脚本是否使用sudo access运行?

注意:这个问题可能更适合于堆栈溢出,即使它涉及Unix和Linux系统上的PHP(权限提升、权限等)

您可以使用PHP的POSIX函数:

  • 获取有效的用户ID
  • 从UID获取用户信息
下面是一个小例子:

<?php
$userinfo = posix_getpwuid(posix_geteuid());
echo "This script runs with " . $userinfo["name"] . "'s privileges.";
?>
顺便说一句,因为root总是uid0,所以您可以只检查
posix_geteuid()==0

现在,如果您想知道用户是在使用CLI(命令行)还是在浏览web服务器,请查看和了解该功能


另一个注意事项:我非常确定以root用户身份运行PHP脚本不是最好的主意。您可能需要重新考虑脚本真正需要的权限。

是否必须仅使用php?您可以将php目录chmod为只能由root用户执行,这将为您实现相同的结果

chmod 700 filename
chmod 700 foldername -R
-R

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

为了进一步改进这一点,您可以创建一个“phpadmin”用户,该用户可以拥有这些文件,因此除了root和phpadmin之外,没有其他用户可以执行它们

useradd phpadmin
chown phpadmin:phpadmin foldername -R
警告


使用chmod和chown命令时请非常小心。在使用这些命令之前,请确保目标文件夹和文件名正确。

如果纯粹是为了确定是否使用了
sudo
sudo
会在命令环境中放置一些值:

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

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

我认为以root身份运行php脚本没有固有的问题……它与perl或shell脚本一样危险。@sealcire我也不建议以root身份运行shell脚本。问题是,我非常确定PHP脚本从头到尾都不需要root权限,我喜欢相信最好不要授予多余的权限。这很公平。因此,我假设您的理念是不使用root帐户,只通过sudo执行操作?@sealcire无论您是以root身份运行脚本,还是通过
sudo
运行脚本,因为root不会更改任何内容,您仍然将EUID设置为0。这里有一个更明显的例子:如果您的脚本唯一不能做的就是“write at/path/a”,那么您不应该仅仅为此授予它完全根访问权限。相反,您应该尝试调整您的文件系统权限,并且在最后的手段中,设置更具体的
sudo
策略。是的,总是放那个警告…如果在回答中使用命令chmod和chown,我们应该使它自动。
SUDO_COMMAND=/usr/bin/commandname
SUDO_USER=wurtel
SUDO_UID=1000
SUDO_GID=1001