是否允许www-data在没有密码安全的情况下执行命令?

时间:2015-09-17 08:01:30

标签: php security terminal sudo

我需要知道在没有密码的情况下允许www-data执行sudo命令是否安全?

我用它从php脚本执行终端命令,但这不适合我们的实时制作服务器?

这是sudoers文件。

www-data ALL=(ALL) NOPASSWD:ALL

这是我尝试运行到外部远程服务器的命令示例。 我正在使用ssh2_exec来运行它。

sudo service apache2 status;sudo service mysql status;sudo service mongod status

如果没有,是否有更好的方法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

这实际上使您的Web服务器成为攻击站点的主要载体。如果有人可以找到上传任何类型代码的方法,或者将来shell_exec使用用户变量字符串,那么人们可以在您的网站上执行特权任意代码。

这不适用于可公开访问的服务器。

更好的方法是在系统上编写一个程序,该程序在crontab中运行,并将这些值打印到一个平面文件,然后用PHP打开该文件。

e.g

#!/bin/bash

service apache2 status
service mysql status
service mongod status

使用sudo crontab -e

将此添加到root用户cron
* * * * * /path/to/script > /home/my-user/file

您可能还需要使文件全局可读(在创建之后);它只是一个可能安全的状态:

sudo chmod 777 /home/my-user/file

然后在PHP中

<?php

$status = file_get_contents('/home/my-user/file');
echo $status;

答案 1 :(得分:1)

创建Cron作业可以解决您的情况下的问题。 但是,如果您不希望将其作为cron作业,又或者在执行脚本时必须传递动态位置参数怎么办?

因此,一种有效的解决方案是像以前一样将代码放入.sh文件中。

但不要这样做

www-data ALL=(ALL) NOPASSWD:ALL

执行此操作

www-data ALL=(ALL) NOPASSWD: /path/to/your/script.sh

这将确保www-data仅具有特定脚本的特权,而没有其他特权。可以在您的生产服务器上安全地使用它,因为未经root许可,www-data不能运行任何其他脚本。

我发现此答案对https://anto.online/code/how-to-run-php-script-root/

有帮助