it-swarm-eu.dev

Jaká jsou doporučená oprávnění k adresáři?

Připravuji se na nasazení webu Drupal 7) a nemůžu najít žádnou dokumentaci o tom, na co by měla být nastavena doporučená oprávnění k souborům a adresářům věnovaná zabezpečení.

Konkrétně default/files/ (také podadresáře?), settings.php, .htaccess a cokoli jiného, ​​o čem bych měl vědět.

145
ack

Váš webový server by měl být schopen číst všechny soubory, ale nikoli do nich zapisovat. Pokud váš web zahrnuje nahrávání souborů, udělte serveru oprávnění k zápisu pouze do jedné složky.

Další informace o tom, jak to nastavit, a také o některých věcech, které se mohou stát, pokud tak neučiníte, jsou k dispozici v Drupal docs .

69
Paul Jones

Že drupal stránka jako tolik je velmi dlouhá a matoucí. Obsahuje však příspěvek od Jasona, který udeřil hřebík do hlavy:

Zveřejnil Jason Sale 1. listopadu 2010 ve 12:40 hodin

Děkujeme za napsání tohoto a všeho, ale vše, co já a 99% lidí, kteří tuto stránku čtou, opravdu potřebuje, je seznam čísel vedle seznamu složek.

  • /default na 755
  • /default/files včetně všech podsložek a souborů na 744 (nebo 755)
  • /default/themes včetně všech podsložek a souborů na 755
  • /default/modules včetně všech podsložek a souborů na 755
  • /default/settings.php a /default/default.settings.php na 444
91
ErichBSchulz

Moje praxe při vytváření nového webu Drupal na serveru) je mít uživatele, který je součástí skupiny webového serveru (obvykle Apache), a nechat jej vlastnit všechny Drupal. Na Ubuntu jsou nastaveny tyto příkazy:

# Create a new example user, setting up /var/www/example as their home dir.
useradd -s /bin/bash -d /var/www/example -m example

# Now add that user to the Apache group. On Ubuntu/Debian this group is usually
# called www-data, on CentOS it's usually Apache.
usermod -a -G www-data example

# Set up a password for this user.
passwd example

Jakmile to nastavím, přihlásím se jako uživatel a nainstaluji Drupal na/var/www/example/docroot nebo podobné) a poté ručně vytvořím adresář souborů a zkopíruji ho protože se přihlašujeme jako náš příklad před kopírováním v Drupalu, mělo by být naše vlastnictví a oprávnění souborů automaticky správně nakonfigurováno na všech jádrech Drupal soubory a skripty (včetně .htaccess) soubory).

su - example
cd docroot
cp sites/default/default.settings.php sites/default/settings.php

# Temporarily give the web server write permissions to settings.php
chgrp www-data sites/default/settings.php
chmod g+w sites/default/settings.php

Nyní vytvořme adresář souborů.

# Create the directory.
mkdir sites/default/files

# Now set the group to the Apache group. -R means recursive, and -v means 
# verbose mode.
chgrp -Rv www-data sites/default/files

Dále nastavíme oprávnění, aby webový server mohl vždy zapisovat do jakéhokoli souboru, který je v tomto adresáři. Děláme to pomocí 2775 v našem příkazu chmod. 2 znamená, že ID skupiny bude zachováno pro všechny nové soubory vytvořené v tomto adresáři. To znamená, že www - data budou vždy skupinou na jakýchkoli souborech, což zajistí, že webový server i uživatel budou mít vždy oprávnění k zápisu do všech nových souborů, které jsou umístěny v tomto adresáři. Prvních 7 znamená, že majitel (příklad) může R (čtení) W (zápis) a X (provedení) libovolné soubory zde. Druhá 7 znamená, že skupina (www-data) může také RW a X libovolné soubory v tomto adresáři. Konečně 5 znamená, že ostatní uživatelé mohou soubory R a X, ale ne zapisovat.

 chmod 2775 sites/default/files

Pokud v tomto adresáři existují nějaké soubory, ujistěte se, že na nich webový server obsahuje perms perms.

 chmod g+w -R sites/default/files

Nyní Drupal je připraven k instalaci. Po dokončení je VELMI důležité vrátit se do settings.php a zajistit že všichni uživatelé mají pouze oprávnění ke čtení.

 chmod 444 sites/default/settings.php

A je to! Toto nastavení zajistí, abyste se vyhnuli situacím, kdy uživatel, který vlastní adresář, nebo webový server nemůže zapisovat/měnit/odebírat soubory v adresáři souborů.

82
q0rban

