Вопрос или проблема
Я хочу настроить папку так, чтобы всё, что создаётся в ней (каталоги, файлы), наследовало разрешения и группу по умолчанию.
Назовем группу “media”. Кроме того, файлы/папки, созданные в каталоге, должны автоматически иметь g+rw.
Я нашел это: Применение разрешений по умолчанию
Из статьи:
-
Установите бит
setgid
, чтобы файлы/папки в <каталоге> создавались с той же группой, что и <каталог>chmod g+s <каталог>
-
Настройте 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, чтобы обеспечивать автоматическое наследование прав доступа от родительской директории.
Шаги для установки стандартных прав доступа
-
Назначение группы:
Сначала необходимо убедиться, что ваша целевая группа, например, "media", существует. Это можно выполнить с помощью следующей команды:
getent group media
Если группа не существует, создайте её:
sudo groupadd media
-
Установка флага SGID:
Установка флага SGID (Set Group ID) на директорию позволит всем новым файлам и каталогам, созданным внутри этой директории, наследовать группу родительской директории. Для этого выполните команду:
sudo chmod g+s <directory>
Замените
<directory>
на путь к вашей целевой директории. -
Установка стандартных 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>
-
Проверка прав доступа:
Для проверки установленной ACL используйте команду:
getfacl <directory>
Вывод должен содержать информацию о текущих правах доступа и стандартных настройках для группы и других пользователей.
-
Добавление пользователя в группу:
Чтобы ваш пользователь мог создавать файлы и папки с использованием установленных прав, убедитесь, что он является членом нужной группы:
sudo usermod -a -G media $USER
После добавления в группу рекомендуется выйти из системы и войти снова, чтобы изменения вступили в силу.
-
Установка SELinux:
Если у вас установлен SELinux, вы можете изменить его настройки, чтобы разрешить необходимые операции с файлами. Для этого выполните команду:
sudo setsebool -P httpd_unified 1
Заключение
Следуя вышеуказанным шагам, вы сможете настроить стандартные права доступа для всех новых файлов и папок, созданных внутри определенной директории в Linux. Такие настройки удобны для управления правами доступа в средах, где несколько пользователей работают с общей файловой системой. Это позволяет улучшить безопасность и избежать неразберихи в правах доступа к файлам.