LAMP安全-www数据sudoer


LAMP security - www-data sudoer

我一直在寻找一种方法,让PHP运行一些命令行任务,包括一些sudo命令,即重新启动。我知道让www数据用户访问sudo是一种安全风险。大多数人说,写入一个文件,让cron每分钟提取一次并运行该命令。

但当我按下重新启动时,我希望它重新启动。

这是一款带有一些录音软件的树莓派,将通过网络接口进行控制(比如webmin,所有路由器?)。树莓派显然将位于本地网络上,可以在互联网上下载/上传信息,树莓派将有一个用户名和密码来访问网络界面。

这不就是你的路由器的工作方式吗?路由器的网络接口基本上有root访问权限,在大多数情况下,你可以设置一个bash脚本来运行,当然这和我试图用Raspberry Pi实现的一样不安全。

只要Raspberry Pi的网络接口是安全的,ssh登录被禁用(但只能通过启用的密钥登录),我就可以给www-data访问sudo命令的权限?

对吧?还是还会有问题?

您可以考虑运行另一个Web服务器进程,该进程只能从localhost获得,并以root身份运行PHP。然后,该服务器将具有仅用于您需要的操作(如重新启动)的脚本。面向用户的web服务器将使用cURL(或fopen)访问另一个服务器。

如果面向用户的服务器受到攻击,攻击者显然可以重新启动服务器,但无法访问您的完整文件系统。

这不就是你的路由器的工作方式吗?路由器的web接口基本上具有root访问权限,在大多数情况下,您可以设置bash脚本对于跑步来说,这肯定和我努力实现的目标一样不安全与树莓派。

这个逻辑的问题是你看到的是一个过程的最终结果&请记住,即使你在路由器上点击reboot,这个过程也不是即时的。仅凭这一点就可以让你知道那里正在发生更多的事情。

为了避免sudo被劫持的风险,您可以使用代理方法进行以下操作:

  1. 拥有一个每分钟运行一次的超级用户cronjob集
  2. 该cronjob将调用一个bash脚本
  3. bash脚本检查是否存在一个名为reboot.txt的文件,该文件可以位于/opt/reboot.txt

虽然有些人会对超级用户运行这样的cronjob感到犹豫,但我认为这是一个比赋予www-data sudo特权更好的选择。为什么?好吧,如果www-data拥有sudo权限,它可以做任何事情,包括清除您的系统。拥有一个受限制的cronjob,然后调用一个受约束的bash脚本,然后运行受约束的进程,可以为您提供更多的安全性。

实际上,您可以使用visudo,并且在您的战栗文件中,只需授予www数据权限,就可以只执行某些命令,如/bin/reboot/bin/poweroff。你可以在颤抖文件的末尾输入它,如下所示:

www-data ALL=(root) NOPASSWD:/sbin/poweroff
www-data ALL=(root) NOPASSWD:/sbin/reboot

然后在按钮的php代码中执行phpshell。添加/sbin/poweroff,或者创建另一个包含sudo命令和power-off指令的bash脚本。然后让shell exec命令执行这个新脚本。