我编写了一个脚本,它“遍历”/var/www/xyz 并扫描文件夹等。这些文件夹都是“用户绑定”的,因此单个文件夹的权限设置为特定用户。
以 root 身份运行此脚本(例如在 /root 中,'php myscript.php')会返回预期结果。
现在我想将结果传输到浏览器:在 /var/www/newfolder 中我创建了一个文件index.php,只需将脚本粘贴到该文件中并尝试(在浏览器中),当然失败了。它只是向我显示了结果的一小部分(显示用户特定的文件夹名称,当没有深入时)。很确定这是一个许可的事情,作为 www 用户。
唷,所以问题是:是否有可能将带有函数的文件(例如)放入 /var 中,并允许浏览器中的 www 用户仅调用该函数?如果是,有什么有用的链接或提示吗? (我用谷歌搜索了很长时间,但我发现的东西毫无价值)
或者
调用我的 /var/www/newfolder/ 中的函数,该函数有足够的权限来扫描用户文件夹吗? (我想这对于安全至关重要)
答案1
您对安全的担忧是正确的。您可以使用 setuid 位创建一个可执行文件,该可执行文件以可执行文件的所有者(而不是调用该可执行文件的用户)身份运行。如果可执行文件由 root 拥有,那么它将以 root 身份运行(确保不要向除 root 之外的任何人授予写入权限)。如果您想限制谁可以运行可执行文件,请使用组权限。
用于chmod o+s <path to script>
打开 setuid 位。 (chmod 4750 <path to script>
允许所有者组作为文件所有者读取和执行文件,但不允许其他用户访问。)。
不需要脚本以 root 身份运行的方法是设置要扫描的文件夹的组所有者和权限,以便 www 用户可以读取该文件夹的内容。在文件夹上使用 setgid 位将导致在这些文件夹中创建的所有文件和文件夹继承组所有权。
用于chmod g+s <path to folder>
打开 setgid 位。要将/var/www/
文件夹(和子文件夹)设置为分组www-user
并允许该组中的用户访问所有文件夹,请使用(以 root 身份):
chgrp -R www-user /var/www/
chmod -R g+srX /var/www/