У нас есть пара Apache VirtualHosts на сервере CentOS 7, и PHP иногда требует возможность создавать / редактировать / удалять файлы и / или папки, поэтому важно, чтобы разрешения всегда были рекурсивными apache.apache
.
Развертывания выполняются через Jenkins, как пользователь Jenkins, и я знаю, что могу просто добавить простое выполнение оболочки в chown -R apache.apache /var/www/website
, и я сделаю это, но если кто-то, кроме меня, сделает руководство развертывание или все, что может изменить права доступа, например создание нового файла или папки, то это может вызвать некоторые проблемы.
Я думал о том, чтобы просто сделать работу cron, чтобы периодически разбивать весь каталог, но будет 4 разных VHosts и, возможно, большое количество файлов для каждого, так что это часто не оптимально, но опять же, не выполнение этого часто означает, что могут возникнуть проблемы между изменением разрешений и выполнением задания cron.
Так кто-нибудь знает хороший способ убедиться, что владелец всегда установлен для определенного каталога? (рекурсивно) независимо от того, что пользователь делает что?
Сначала я подумал о Sticky Bits .. но я бы работал только на разрешения, а не на владение.
Затем я подумал об использовании чего-то вроде entr, которое я нашел в простом поиске Google. Он не доступен ни в одном репо, который я смог найти, поэтому вам нужно установить его вручную, но в основном он запускает команды, которые вы указываете, когда видит какие-либо изменения в папках / файлах, так что-то вроде
ls -d /var/www/foo.company.com | entr sh -c 'chown -R apache.apache /var/www/foo.company.com && echo "Chowned at $(date)" >> /var/log/entr.log'
было бы достаточно ... Но я уверен, что есть решение, которое не требует ручной установки этого двоичного файла на серверы (я стараюсь максимально управлять пакетами через yum)
Любая помощь будет оценена!
Спасибо
Обновить
Zoredache упомянул, что я должен просто добавить пользователя apache
в группу других пользователей, которым требуются разрешения на запись (то есть jenkins
, так как это делает развертывание), а затем установить бит ID разрешения группы (chmod 2775).
Мне нравится такой подход, но сейчас я сталкиваюсь с проблемой.
Вот консольные команды / выходные данные, связанные с разрешениями
[root@svr www]# chown -R apache.apache www.company.com
[root@svr www]# chmod -R 2775 www.company.com
[root@svr www]# getfacl www.company.com/
# file: www.company.com/
# owner: apache
# group: apache
# flags: -s-
user::rwx
group::rwx
other::r-x
[root@svr www]# ls -l
total 0
drwxrwsr-x. 2 apache apache 6 Apr 29 09:47 www.company.com
Так это выглядит хорошо, верно? Однако, когда я пытаюсь выполнить развертывание, у меня возникает проблема с разрешениями ... Но если я верну каталог на 0775, он будет работать. Почему это не работает, когда я устанавливаю sgid?