Zugriffsrechte auf Dateisystemebene
-
Hallo,
ich habe eine Frage zu den Zugriffsrechten auf Dateisystemebene für Installationen auf Linux. Im idoit-rights.sh-script werden, abweichend von den Empfehlungen in der Knowledgebase, zusätzl. rekursiv 777-Rechte für eine ganze Reihe von Ordnern und Dateien vergeben. Das sollte doch nicht nötig sein, wenn als Datei-Eigentümer der Apache-User gesetzt ist, oder? Mindestens die src/config.inc.php enthält bei uns das DB-Passwort im Klartext.
Übersehe ich etwas, oder sollte das Skript nicht lieber gefixed werden, um nicht configs world-readable zu haben?
Als Standard-Rechte sieht das skript 644 für Dateien und 775 für Ordner vor; gibt es bekannte Probleme, wenn ich restriktiver 600 für dateien und 700 für Ordner setze (mit Apache-user als Eigentümer)?
Auszug aus idoit-rights.sh:
echo "[*] Setting up temp rights" $SU_CMD chmod -R 777 temp \ src/themes/default/smarty/templates_c \ src/themes/default/smarty/cache \ src/ \ updates/versions \ src/config.inc.php \ imports/ \ upload/files \ upload/images Danke!
-
Bei uns hat dieses Vorgehen bislang noch nicht zu Problemen geführt. Anstelle von idoit-rights.sh setzen wir unter Debian das folgende Skript ein:
#!/bin/bash set -euo pipefail PATH=/bin:/usr/bin OWNER=www-data function pre_update { find "$BASEDIR" -not -user "$OWNER" -print0 | xargs -0 -r chown "$OWNER:$OWNER" find "$BASEDIR" -type d -print0 | xargs -0 -r chmod 775 find "$BASEDIR" -type f -print0 | xargs -0 -r chmod 660 } function post_update { find "$BASEDIR" -not -user "$OWNER" -print0 | xargs -0 -r chown "$OWNER:$OWNER" chmod +x "$BASEDIR/controller" "$BASEDIR/import" "$BASEDIR/tenants" "$BASEDIR/updatecheck" chmod +x "$BASEDIR"/imports/scripts/*.sh for WDIR in "$BASEDIR/temp" "$BASEDIR/src/themes/default/smarty/templates_c" ; do if [ -d "$WDIR" ] ; then find "$WDIR" -type f -print0 | xargs -0 -r rm fi done } function usage { cat << EOF Set file and directory rights and ownership before and after updates. Usage: update_actions.sh pre_update DIR update_actions.sh post_update DIR EOF } function check_base_dir { BASEDIR=$1 if [ -z "$((head -1 "$BASEDIR/VERSION" | fgrep i-doit) 2> /dev/null)" ] ; then echo -e "Error checking base directory: Expecting to find VERSION file containing \n'i-doit' in the first line.\n" usage exit 1 fi } #main if [ "$EUID" != 0 ] ; then echo "This script is supposed to be run with root privileges" exit 1 fi if [ -z "$1" ]; then usage exit 1 fi if [ "$1" = "pre_update" ]; then check_base_dir "$2" pre_update elif [ "$1" = "post_update" ] ; then check_base_dir "$2" post_update else echo 'Unknown command' $1 usage exit 1 fi
Debian erzeugt per default für jeden User eine eigene Gruppe (user private group), dort macht es keinen Unterschied ob man 660 oder 600 verwendet.
-
Das i-doit rights Script ist sicherlich etwas großzügig mit den Rechten. Grundsätzlich theoretisch können die Rechte auch alle mit der Ownership des Apache Users auf rwx–---- und ähnliche Kombinationen (nicht überall sind Schreibrechte erforderlich) gesetzt werden. Anderweitige Zugriffsrechte benötigen höchstens externe Cronjobs.