Почему ls показывает неправильные разрешения для группы при использовании ACL?

У меня есть следующий скрипт для установки разрешений для каталога 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 для каталогов, хотя они не были установлены таким образом, используя скрипт, насколько я знаю.

1
задан 14 October 2017 в 12:01

3 ответа

Если 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.

1
ответ дан 22 May 2018 в 17:34
  • 1
    Вы правы в различии в поведении между режимами ls -l и find -ls. Но pastie включает whoami, который не работает в моей ситуации, потому что я использую sudo для выполнения скрипта. Хотя спасибо за упрощение скрипта. Только find -ls по-прежнему показывает права на запись в каталогах, которые не должны быть доступны для записи (хотя getfacl все еще показывает иное). – Wieger 14 October 2017 в 11:39
  • 2
    Кажется, есть только одна возможность: find -ls, а также stat показывать маску вместо разрешения групп при использовании ACL. Я нашел подтверждение этого здесь: stackoverflow.com/a/38786991/694400 Я также проверил разрешения для тестера, который я добавил в группу daemon. У него нет доступа на запись к каталогам и файлам, которые я не хочу иметь. Итак, скрипт работает. Если вы удалите часть об find -ls, игнорируя ACL, я приму ваш ответ (потому что find -ls, по крайней мере, в этом случае также отображает маску группы). – Wieger 14 October 2017 в 17:45
  • 3
    Я собираюсь принять ваш ответ сейчас для первой части: ваше объяснение жирным шрифтом верно. – Wieger 14 October 2017 в 17:50
  • 4
    @Wieger Done. Btw find "$JOOMLADIR" \( -type d -exec chmod 755 {} + \) -o \( -type f -exec chmod 644 {} + \) - это серебряная пуля, когда она называет find только один раз. – dessert 14 October 2017 в 17:51

Если 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.

1
ответ дан 18 July 2018 в 05:20

Если 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.

1
ответ дан 24 July 2018 в 18:18

Другие вопросы по тегам:

Похожие вопросы: