好吧,事情是这样的……尽管安全设置正确(至少我认为如此),但我还是无法访问某个文件夹。我遗漏了什么?
一些细节:
使用 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/owncloud
并sudo 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
/media
有drwxr-xr-x root root
/media/pi
有drwxr-x---+ root root
/media/pi/_ext.vol
有drwxrwxrwx root root
为了获得访问权限,我允许“世界”(在本例中适用于 www-data“用户”)r-x
也拥有“pi”文件夹的访问权限:chmod a+rx /media/pi
有了/media/pi
,drwxr-xr-x+ root root
我现在可以遍历整个路径 www-data(使用命令检查路径的每个部分sudo -u www-data ls -lisa /media/pi/_ext.vol/owncloud
)。
(请注意,从“_ext.vol”到“owncloud”文件夹,所有权不同/已经改变,只是为了清楚起见)
非常感谢 Alex 和 techraf 的见解!