用户 ubuntu 的权限被拒绝,但 .csv 文件上的用户 www-data 却没有

Posted

技术标签:

【中文标题】用户 ubuntu 的权限被拒绝,但 .csv 文件上的用户 www-data 却没有【英文标题】:Permission denied with user ubuntu but not with user www-data on .csv file 【发布时间】:2016-12-03 13:02:36 【问题描述】:

我在尝试使用 php 访问时仅在单个 .csv 文件上看到奇怪的 Ubuntu 权限问题。该文件是 list.csv,归 ubuntu:www-data 所有,ubuntu 用户属于 www-data 组。该网站的其余部分工作正常,没有权限问题,但我在尝试使用 php 加载此文件时看到以下错误:

PHP Fatal error:  Uncaught exception 'RuntimeException' with message 'SplFileObject::__construct(xxx/list.csv): failed to open stream: Permission denied'

如果我 chown www-data:www-data list.csv,我可以用 php 加载。如果 ubuntu 拥有这个文件,为什么即使 ubuntu 是 www-data 组的一部分,php 也不会加载这个文件?

此外,我可以以 ubuntu 用户 (vi list.csv) 读写方式打开此文件。

编辑:文件的权限是:-rwxr-xr-x 1 ubuntu www-data

再次编辑:将权限更改为 0644 -rw-r--r-- 1 ubuntu www-data no lucky

编辑更多:文件位于具有 x 权限的目录中: drwxr-xr-x 3 ubuntu www-data 4096 Jul 28 23:09 内容/

不确定它与执行权限有什么关系,因为我可以将所有者更改为 www-data:www-data 并加载文件。这似乎与拥有该文件而不是 www-data 的用户 ubuntu 有关

编辑:这行代码出错了,试图将 .csv 文件加载到 php SplFileObject 中:

SplFileObject::__construct("xxx/content/list.csv");

【问题讨论】:

文件的完全权限是什么? 更新了我的问题 尝试将权限更改为644,在csv文件上不需要执行。 把权限改成664(即rw-r--r--)还能用吗? 文件是否可能位于没有 x 权限的文件夹中? 【参考方案1】:

您的服务器可能设置了 PHP open_basedir 参数集,这将阻止访问此目录之外的任何文件。

要验证这一点,请查看相关的 php.ini 文件(例如 /etc/php5/apache2/php.ini)并检查是否设置了 open_basedir 行。

【讨论】:

open_basedir 未设置:;open_basedir =【参考方案2】:

我可以在 OP 中看到所有者和组之间的唯一区别是write 权限(您已尝试使用组的xrr)。所以,我怀疑你的PHP 正在尝试以write 模式打开文件。

要确认这个尝试:

$myCSV = new SplFileInfo('YOUR CSV');
$myCSV->isReadable(); // should be true
$myCSV->isWritable();   //expecting this to be false

编辑:如果您的程序出现这种情况,您可以使用以下命令以读取模式打开文件:$myCSV->openFile('r')

【讨论】:

就是这样!向组添加写入权限解决了该问题。谢谢! 有此类问题的故障排除清单:***.com/questions/36577020/…

以上是关于用户 ubuntu 的权限被拒绝,但 .csv 文件上的用户 www-data 却没有的主要内容,如果未能解决你的问题,请参考以下文章

Spark.read.csv 错误:java.io.IOException:权限被拒绝

Ubuntu上的nginx权限被拒绝

从 CSV 导入时 PHPMYADMIN 权限被拒绝

adb remount 权限被拒绝,但能够在 shell 中访问超级用户 -- android

运行python app时,MySql Access被拒绝[Ubuntu 1604 / NGINX / uWSGI]

做Postfix ubuntu教程时权限被拒绝[关闭]