У меня есть следующий скрипт для установки разрешений для каталога 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 веб-сервер (который работает как пользователь daemon и под группой daemon) и служит для файлов из /opt/lampp/htdocs.
Внутри /opt/lampp/htdocs находится каталог установки Joomla в /opt/lampp/htdocs/joomla.
Проблема в том, что при удалении и копировании файлов и каталогов из расширения в каталог установки Joomla я получаю ошибки разрешения.
Почему я получаю ошибки разрешения? Ну, это потому, что, когда я впервые каждый установил мой ZIP (расширение / компонент) через сайт Joomla (позже я хочу иметь возможность мгновенно видеть изменения кода, копируя его напрямую из проекта расширения в Joomla install ), веб-сервер (Apache) создает компонент как владелец daemon и group daemon.
Однако я хочу дать разрешения на чтение, запись и выполнение для моего собственного пользователя (myuser) вместо из daemon, потому что я хочу, чтобы удалить старый набор файлов и каталогов из administrator/components/com_mycomp и components/com_mycomp (просто пример).
Я пытаюсь следовать статье Joomla здесь который пытается и настраивает среду разработки для расширений: https://docs.joomla.org/Extension_development_using_eclipse_and_phing
В принципе, я просто загружаю ZIP-файл Joomla, разархивируем его и скопируем на /opt/lampp/htdocs/joomla.
Затем я запускаю:
sudo securepermissions.sh /opt/lampp/htdocs/joomla
Затем он не выводит никаких ошибок, кроме несуществующего файла конфигурации Joomla, который он пытается установить разрешения (
Итак, я запускаю ls -l внутри папки joomla и получаю мой список, который, конечно же, показывает маску, как user @dessert
Но все же, когда я использую find . -ls в папке joomla, он по-прежнему показывает разрешения для группы daemon как rw- для файлов и rwx для каталогов, хотя они не были установлены таким образом, используя скрипт, насколько я знаю.
Если 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.
Если 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.
Если 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.