用户 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
权限(您已尝试使用组的xr
和r
)。所以,我怀疑你的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:权限被拒绝
adb remount 权限被拒绝,但能够在 shell 中访问超级用户 -- android