简而言之:授予 root(用户)访问 www-data 的权限是否安全?
更长的声明:很多人问过这个问题修改权限,POSIX ACL和其他网站umask至于向 /var/www/html 等授予权限的适当方法,但我的方法有点不同,而且我尝试过的所有方法似乎都无法解决问题。
/var/www/project/html <- 包含所有基于 Web 的文件 /var/www/project/log <- 包含所有基于项目的日志
我还为 root 用户设置了 crontab 来执行维护等操作。在这些维护脚本(大部分是 PHP,以便我可以使用我的常用函数库)中,我还将结果传输到日志文件夹,在当天的同一个日志文件下,一些脚本每天运行一次,其他脚本(可以)每分钟运行一次。
在启动我的应用程序(通过 Vagrant)时,我将其放置几分钟(以便我的 cron 作业可以发布到日志文件),然后我登录到该应用程序。我立即收到写入 days 日志文件的错误。经过检查,它确实归 root:root 所有 - 当然,cron 作业已经创建了它(如果它尚不存在)...
但!作为构建应用程序的安装脚本的一部分,我在最后执行以下操作:
chown -R www-data:www-data /var/www/project
chmod -R 775 /var/www/project
chmod g+s /var/www/project
...之后我的服务器重新启动(重新启动之前主机名也会改变)。
(请注意:我也尝试过使用尾随 / 进行上述操作)
我对最后一个命令(“g+s”)的理解是,在该文件夹下创建的任何新文件都将采用父文件夹的权限。但事实显然并非如此,因为 root 正在创建文件,其权限是 root:root。
执行我看到的各种“ls -l”(删除文件大小、时间戳等):
/var/www # ls -l
drwxrwsr-- www-data www-data project
/var/www # cd project
/var/www/project # ls -l
drwxrwsr-- www-data www-data html
drwxrwsr-- www-data www-data log
/var/www/project # cd log
/var/www/project/log # ls -l
-rw-r--r-- root root 170309.log
所以...我删除了该日志文件,然后重复 chown、chmod 和 chmod g+s 命令,以查看是否是重新启动或主机名更改让我感到困惑...果然,我的维护脚本再次创建了日志文件,并使用 root:root 权限。
如果我将文件留在那里并重复命令,我就会得到我想要的结果:
/var/www/project/log # ls -l
-rwxrwxr-- 2 www-data www-data 170309.log
但是,我不一定会在系统重启后选择应用这些命令,而且我确信第二天我会遇到同样的问题,因为日志文件会有所不同,而我的维护脚本会首先创建它。
据我所知,我有几个解决方案:
- 当创建日志文件的函数(通过 cron 作业或通过应用程序)时,我会检查它是否已经存在,如果不存在,则创建它,然后“chown www-data:www-data今日日志文件“然后“chmod 774”...也许是一种解决方法,而不是解决方案
- 将 root 添加到 www-data 组(有任何潜在的安全问题吗?有帮助吗?)
- 使用 POSIX ACL
我真正想要的是可靠的解决方案,而不是破解方法或变通方法。我知道我不是唯一这样做的人,但一定有更简单的方法!!!:O)
答案1
因此,长话短说,除非我想要弄乱 umask(理想情况下我永远不想这样做)并且将 root 添加到 www-data 组并不会真正影响任何安全问题,否则我还是选择使用 ACL。
总而言之,它非常轻松:14.04 及更高版本会自动使用 ACL 选项挂载分区,因此不需要在 fstab 中进行任何修改,然后只需安装 ACL 实用程序并设置该文件夹所需的权限(以及任何后续操作:facl 也使用 -R 选项)即可快速、简单,并且完全按照说明书上说的做。