Список каталогов при использовании setfacl ACL

Вопрос или проблема

Я использую команду setfacl, чтобы предоставить права на чтение для файлов в директории, но я не могу использовать ls для просмотра файлов. Я пробовал

setfacl -Rdm g:grouptoadd:rx /path/directory/

но я могу читать файлы (когда использую прямой путь к файлу, например, “/path/directory/myfile”) и не могу перечислить содержимое директории (ls /path/directory/)

Вы устанавливаете дефолтные ACL с помощью флага -d, а не эффективные ACL. Дефолтные ACL – это механизм для установки ACL для файлов и директорий, которые создаются в директории, для которой вы устанавливаете дефолтные ACL. Удалите опцию -d, если вы хотите применить ACL к самой директории.

Если вы выполните getfacl, вы увидите записи “default”. Я предлагаю почитать больше о Linux ACL.

[lzap@x1 foreman-packaging-rpm]$ getfacl /tmp/test
# файл: tmp/test
# владелец: lzap
# группа: lzap
user::rwx
group::rwx
other::r-x

[lzap@x1 foreman-packaging-rpm]$ setfacl -dm u:lzap:rx /tmp/test

[lzap@x1 foreman-packaging-rpm]$ getfacl /tmp/test
# файл: tmp/test
# владелец: lzap
# группа: lzap
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:lzap:r-x
default:group::rwx
default:mask::rwx
default:other::r-x

[lzap@x1 foreman-packaging-rpm]$ setfacl -m u:lzap:rx /tmp/test

[lzap@x1 foreman-packaging-rpm]$ getfacl /tmp/test
# файл: tmp/test
# владелец: lzap
# группа: lzap
user::rwx
user:lzap:r-x
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:lzap:r-x
default:group::rwx
default:mask::rwx
default:other::r-x

Чтобы увидеть дефолтные ACL в действии, просто создайте файл в директории с установленными дефолтными ACL. В моем случае touch /tmp/test/a_file и он унаследует ACL u:lzap:r-x.

Я верю, что “grouptoadd” не имеет прав на выполнение в директории path. Вы можете использовать ls /path/directory/ только если у вас есть права на выполнение во всех директориях, составляющих ваш путь.

Попробуйте $ getfacl /path и убедитесь, что у “grouptoadd” есть права на выполнение.

Если нет, вы можете просто добавить их: $ setfacl -m g:grouptoadd:x /path.

Кроме того, используйте команду setfacl без опции -d.

Как я тестировал, это работает, когда я не использую опцию d, что означает дефолтную.

setfacl -Rdm g:grouptoadd:rx /path/directory/

эта команда предоставляет новым файлам в директории разрешение rx.

setfacl -Rm g:grouptoadd:rx /path/directory/

эта команда предоставляет группе grouptoadd право перечислять и читать директорию.

Ответ или решение

Понимание уровня доступа с помощью ACL: Решение проблемы с командой setfacl

При работе с файловой системой Linux и управлении доступом к файлам и директориям, использование ACL (Access Control Lists) может быть необходимым для настройки специфичных прав доступа. В вашем случае возникла ситуация, когда вы используете команду setfacl для назначения прав чтения в директории, но при этом не можете просматривать содержимое папки с помощью ls. Давайте подробно разберем возможные причины данной проблемы и предложим решения.

Основные понятия о ACL

ACL обеспечивает более тонкую настройку прав доступа к файлам и директориям по сравнению с традиционной системой прав владельца, группы и других пользователей. Используя команды setfacl и getfacl, вы можете задавать и просматривать права доступа.

Разделение на эффективные и стандартные ACL

Когда вы используете параметр -d в команде setfacl, вы на самом деле устанавливаете дефолтные ACL. Это означает, что они будут применяться только к новым файлам и директориям, созданным внутри заданной директории, а не непосредственно к самой директории. Поскольку вы не можете листать содержимое директории, давайте посмотрим, что необходимо сделать:

  1. Убедитесь, что у группы есть разрешение на выполнение: Чтобы просматривать содержимое директории, группе, к которой вы хотите предоставить доступ, необходимо иметь право на выполнение (execute) для самой директории. Это позволяет пользователям заходить внутрь директории и перечислять её содержимое. Выполните команду:

    getfacl /path/directory/

    Проверьте, что группа grouptoadd имеет право r-x на вашу директорию.

  2. Установка эффективных ACL: Исправьте вашу команду, убрав параметр -d, чтобы установить эффективные права доступа:

    setfacl -R -m g:grouptoadd:rx /path/directory/

    Эта команда предоставит группе grouptoadd права на чтение и выполнение для существующей директории и её содержимого.

  3. Проверка прав доступа на родительские директории: Правило для Linux заключается в том, что права на выполнение должны быть установлены для всех родительских директорий, чтобы получить доступ к содержимому. Если вы не можете просмотреть директорию /path/directory/, проверьте иерархию:

    getfacl /path
    getfacl /path/directory/

    Убедитесь, что для всех необходимых директорий установлены соответствующие права.

Пример

Допустим, вы хотите дать доступ к директории /home/user/documents группе readers. Вы можете выполнить следующие команды:

  1. Установите права доступа к директории:

    setfacl -R -m g:readers:rx /home/user/documents
  2. Убедитесь, что все родительские директории также имеют нужные права:

    setfacl -m g:readers:x /home/user
    setfacl -m g:readers:x /home
  3. Проверьте установленные права:

    getfacl /home/user/documents

Заключение

Использование ACL значительно расширяет возможности управления доступом в Linux. Правильное назначение эффективных и стандартных ACL — ключ к обеспечению нужного уровня доступа. Обязательно проверьте права доступа на высшем уровне и корректируйте команды setfacl, чтобы ваши настройки работали должным образом. Подобное управление доступом обеспечивает безопасность данных и удобство для совместного пользования файлами.

Оцените материал
Добавить комментарий

Капча загружается...