如何使用PHP检查脚本是否使用sudo访问运行?
答案 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 Overflow和php_sapi_name()
函数。
另一个注意事项:我很确定以root身份运行PHP脚本并不是最好的想法。您可能想再次考虑脚本真正需要的权限。
答案 1 :(得分:3)
如果它纯粹是关于确定是否使用sudo
,sudo
会在命令的环境中放置一些值:
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命令。在使用这些命令之前,请确保定位正确的文件夹和文件名。