为什么使用 ACL 时 ls 会显示组的错误权限?

为什么使用 ACL 时 ls 会显示组的错误权限?

我有以下用于设置 Joomla CMS 目录权限的脚本:

#!/bin/bash
if [ ! -d "$1" ]; then
  echo "Error: Folder does not exist or no folder given."
  echo ""
  exit 1
fi
# XAMPP uses daemon as default www-group for Apache.
WWWGROUP="daemon"
THEUSER=`who | awk '{print $1}'`
JOOMLADIR="$1"
chown -R $THEUSER:$WWWGROUP "$JOOMLADIR"
chmod g+s "$JOOMLADIR"
find "$JOOMLADIR" -type d -exec chmod 0755 {} \;
find "$JOOMLADIR" -type f -exec chmod 0644 {} \;

setfacl -b -k "$JOOMLADIR"
setfacl -Rm u:$THEUSER:rwX "$JOOMLADIR"
setfacl -Rm g:$WWWGROUP:rX "$JOOMLADIR"
setfacl -Rm d:u:$THEUSER:rwX "$JOOMLADIR"
setfacl -Rm d:g:$WWWGROUP:rX "$JOOMLADIR"

setfacl -m m::rwx "$JOOMLADIR"

# Some folders need to be writable by the web server.
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/components"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/language"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/manifests"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/modules"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/templates"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/components"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/images"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/language"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/libraries"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/media"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/modules"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/plugins"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/templates"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/cache"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/cache"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/administrator/logs"
setfacl -Rm g:$WWWGROUP:rwX "$JOOMLADIR/tmp"
# Some extra security for configuration.php:
setfacl -m g:$WWWGROUP:r "$JOOMLADIR/configuration.php"
setfacl -m o:0000 "$JOOMLADIR/configuration.php"

如果我随后使用该脚本来设置下面列出的文件夹的权限,为什么每一个文件夹是否获得daemon组的写入权限?至少,它是这么列出的,尽管该getfacl命令确实正确列出了权限。

totaal 172
drwxrwxr-x+ 11 myuser daemon  4096 okt  4 07:52 administrator
drwxrwxr-x+  2 myuser daemon  4096 okt  4 07:52 bin
drwxrwxr-x+  2 myuser daemon  4096 okt  4 07:52 cache
drwxrwxr-x+  2 myuser daemon  4096 okt  4 07:52 cli
drwxrwxr-x+ 19 myuser daemon  4096 okt  4 07:52 components
-rw-rw-r--+  1 myuser daemon  3005 okt  4 07:52 htaccess.txt
drwxrwxr-x+  5 myuser daemon  4096 okt  4 07:52 images
drwxrwxr-x+  2 myuser daemon  4096 okt  4 07:52 includes
-rw-rw-r--+  1 myuser daemon  1420 okt  4 07:52 index.php
drwxrwxr-x+ 14 myuser daemon  4096 okt  4 07:52 installation
drwxrwxr-x+  4 myuser daemon  4096 okt  4 07:52 language
drwxrwxr-x+  5 myuser daemon  4096 okt  4 07:52 layouts
drwxrwxr-x+ 12 myuser daemon  4096 okt  4 07:52 libraries
-rw-rw-r--+  1 myuser daemon 18092 okt  4 07:52 LICENSE.txt
drwxrwxr-x+ 27 myuser daemon  4096 okt  4 07:52 media
drwxrwxr-x+ 27 myuser daemon  4096 okt  4 07:52 modules
drwxrwxr-x+ 17 myuser daemon  4096 okt  4 07:52 plugins
-rw-rw-r--+  1 myuser daemon  4872 okt  4 07:52 README.txt
-rw-rw-r--+  1 myuser daemon   836 okt  4 07:52 robots.txt.dist
drwxrwxr-x+  5 myuser daemon  4096 okt  4 07:52 templates
drwxrwxr-x+  2 myuser daemon  4096 okt  4 07:52 tmp
-rw-rw-r--+  1 myuser daemon  1690 okt  4 07:52 web.config.txt

我实际上想要实现的是:

我正在尝试设置一个环境来开发 Joomla 扩展。

我正在使用 Eclipse IDE,我的工作区中有两个打开的项目:

  • 包含我的扩展的项目。
  • 包含 Joomla CMS 安装目录的项目。

我还使用 Phing 构建工具将文件从扩展复制到 Joomla CMS 安装目录以测试代码更改。

我还使用 XAMPP,它捆绑了 Apache Web 服务器(以用户身份daemon和组运行daemon)并提供文件服务/opt/lampp/htdocs

里面/opt/lampp/htdocs是 Joomla 的安装目录/opt/lampp/htdocs/joomla

问题是,当我从扩展中删除和复制文件和目录到 Joomla 安装目录时出现权限错误。

为什么我会收到权限错误?那是因为当我第一次通过 Joomla 网站安装我的 ZIP(扩展/组件)(稍后我希望能够通过将其直接从扩展项目复制到 Joomla 安装目录来立即查看代码更改)Web 服务器(Apache)将组件创建为所有者daemon和组daemon

但是,我想为自己的用户(myuser)授予读、写和执行权限,而不是,daemon因为我希望能够从administrator/components/com_mycomp和中删除旧的文件和目录components/com_mycomp(仅作为示例)。

我正在尝试遵循此处的 Joomla 文章,该文章尝试为扩展设置一个开发环境: https://docs.joomla.org/Extension_development_using_eclipse_and_phing

基本上,我只是下载 Joomla ZIP 文件,解压缩并将其复制到/opt/lampp/htdocs/joomla

然后我运行:

sudo securepermissions.sh /opt/lampp/htdocs/joomla

然后,它不会输出任何错误,除了不存在的 Joomla 配置文件,它会尝试为其设置权限(目前尝试重新安装,这就是为什么还没有configuration.php)。

因此,我运行ls -ljoomla文件夹并获取我的列表,当然,该列表显示了面具,正如用户@dessert所解释的那样(而我之前并不知道)。

但是,据我所知,当我find . -ls在文件夹上使用它时,它仍然显示组对文件和目录的joomla权限,即使它们尚未使用脚本以这种方式设置。daemonrw-rwx

答案1

如果存在 ACL,则在权限列末尾ls -l用 表示。此外,它+不显示组权限,而是显示掩码,请参见此示例:

$ getfacl file
user::rw-
user:user:---
group::---
group:group:---
mask::rwx
other::---

$ ls -l file
-rw-rwx---+ 1 user group 0 2010-01-01 00:00 file

来源:https://wiki.ubuntuusers.de/ACL/

此外,您的脚本可以大大简化,请参见这个馅饼,测试shellcheck.net

相关内容