То, как я устанавливаю полномочия рекурсивно на dir (с ACL включило)?

Это может быть сделано путем сравнения номеров устройств.

В сценарии оболочки на Linux это может быть сделано со статистикой:

stat -c "%d" /path  # returns the decimal device number 

В Python:

os.lstat('/path...').st_dev

или

os.stat('/path...').st_dev

25
29.10.2013, 10:22
4 ответа

setfacl имеет рекурсивную опцию (-R) точно так же, как chmod:

  -R, --recursive
      Apply operations to all files and directories recursively. This
      option cannot be mixed with `--restore'.

это также допускает использование капитала-x X разрешение, что означает:

  execute only if the file is a directory or already has
  execute permission for some user (X)

так выполнение следующего должно работать:

setfacl -R -m u:colleague:rwX .

(все кавычки от man setfacl для acl-2.2.52, как поставлено с Debian)

40
27.01.2020, 19:40
  • 1
    setfacl не имеет '-R' флагом в FreeBSD 9 –  Aaron C. de Bruyn 20.08.2014, 09:50
  • 2
    затем, хорошо, что OP отметил их вопрос как [Linux] –  umläute 28.07.2015, 11:32
  • 3
    Пропущенный это. ;) –  Aaron C. de Bruyn 28.07.2015, 20:20
  • 4
    Это автоматически относится к новым файлам/папкам, созданным во впоследствии? –  Enigma 04.02.2018, 10:10
  • 5
    Проверьте страницу справочника на свою версию setfacl. Опция -X не работает как ожидалось во включенном в setfacl 2.2.49. –  phyatt 10.04.2018, 19:45

Как упоминалось umldute, команда setfacl -R с заглавным "X" - это путь, как:

setfacl -R -m u:colleague:rwX .

Однако, для тех, кому нужно повторно применить ACL рекрутно (т.е. как "повторно применить разрешения на подкаталоги" в ля Windows).

find . -mindepth 1 | xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')

Эта команда может быть разделена, чтобы избежать ошибки типа setfacl: foobar: Только каталоги могут иметь ACL по умолчанию.

find . -mindepth 1 -type d| xargs -n 50 setfacl -b --set-file=<(getfacl . | sed -e 's/x$/X/')
find . -mindepth 1 -type f| xargs -n 50 setfacl -b --set-file=<(getfacl . | grep -v '^default:' | sed -e 's/x$/X/')

Обратите внимание, что синтаксис <( что-то ) - это Замена процесса, которая специфична для bash. Вам может понадобиться создать временный файл, если вы используете другую оболочку.

6
27.01.2020, 19:40
for i in $(find /data -mindepth 0 -type d)
do setfacl -m  u:zabbix:r-x $i
    echo "ACL rules set for "$i
done
0
27.01.2020, 19:40

Всегда, если вы хотите дать рекурсивное разрешение только на чтение каталога, всегда используйте r-x.

Использовать данный CMD:setfacl -Rm u:user_name:permission /location/abc/xyz

Пример с объяснением:setfacl -Rm u:admin12:r-x /appl/work/load/

         Here `setfacl` : used to set permission.
               -Rm      : R for recursive and m for modify those old permission on given path. 
                u       : User which u want to add with given permission.
                admin12 : its an user, same user wants permission for a given location.
                
        /appl/work/load : Set a location where you want to give permission.


            
1
21.07.2020, 14:12

Теги

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