文件夹安全,无法访问..权限被拒绝,是吗?

文件夹安全,无法访问..权限被拒绝,是吗?

好吧,事情是这样的……尽管安全设置正确(至少我认为如此),但我还是无法访问某个文件夹。我遗漏了什么?

一些细节:

使用 Raspbian,即 Debian Linux v8

文件夹安全性是:drwxrwx--- 3 www-data www-data 4096 Feb 13 00:34 owncloud

(我使用sudo chown -R www-data:www-data /media/pi/_ext.vol/owncloudsudo chmod -R 770 /media/pi/_ext.vol/owncloud设置了这个 owncloud 文件夹的所有权和权限(使用 ext4 文件系统))

我使用以下代码检查访问权限:sudo -u www-data ls -lisa /media/pi/_ext.vol/owncloud但是..没有访问权限。为什么???我就是想不通:(

任何帮助都将非常感激!

答案1

检查父目录的权限。要访问下级目录,www-data 需要在每个父级上至少有 +x。

作为演示:

alex@al-core:/tmp$ sudo mkdir -p testdir/foo
alex@al-core:/tmp$ sudo chown -R www-data:www-data ./testdir
alex@al-core:/tmp$ sudo ls -lah ./testdir
total 48K
drwxrwx---  3 www-data www-data 4.0K Feb 13 13:53 .
drwxrwxrwt 17 root     root      36K Feb 13 13:56 ..
drwxrwx---  2 www-data www-data 4.0K Feb 13 13:53 foo
alex@al-core:/tmp$ sudo ls -lah ./testdir/foo
total 8.0K
drwxrwx--- 2 www-data www-data 4.0K Feb 13 13:53 .
drwxrwx--- 3 www-data www-data 4.0K Feb 13 13:53 ..
alex@al-core:/tmp$ sudo chown root:root ./testdir
alex@al-core:/tmp$ sudo ls -lah testdir/foo
total 8.0K
drwxrwx--- 2 www-data www-data 4.0K Feb 13 13:53 .
drwxrwx--- 3 root     root     4.0K Feb 13 13:53 ..
alex@al-core:/tmp$ sudo -u www-data ls -lah testdir/foo
ls: cannot access testdir/foo: Permission denied

编辑以添加修复演示:

alex@al-core:/tmp$ sudo -u www-data ls -lah testdir/foo
ls: cannot access testdir/foo: Permission denied
alex@al-core:/tmp$ sudo chmod a+x ./testdir/
alex@al-core:/tmp$ sudo -u www-data ls -lah testdir/foo
total 8.0K
drwxrwx--- 2 www-data www-data 4.0K Feb 13 13:53 .
drwxrwx--x 3 root     root     4.0K Feb 13 13:53 ..
alex@al-core:/tmp$ 

但是,由于我们在此讨论的目录是操作系统安装的系统目录,因此您可能不应该更改它们。

考虑将 owncloud 目录安装到 /usr/local/、/var/local 或 /opt 下用于用户软件的其他路径。

编辑2:

由于我们在这里处理的是 USB 棒,因此保留自动挂载是有益的。将父目录更改为新组(例如“usbstick”)应该是安全的。

所以我会这样做:

chmod a+x /media /media/pi  # may already be like this
groupadd usbstick
chown root:usbstick  /media/pi/_ext.vol
usermod -a -G usbstick www-data

不过,如果您拔掉 USB 驱动器,则可能无法保留这些信息,我不确定 Raspbian 是如何设置的。不过,一般来说,如果可以避免,我建议不要将要由 Web 用户运行的软件存储在 USB 驱动器上!

答案2

哦耶!现在可以使用了。我会总结一下,以便其他用户可以受益:

即使在符号链接时,仍然必须尊重到达那里需要遍历的实际路径,因此当尝试到达(作为“用户”www 数据)时..

/media/pi/_ext.vol/owncloud其:drwxrwx--- www-data www-data

/mediadrwxr-xr-x root root
/media/pidrwxr-x---+ root root
/media/pi/_ext.voldrwxrwxrwx root root

为了获得访问权限,我允许“世界”(在本例中适用于 www-data“用户”)r-x也拥有“pi”文件夹的访问权限:chmod a+rx /media/pi

有了/media/pidrwxr-xr-x+ root root我现在可以遍历整个路径 www-data(使用命令检查路径的每个部分sudo -u www-data ls -lisa /media/pi/_ext.vol/owncloud)。

(请注意,从“_ext.vol”到“owncloud”文件夹,所有权不同/已经改变,只是为了清楚起见)

非常感谢 Alex 和 techraf 的见解!

相关内容