Как установить права доступа по умолчанию для всех папок и файлов в директории?

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

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

Назовем группу “media”. Кроме того, файлы/папки, созданные в каталоге, должны автоматически иметь g+rw.

Я нашел это: Применение разрешений по умолчанию

Из статьи:

  1. Установите бит setgid, чтобы файлы/папки в <каталоге> создавались с той же группой, что и <каталог>

    chmod g+s <каталог>
    
  2. Настройте ACL по умолчанию для группы и других

    setfacl -d -m g::rwx /<каталог>
    setfacl -d -m o::rx /<каталог>
    

Далее мы можем проверить:

getfacl /<каталог>

Вывод:

# файл: ../<каталог>/
# владелец: <пользователь>
# группа: media
# флаги: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Это дополнение к ответу Кристи, основанное на моем опыте с моим Arch Linux.

Использование переключателя по умолчанию (-d) и переключателя изменения (-m) будет изменять только разрешения по умолчанию, но при этом оставит существующие неизменными:

setfacl -d -m g::rwx /<каталог>

Если вы хотите изменить всю структуру разрешений папки, включая существующие (вам нужно будет добавить дополнительную строку и сделать это рекурсивно с помощью -R):

setfacl -R -m g::rwx /<каталог>

Примеры:

# Предоставляет группе права на чтение, запись и выполнение для уже существующих файлов и
# папок, рекурсивно.
setfacl -R -m g::rwx /home/limited.users/directory 

# Отзывает права на чтение и запись для всех остальных в существующей папке и
# подкаталогах.
setfacl -R -m o::x /home/limited.users/directory  

# По умолчанию предоставляет группе права rwx, рекурсивно.
setfacl -R -d -m g::rwx /home/limited.users/directory

# Отзывает права на чтение, запись и выполнение для всех остальных. 
setfacl -R -d -m o::--- /home/limited.users/directory

(БЛАГОДАРНОСТИ markdwite в комментариях за синтаксис строки отзыва всех привилегий)

Добавьте себя/входящего пользователя в группу www-data, чтобы мы могли работать с файлами, созданными сервером www-data

sudo usermod -a -G www-data $USER

Нужно перезайти/выйти, чтобы новая группа вступила в силу

cd /var/www

Добавьте www-data как члена группы папки html, а вашего пользователя как владельца, чтобы мы владели ею как член группы

sudo chown -R $USER:www-data html

Подставьте ваше имя пользователя вместо USER

Настройте разрешения на чтение, запись, выполнение по мере необходимости (ugo) u=пользователь, g=группа, o=другие

sudo chmod 750 html

Установите GID для html, теперь вновь созданные файлы в html будут наследовать разрешения на владение:

sudo chmod g+s html

Это создает правила по умолчанию для вновь созданных файлов/каталогов в каталоге html и подкаталогах.

sudo setfacl -R -d -m u::rwX -m g::rX -m o::000 html

Заставьте SELinux, если он установлен, игнорировать требования контекста www-data, чтобы разрешить разрешения на запись

sudo setsebool -P httpd_unified 1

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

ls -ld html

Возвращает это

drwxrwsr-x+   3 html www-data

Знак “+” в конце указывает на то, что на каталоге установлены ACL, Список Управления Доступом.

Ссылка: Ссылка на форум

Вышеуказанный ответ не обновляет разрешения на выполнение, хотя они таковыми и выглядят. Используйте
chacl -r u::rwx,g::r-x,o::r-- ./

Я думаю, что вы имеете в виду umask.

Используя следующую команду, вы можете установить разрешения по умолчанию для файла:

chacl -R filename

.

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

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

Шаги для установки стандартных прав доступа

  1. Назначение группы:

    Сначала необходимо убедиться, что ваша целевая группа, например, "media", существует. Это можно выполнить с помощью следующей команды:

    getent group media

    Если группа не существует, создайте её:

    sudo groupadd media
  2. Установка флага SGID:

    Установка флага SGID (Set Group ID) на директорию позволит всем новым файлам и каталогам, созданным внутри этой директории, наследовать группу родительской директории. Для этого выполните команду:

    sudo chmod g+s <directory>

    Замените <directory> на путь к вашей целевой директории.

  3. Установка стандартных ACL:

    Для назначения прав доступа как для существующих, так и для вновь созданных файлов и папок используйте команды setfacl. Эти команды позволяют устанавливать стандартные права доступа для группы и других пользователей:

    sudo setfacl -R -m g::rwx <directory>
    sudo setfacl -R -m o::rx <directory>

    В этих командах:

    • -R – рекурсивное применение.
    • g::rwx – устанавливает права чтения, записи и исполнения для группы.
    • o::rx – устанавливает права чтения и исполнения для остальных.

    Также установите стандартные права по умолчанию для новых файлов и папок:

    sudo setfacl -R -d -m g::rwx <directory>
    sudo setfacl -R -d -m o::rx <directory>
  4. Проверка прав доступа:

    Для проверки установленной ACL используйте команду:

    getfacl <directory>

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

  5. Добавление пользователя в группу:

    Чтобы ваш пользователь мог создавать файлы и папки с использованием установленных прав, убедитесь, что он является членом нужной группы:

    sudo usermod -a -G media $USER

    После добавления в группу рекомендуется выйти из системы и войти снова, чтобы изменения вступили в силу.

  6. Установка SELinux:

    Если у вас установлен SELinux, вы можете изменить его настройки, чтобы разрешить необходимые операции с файлами. Для этого выполните команду:

    sudo setsebool -P httpd_unified 1

Заключение

Следуя вышеуказанным шагам, вы сможете настроить стандартные права доступа для всех новых файлов и папок, созданных внутри определенной директории в Linux. Такие настройки удобны для управления правами доступа в средах, где несколько пользователей работают с общей файловой системой. Это позволяет улучшить безопасность и избежать неразберихи в правах доступа к файлам.

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

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