如何检查脚本是否使用sudo访问运行?
注意:这个问题可能更适合于Stack Overflow,尽管它指的是Unix上的PHP;Linux系统(权限提升、权限等)。
您可以使用PHP的POSIX函数:
- posix_geteuid()以获取有效的用户ID
- posix_getpwuid()从UID中获取用户信息
这里有一个小例子:
<?php
$userinfo = posix_getpwuid(posix_geteuid());
echo "This script runs 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.
顺便说一句,由于根总是UID0,您可以只检查posix_geteuid() == 0
。
现在,如果您想知道用户是在使用CLI(命令行)还是在使用web服务器,请查看关于Stack Overflow和php_sapi_name()
函数的这个问题。
另一个注意事项:我确信以root身份运行PHP脚本不是最好的想法。您可能需要重新考虑您的脚本真正需要什么权限
如果纯粹是为了确定是否使用sudo
,sudo
会在命令的环境中放入多个值:
SUDO_COMMAND=/usr/bin/commandname
SUDO_USER=wurtel
SUDO_UID=1000
SUDO_GID=1001
这些可以在php中使用getenv()
函数进行检查。当然,将它与posix_geteuid()
函数结合起来可以确保您确实拥有提升的权限,因为任何人都可以在环境中设置这些值。
它必须只在php中吗?您可以通过chmod将php目录设置为只能由root执行,这应该会为您带来相同的结果。
chmod 700 filename
chmod 700 foldername -R
-R
-R
表示递归,因此任何文件或子文件夹都将获得与父文件夹相同的权限。小心使用。
为了进一步改进这一点,您可以创建一个"phpadmin"用户,该用户可以拥有这些文件,这样除了root和phpadmin之外,没有其他用户可以执行它们。
useradd phpadmin
chown phpadmin:phpadmin foldername -R
警告
使用chmod&chown命令。在使用这些命令之前,请确保目标文件夹和文件名正确。