我可以创建文件,但无法读取该文件

我可以创建文件,但无法读取该文件

我使用linux已经有一段时间了,但我总是有root权限,所以权限问题没什么大不了的。但现在我没有 root 访问权限,这让我发疯。

我可以通过 ssh 访问 Web 服务器。这意味着我可以访问我的 user gabitoptalentro,也可以apache通过 PHP 反引号访问该用户。我的某些文件夹有问题tmp不是 /tmp)。ls -l说:

drwxrwxrwx  2 gabitoptalentro toptalentro   4096 Jun 15 19:15 tmp

当我尝试在该文件夹中创建touch文件 ( touch tmp/QQ) 时,它可以工作(文件已创建),它没有出现在ls -l.这是来自的条目我的 ssh 帐户:

-rw-r--r-- 1 apache apache   0 Jun 15 19:37 QQ

所以该文件实际上属于apache,但apache无法读取它。

我也尝试过将chown整个文件夹复制到apache,但它不让我(chown: changing ownership of ...: Operation not permitted)。 Wtf,它不允许我将自己的文件夹提供给其他人?

那么,您知道我如何摆脱困境并帮助apache读取它自己的文件吗?

答案1

服务器可能被设置为使用访问控制列表,这是普通 Unix 文件权限或基于 SELinux 的角色的扩展。

您可以像这样检查目录上的 ACL...

> getfacl /path/to/your/tmp

如果一切正常的话你应该得到这样的东西......

# file: tmp
# owner: apache
# group: apache
user::rw-
group::r--
other::r--

如果您看到类似以下的行...

user:someotheruser:---
group:someothergroup:---

...您正在处理 ACL 的文件/目录。您可能会猜到,这可以让您为特定用户和组设置权限。您可以使用命令更改这些(权限允许)setfacl。目录的 ACL 中还可能存在多种默认值,这些默认值会导致使用意外权限创建新文件。


如果这不适合您,您可能需要在 SELinux 中处理基于角色的安全性。运行命令getenforce。如果设置为强制 Apache 将只能读取 HTTP 上下文中的文件。

> /usr/sbin/getenforce
Enforcing

您需要chcon(更改上下文)您的 tmp 目录...

> chcon -R -t httpd_sys_content_t /path/to/your/tmp

这是一个很好的 SELinux 常见问题解答

希望有帮助!

答案2

新创建的文件的权限通过umask.但umask在这种情况下看起来还不错。

-rw-r--r-- 1 apache apache 0 Jun 15 19:37 QQ

标志2、3、4是所有者的权限,它们 rw-意味着apache可以读写这些文件。

当您尝试读写时,请确保您以 apache 身份登录。

相关内容