Der beste Weg, um sicherzustellen, dass der Inhalt eines Verzeichnisses immer Apache gehört

625
Justin

Wir haben ein paar Apache VirtualHosts auf einem CentOS 7-Server, und für PHP ist es manchmal erforderlich, Dateien und / oder Ordner erstellen / bearbeiten / löschen zu können. Es ist daher wichtig, dass die Berechtigungen immer apache.apacherekursiv sind.

Die Bereitstellungen werden über Jenkins als Jenkins-Benutzer durchgeführt, und ich weiß, dass ich eine einfache Shell-Ausführung hinzufügen kann chown -R apache.apache /var/www/website, und ich werde es tun, aber wenn jemand anderes als ich eine manuelle Bereitstellung durchführt oder etwas, das die Berechtigungen ändern würde, wie z Wenn Sie eine neue Datei oder einen neuen Ordner erstellen, kann dies möglicherweise zu Problemen führen.

Ich habe mir überlegt, einfach einen cron-Job zu machen, um das gesamte Verzeichnis von Zeit zu Zeit zu finden, aber es werden 4 verschiedene VHosts und möglicherweise eine große Anzahl von Dateien für jedes vorhanden sein. Daher ist es oft nicht optimal, dies zu tun Häufig bedeutet dies, dass es Probleme geben kann, wenn die Dauerwellen geändert wurden und der Cron-Job ausgeführt wird.

Kennt jemand eine gute Möglichkeit, um sicherzustellen, dass der Besitzer immer für ein bestimmtes Verzeichnis festgelegt ist? (rekursiv) unabhängig davon, welcher Benutzer was tut?

Ich dachte zuerst an Sticky Bits .. aber ich würde nur für die Berechtigungen arbeiten, nicht für den Besitz.

Ich dachte dann darüber nach, wie entr zu verwenden, was ich unter einer einfachen Google-Suche fand. Es ist in keinem Repo verfügbar, das ich finden konnte, also müssen Sie es manuell installieren, aber es löst im Wesentlichen Befehle aus, die Sie festlegen, wenn Änderungen in Ordnern / Dateien angezeigt werden

ls -d /var/www/foo.company.com | entr sh -c 'chown -R apache.apache /var/www/foo.company.com && echo "An $ (Date) gechoppt" >> /var/log/entr.log'

würde ausreichen ... Aber ich bin sicher, dass es eine Lösung gibt, bei der diese Binärdatei nicht manuell auf den Servern installiert werden muss (ich versuche, die Pakete über yum so viel wie möglich zu verwalten).

Jede Hilfe wäre dankbar!

Vielen Dank

Aktualisieren

Zoredache erwähnte, dass ich den apacheBenutzer einfach der anderen Benutzergruppe hinzufügen sollte, die Schreibberechtigungen erfordert (d. jenkinsH., Da dies bei Bereitstellungen der Fall ist), dann das ID-Bit für die Gruppenberechtigung (chmod 2775) festlegen.

Ich mag diesen Ansatz, aber jetzt stoße ich auf ein Problem.

Hier sind die Konsolenbefehle / Ausgaben, die sich auf die Berechtigungen beziehen

[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 

Also sieht es ok aus? Wenn ich jedoch eine Bereitstellung versuche, erhalte ich ein Berechtigungsproblem ... Wenn ich jedoch das Verzeichnis wieder auf 0775 ändere, funktioniert es. Warum funktioniert es nicht, wenn ich die sgid eingestellt habe?

0
Warum braucht Apache Besitz? Setzen Sie einfach Apache in eine Gruppe, die Schreibzugriff auf das erforderliche Verzeichnis hat, und setzen Sie das Gruppen-ID-Bit in den Verzeichnissen (nicht das Sticky-Bit). `2775` für das Verzeichnis, auf das Apache zugreift. Zoredache vor 8 Jahren 0
Das kann helfen, aber gibt es eine Möglichkeit, dauerhaft "chmod g + rwx" zu verwenden? Ich benutze Jenkins für Deployments, und ich habe Jenkins in der Apache-Gruppe (und umgekehrt) und einen kranken `chown -R apache.apache / var / www && chmod -R 775 / var / www`, also seit * jenkins * user ist in der * apache * -Gruppe, es kann * rwx * sein, aber zu Beginn der Bereitstellung fällt aus irgendeinem Grund der Schreibzugriff für die Gruppe aus ... kann nicht herausfinden, warum. Wenn es also eine Möglichkeit gibt, der Gruppe Schreibzugriff auf eine Weise zu gewähren, dass sie nicht rückgängig gemacht werden kann (es sei denn, sie ist von root), würde dies funktionieren Justin vor 8 Jahren 0
Wenn alle Verzeichnisse 2775 sind und der Umask aller Personen / Prozesse, die in das Verzeichnis schreiben, 0002 ist, wird die Datei der Gruppe gehören und die Gruppe kann schreibgeschützt werden. Zoredache vor 8 Jahren 0

0 Antworten auf die Frage