我正在尝试制作一个 Web C++ 编译器。现在我陷入了我网站的安全问题。我可以运行系统(“whoami”);以及来自我网站的其他恶意命令在服务器上运行。我正在寻找一种方法来避免这种情况。
sudo g++ main.cpp -o compiled.exe
这是通过修改 sudoers 文件来实现的,添加:
www-data ALL=(ALL) NOPASSWD: ALL
是的,它只适用于 sudo 命令,因为 PHP 用户无法访问 g++?
如果我在没有 sudo 的情况下运行命令,我得到这个错误:
g++: 致命错误: 无法执行 'cc1plus': execvp: 没有那个文件或目录 编译终止。
我试着用
shell_exec("whoami");
检查它,然后 ir 返回给我 www-data。我如何允许 www-data 在没有 sudo 的情况下访问 g++ 进程?
不使用 sudo 命令就可以很好地解决这个问题。下一个问题,我可以用 C++ 编写代码来打印我服务器的所有目录/文件。我想我需要创建一个新用户并只允许访问该用户的特定主目录并只允许运行 g++?我读到它可以用 chroot 完成,但我对服务器和配置很陌生。
我在网上找到了如何允许特定用户仅访问 X 文件夹的信息,但没有找到如何也允许使用 g++ 的信息。在此先感谢您的帮助,抱歉我的英语不好 :)
想法:
这是我的建议
1.创建一个名为 gcc_compile 的新组(任意名称)
2.检查g++路径
which g++
输出:
/usr/bin/g++
3.检查权限:
ls -ld /usr/bin/g++
输出:
-rwxr-xr-x 4 root root 772704 Sep 30 2020 /usr/bin/g++
为 gcc_compile 添加权限
chown root:gcc_compile /usr/bin/g++
添加路径权限
chown php:gcc_compile /var/www/site/builds/1
将 PHP 用户添加到 gcc_compile 组中。
我希望这有效。