Složka Drupal by měl být zapisovatelný webovým serverem. Nejbezpečnějším způsobem, jak toho dosáhnout, je změna skupiny a její zapisování do skupiny, například:

chgrp www-data sites/default/files
chmod g+w sites/default/files

Složka pro upload souborů stranou, nejbezpečnější je chmod 644 pro všechny soubory, 755 pro adresáře.

To by bylo možné provést takto (při spuštění ve složce Drupal-site, . je pro aktuální cestu):

find . -type f | xargs chmod 644
find . -type d | xargs chmod 755

Nezapomeňte, že budete muset nastavit chmod g+w znovu po spuštění výše uvedeného příkazu, protože ty resetují chmod ve všech souborech a složkách.

31
mikl

Jakákoli rada pro „chmod blah“ nebo „chown X“ nemá smysl, aniž by věděla: co je výchozí skupina user: u souborů a jaký uživatel a skupiny váš webový server běží.

Dokumenty Drupal Docs, s nimiž jsou ostatní propojeny, jsou v daném tématu docela dobré, ale dalším zdrojem je Security Review Module , který pomáhá zajistit, že máte vše správně nastaveno.

20
greggles

Odpovím s ohledem na případ, kdy jsou soubory vytvořeny na serveru pomocí FTP, pomocí pověření odlišných od toho, pod kterým je spuštěn webový server (obvykle Apache běží jako nikdo/nikdo). To znamená, že uživatel, který vlastní soubory vytvořené ručně před spuštěním instalačního programu Drupal (který zahrnuje také soubory nahrané na server z archivu Drupal), není uživatelem použitým ke spuštění webový server (neodpovídá uživatelské jméno ani skupina). Tento scénář platí také pro případ, kdy jsou tyto soubory vytvořeny pomocí SSH.

  • Soubor settings.php musí být zapisovatelný z instalačního programu Drupal, ale jakmile je instalace dokončena, je doporučeno, aby byl proveden pouze pro čtení (instalační program to navrhuje a Drupal bude periodicky). zkontrolujte, zda je soubor opravdu jen pro čtení). Ve scénáři, který popisuji, by povolení tohoto souboru mělo být alespoň 644.
  • Soubory .htaccess (které jsou přítomny alespoň na dvou místech) by měly mít oprávnění 644. Uživatel, který vytvořil soubor, by měl být stále schopen přepsat soubor, v případě, že přijde další verze Drupal se souborem .htaccess, který byl aktualizován (stalo se to již jednou, když byl do tohoto souboru přidán řádek, aby se předešlo problému se zabezpečením). Je také možné nastavit oprávnění na 444, ale v takovém případě by měla být oprávnění změněna zpět na 644, když je třeba soubor aktualizovat.
  • Adresář obsahující soubory vytvořené moduly (adresář default/files) Musí být (pro uživatele, který je přiřazen k procesům webového serveru, což je pak uživatel přiřazený k PHP) skripty spuštěné na tomto webovém serveru):
    • čitelný
    • zapisovatelný
    • posuvné (moduly musí být schopny dosáhnout default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>)
9
kiamlaluno

Doporučená oprávnění pro soubor/adresář:

  • Drupal webroot by měl být světově čitelný (viz: pdater.inc ): 0755
  • pro veřejné adresáře pro nahrávání: 0755 nebo 0775
  • pro soukromé adresáře pro nahrávání: 0750 nebo 0770
  • pro veřejné nahrané soubory: 0644 nebo 0664
  • pro soukromé nahrané soubory: 0640 nebo 0660
  • pro .htaccess v adresářích pro nahrávání (viz: file_create_htaccess () ): 0444 (výchozí) nebo 0644
  • pro settings.php jen pro čtení pro všechny (a další důvěrné soubory): 0440
  • pro všechny ostatní webové adresáře: 0755
  • pro všechny ostatní webové soubory: 0644

Doporučené vlastnictví souboru/adresáře:

  • vlastník všech adresářů/souborů pro upload by měl být nastaven na uživatele Apache,
  • majitel všech adresářů/souborů na webu/zdrojích by měl být nastaven na uživatele bez Apache,
  • (volitelně) skupina všech zdrojů by měla být nastavena na skupinu Apache,

Zde jsou proměnné, které řídí výchozí oprávnění adresáře/souboru pro nové položky:

file_chmod_directory: 0775
file_chmod_file: 0664

Zde je několik skriptů pro opravu oprávnění: fix-permissions.sh


Přečtěte si více:


