Linux创建新用户并允许访问特定进程和特定工作目录

问题描述 投票:0回答:1

我正在尝试制作一个 Web C++ 编译器。现在我陷入了我网站的安全问题。我可以运行系统(“whoami”);以及来自我网站的其他恶意命令在服务器上运行。我正在寻找一种方法来避免这种情况。

  1. 网站将用户编写的代码发送到PHP后端服务器
  2. PHP 服务器创建 main.cpp 文件并写入代码。
  3. PHP运行shell_exec将main.cpp编译成.exe:

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. 用户在网站上注册
  2. PHP 在系统 (linux) 中创建 coder-1 (coder-id) 用户
  3. PHP 创建 /var/www/site/builds/1 目录。
  4. 需要允许 coder-1 用户只能访问 /builds/1 目录和 g++ 进程来编译将保存到该目录中的代码。
linux permissions chmod chroot
1个回答
0
投票

这是我的建议

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++

  1. 为 gcc_compile 添加权限

    chown root:gcc_compile /usr/bin/g++

  2. 添加路径权限

    chown php:gcc_compile /var/www/site/builds/1

  3. 将 PHP 用户添加到 gcc_compile 组中。

我希望这有效。

© www.soinside.com 2019 - 2024. All rights reserved.