FreeBSD ACLs

Категория: / DEV Блог / Сервер (FreeBSD)
Ситуация такая: есть папка /www (web:www 751)

Необходимо предоставить фтп доступ к папке еще несокльким пользователям из группы seo_users
Включаем аклы, собираем профтпд с поддержкой аклов.

Собственно устанавливаем сами аклы на файлы:
cd /www
    find . -type f -exec setfacl -m g:seo_users:rw-,mask::rwx {} \;
    find . -type d -exec setfacl -d -m u::rwx,g::rwx,o::---,mask::rw-,g:seo_users:rwx {} \;
    find . -type d -exec setfacl -m g:seo_users:rw- {} \;


А вопрос вот в чем:

Когда права для группы стоят rw, то аклы работают, если убрать -w то effective mask становится запрещающей
и доступа у пользователя к файлу уже нет.

Возможно ли как то отключить привязку права группы <--> маска? Почему chmod группы меняет права доступов acl?

UPD: Набросал небольшой скриптик, который помог временно решить проблему

#!/usr/local/bin/bash
 
Line=("site1.ru" "site2.ru" "site3.ru" "siteN.ru")
Files=(".htaccess" "robots.txt" "xsl" "css")
 
for domain in "${Line[@]}"
do
   #echo $Line[$i]
   current="/path_to_www/"$domain
   echo $current
 
  #stat $current
  chmod 2750 $current
 
  setfacl -m g:seo_users:r-x $current
 
  current=$current"/htdocs/"
  setfacl -m g:seo_users:r-x $current
 
  for file in "${Files[@]}"
  do
        test=${current}${file}
          if [ -d $test ]; then
                echo "DIR - "$test
            chown -R webadmin:seo_users $test
                chmod -R 770 $test
            find $test -type d -exec setfacl -d -m u::rwx,g::rwx,o::---,u:www:r-x {} \;
            find $test -type d -exec setfacl -m u::rwx,g::rwx,o::---,u:www:r-x {} \;
            find $test -type f -exec chmod 660 {} \;
            find $test -type f -exec setfacl -m u:www:r-- {} \;
          else
                if [ -f $test ]; then
                  echo "FILE - "$test
                  chown webadmin:seo_users $test
                  chmod 660 $test
                  setfacl -m u:www:r-- $test
            else
                  echo "NOT FOUND - "$test
                fi
          fi
  done
done


UPD

Таким образом списки доступа (acls) влияют на права доступа к файлам.
Реальный пример:

[root@ /htdocs/css]# getfacl -d ./
#file:./
#owner:1010
#group:1050
user::rwx
user:www:r-x
group::rwx
mask::rwx
other::---
[root@ /htdocs/css]# ls -la
drwxrwx---+  2 webadmin  seo_users    512 Oct 21 17:22 ./
-rw-rw----+  1 webadmin  seo_users    786 Oct 24 11:34 default.css
-rw-rw----+  1 webadmin  seo_users  17903 Nov 10 13:52 master.css
[root@ /htdocs/css]# getfacl -d ./
#file:./
#owner:1010
#group:1050
user::rwx
user:www:r-x
group::rwx
mask::rwx
other::---
[root@ /htdocs/css]# getfacl ./master.css
#file:./master.css
#owner:1010
#group:1050
user::rw-
user:www:r-x            # effective: r--
group::rwx              # effective: rw-
mask::rw-
other::---


Здесь мы видим, что для папки css установлены системные права 770 (владелец:группа - webadmin:seo_users),
drwxrwx---+ - плюсик обозначает, что для объекта назначены ACLs.
Таким образом, пользователь, под которым выполняется апач (www) не имеет права доступа/чтения к папке css (с учетом того, что его нет в группе seo_users).
В нашем случае, использвание acl (user:www:r-x) указывает, что пользователь www может читать файлы из папки.

Поэтому стоит быть осторожным при использовании списков доступа - реальные права на файлы не видны при испльзовании команды ls, stat и подобных.