我有以下用于设置 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 -l
该joomla
文件夹并获取我的列表,当然,该列表显示了面具,正如用户@dessert所解释的那样(而我之前并不知道)。
但是,据我所知,当我find . -ls
在文件夹上使用它时,它仍然显示组对文件和目录的joomla
权限,即使它们尚未使用脚本以这种方式设置。daemon
rw-
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。