Zde je skript, který používám k opravě oprávnění ke vzdálenému hostiteli pro veřejné/soukromé adresáře:

#!/bin/sh -e
# Script to correct public/private directory and files permissions.
[ -z "$1" ] && { echo Usage: $0 @remote.dst; exit 1; }

DST="$1" && shift
GET_HTTP_GROUP='ps axo user,group,comm | egrep "(Apache|httpd)" | grep -v ^root | uniq | cut -d\  -f 1'

drush $* $DST ssh 'PUB=$(drush dd %files) && PRIV=$(drush dd %private) && AGROUP=$('"$GET_HTTP_GROUP"') && chgrp -vR $AGROUP $PUB $PRIV && chmod -vR u+rwX,g+rwX,o+rX $PUB $PRIV'

Poznámka: Výše ​​uvedený kód se pokusí načíst skupinu Apache a nastavit ji na GET_HTTP_GROUP proměnná.

8
kenorb

Tento skript Shell se nachází ve spodní části této stránky: https://www.drupal.org/node/244924

Příležitostně to spouštím, abych zajistil správné nastavení mých oprávnění.

#!/bin/bash
# Help menu
print_help() {
cat <<-HELP
This script is used to fix permissions of a Drupal installation
you need to provide the following arguments:
1) Path to your Drupal installation.
2) Username of the user that you want to give files/directories ownership.
3) HTTPD group name (defaults to www-data for Apache).
Usage: (Sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP
Example: (Sudo) bash ${0##*/} --drupal_path=/usr/local/Apache2/htdocs --drupal_user=john --httpd_group=www-data
HELP
exit 0
}
if [ $(id -u) != 0 ]; then
  printf "**************************************\n"
  printf "* Error: You must run this with Sudo. *\n"
  printf "**************************************\n"
  print_help
  exit 1
fi
drupal_path=${1%/}
drupal_user=${2}
httpd_group="${3:-www-data}"
# Parse Command Line Arguments
while [ $# -gt 0 ]; do
  case "$1" in
    --drupal_path=*)
      drupal_path="${1#*=}"
      ;;
    --drupal_user=*)
      drupal_user="${1#*=}"
      ;;
    --httpd_group=*)
      httpd_group="${1#*=}"
      ;;
    --help) print_help;;
    *)
      printf "***********************************************************\n"
      printf "* Error: Invalid argument, run --help for valid arguments. *\n"
      printf "***********************************************************\n"
      exit 1
  esac
  shift
done
if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then
  printf "*********************************************\n"
  printf "* Error: Please provide a valid Drupal path. *\n"
  printf "*********************************************\n"
  print_help
  exit 1
fi
if [ -z "${drupal_user}" ] || [[ $(id -un "${drupal_user}" 2> /dev/null) != "${drupal_user}" ]]; then
  printf "*************************************\n"
  printf "* Error: Please provide a valid user. *\n"
  printf "*************************************\n"
  print_help
  exit 1
fi
cd $drupal_path
printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n"
chown -R ${drupal_user}:${httpd_group} .
printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n"
find . -type d -exec chmod u=rwx,g=rx,o= '{}' \;
printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n"
find . -type f -exec chmod u=rw,g=r,o= '{}' \;
printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
cd sites
find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n"
printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
for x in ./*/files; do
    find ${x} -type d -exec chmod ug=rwx,o= '{}' \;
    find ${x} -type f -exec chmod ug=rw,o= '{}' \;
done
echo "Done setting proper permissions on files and directories"
Copy the code above to a file, name it "fix-permissions.sh" and run it as follows:
Sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name

Note: The server group name is assumed "www-data", if it differs use the --httpd_group=GROUP argument.
4
Richard Robinson

Také pokud používáte fastcgi, PHP běží AS jako uživatel a bude mít přístup ke všem souborům, ke kterým má uživatel přístup, pokud se tomu úmyslně nepokusíte vyhnout.

2
G.Martin

To mi pomohlo s mými problémy s OSX Permission. Našel jsem to v https://www.drupal.org/node/244924#comment-3741738 uživatelem protoplasmu. Byl jsem jako on s problémy po migraci.

[[email protected]]cd /path_to_drupal_installation/sites
[[email protected]]find . -type d -name files -exec chmod ug=rwx,o= '{}' \;
[[email protected]]find . -name files -type d -exec find '{}' -type f \; | while read FILE; do chmod ug=rw,o= "$FILE"; done
[[email protected]]find . -name files -type d -exec find '{}' -type d \; | while read DIR; do chmod ug=rwx,o= "$DIR"; done
1
cayerdis