web-gelistirme-sc.com

Önerilen dizin izinleri nelerdir?

Ben bir Drupal 7 site dağıtmak için dişli ve önerilen güvenlik bilinçli dosya ve dizin izinlerinin ayarlanması gereken herhangi bir belge bulamıyorum.

Özellikle default/files/ (ayrıca alt dizinler?), settings.php, .htaccess ve bilmem gereken her şey.

145
ack

Web sunucunuz tüm dosyaları okuyabilmeli ancak dosyalara yazamamalıdır. Siteniz dosya yüklemeyi içeriyorsa, sunucuya yalnızca bu klasöre yazma izni verin.

Bunu nasıl kuracağınız ve yapmazsanız olabilecek bazı şeyler hakkında daha fazla bilgi Drupal docs adresinde bulunabilir.

68
Paul Jones

Bu drupal sayfası gibi çok uzun ve kafa karıştırıcı. Ancak başın tırnağına vuran Jason'ın bu yazısını içeriyor:

Jason Sale tarafından 1 Kasım 2010, 12:40 pm tarihinde gönderildi

Bunu ve her şeyi yazdığınız için teşekkürler, ancak bu sayfayı okuyan kişilerin% 99'u gerçekten istediğim, klasör listesinin yanındaki sayıların bir listesidir.

  • /default üzerinde 755
  • /default/files 744 (veya 755) üzerindeki tüm alt klasörler ve dosyalar dahil
  • /default/themes 755'teki tüm alt klasörler ve dosyalar dahil
  • /default/modules 755'teki tüm alt klasörler ve dosyalar dahil
  • /default/settings.php ve /default/default.settings.php üzerinde 444
91
ErichBSchulz

Bir sunucuda yeni bir Drupal site oluşturma konusundaki uygulamam, web sunucusu (genellikle Apache) grubunun bir parçası olan bir kullanıcıya sahip olmak ve o kullanıcının tüm Drupal dosya. Ubuntu'da bu kurulumu yapmak için komutlar şunlardır:

# 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

Bu kurulumu yaptıktan sonra, bu kullanıcı olarak oturum açacağım ve Drupal/var/www/example/docroot veya benzeri bir konuma yükleyeceğim ve sonra dosya dizinini elle oluşturacağım ve üzerine kopyalayacağım Drupal'da kopyalamadan önce örnek kullanıcı olarak oturum açtığımızdan, dosya sahipliğimiz ve izinlerimiz tüm temel Drupal dosya ve komut dosyalarında (.htaccess dahil) otomatik olarak doğru şekilde yapılandırılmalıdır. Dosyalar).

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

Şimdi dosya dizinini ayarlayalım.

# 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

Daha sonra, web sunucusunun bu dizindeki herhangi bir dosyaya her zaman yazabilmesi için izinler ayarlayacağız. Bunu chmod komutumuzda 2775 kullanarak yapıyoruz. 2, grup kimliğinin bu dizinde oluşturulan tüm yeni dosyalar için korunacağı anlamına gelir. Bunun anlamı, www - verilerinin her zaman herhangi bir dosyadaki grup olması ve böylece web sunucusunun ve kullanıcının bu dizine yerleştirilen tüm yeni dosyalara her zaman yazma iznine sahip olmasını sağlamaktır. İlk 7, sahibin (örnek) buradaki herhangi bir dosyayı R (Oku) W (Yaz) ve X (Yürüt) yapabileceği anlamına gelir. İkinci 7, grubun (www-data) bu dizindeki herhangi bir dosyayı RW ve X de yapabileceği anlamına gelir. Son olarak, 5, diğer kullanıcıların R ve X dosyalarını yazabileceği, ancak yazamayacağı anlamına gelir.

 chmod 2775 sites/default/files

Bu dizinde varolan dosyalar varsa, web sunucusunun üzerinde yazma izinleri olduğundan emin olun.

 chmod g+w -R sites/default/files

Şimdi Drupal yüklenmeye hazır. Tamamlandığında ÇOK settings.php'ye geri dönüp emin olmak önemlidir tüm kullanıcıların yalnızca okuma izinleri olduğunu unutmayın.

 chmod 444 sites/default/settings.php

Bu kadar! Bu kurulum, dizinin sahibi olan kullanıcının veya web sunucusunun dosya dizinine dosya yazamadığı/değiştiremeyeceği/kaldıramayacağı durumlardan kaçınmanızı sağlar.

81
q0rban

Drupal dosya klasörü web sunucusu tarafından yazılabilir olmalıdır. Bunu yapmanın en güvenli yolu grubu değiştirmek ve yazılabilir bir grup haline getirmektir:

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

Dosya yükleme klasörü bir yana, en güvenli olan tüm dosyalar için chmod 644, dizinler için 755'tir.

Bu şu şekilde gerçekleştirilebilir (Drupal site klasöründe çalıştırıldığında . Geçerli yol içindir):

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

Yukarıdaki komutu çalıştırdıktan sonra chmod g+w Ayarını yapmanız gerektiğini unutmayın, çünkü bunlar tüm dosya ve klasörlerde chmod'u sıfırlayacaktır.

31
mikl

"Chmod blah" veya "chown X" için herhangi bir öneri bilmeden anlamsızdır: varsayılan kullanıcı: grubunun dosyalarda ne olduğunu ve web sunucunuzun hangi kullanıcı ve gruplarda çalıştığını.

Başkalarının bağlandığı Drupal Dokümanlar bu konuda oldukça iyi ancak başka bir kaynak da Güvenlik İnceleme Modülü .

20
greggles

Dosyaların sunucuda FTP kullanılarak oluşturulduğu ve web sunucusunun çalıştığı kimlik bilgisinden (normalde Apache hiç kimse/kimse olarak çalışmadığında) kimlik bilgilerini kullanarak yanıt vereceğim. Bu, Drupal yükleyiciyi çalıştırmadan önce manuel olarak oluşturulan dosyalara sahip olan kullanıcının (Drupal arşivinden sunucuya yüklenen dosyaları da içerir) çalıştırma için kullanılan kullanıcı olmadığı anlamına gelir web sunucusu (kullanıcı adı veya grup eşleşmez). Bu senaryo, SSH kullanılarak bu dosyaların oluşturulduğu durumlar için de geçerlidir.

  • Settings.php dosyası Drupal yükleyicisinden yazılabilir olmalıdır, ancak yükleme tamamlandıktan sonra salt okunur hale getirilmesi önerilir (yükleyici şunu önerir ve Drupal düzenli aralıklarla dosyanın gerçekten salt okunur olup olmadığını kontrol edin). Açıkladığım senaryoda, bu dosyanın izni en az 644 olmalıdır.
  • .Htaccess dosyalarının (en az iki yerde mevcut olan) izni 644 olmalıdır. Drupal öğesinin bir sonraki sürümü gelmesi durumunda, dosyayı oluşturan kullanıcının dosyanın üzerine yazabilmesi gerekir. güncellenmiş bir .htaccess dosyasıyla (bir güvenlik sorununu önlemek için bu dosyaya bir satır eklendiğinde zaten bir kez oldu). İzinleri 444 olarak ayarlamak da mümkündür, ancak bu durumda dosyanın güncellenmesi gerektiğinde izinler tekrar 644 olarak değiştirilmelidir.
  • Modüller tarafından oluşturulan dosyaları içeren dizin (default/files Dizini) (web sunucusu işlemlerine atanan kullanıcı için, daha sonra PHP öğesine atanan kullanıcı için web sunucusunda çalışan komut dosyaları):
    • okunabilir
    • yazılabilir
    • değiştirilebilir (modüller default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module> 'a erişebilmelidir)
9
kiamlaluno

Önerilen dosya/dizin izinleri:

  • Drupal webroot dünya tarafından okunabilir olmalıdır (bkz: pdater.inc ): 0755
  • genel yükleme dizinleri için: 0755 veya 0775
  • özel yükleme dizinleri için: 0750 veya 0770
  • herkese açık olarak yüklenen dosyalar için: 0644 veya 0664
  • özel yüklenen dosyalar için: 0640 veya 0660
  • yükleme dizinlerindeki .htaccess için (bkz: file_create_htaccess () ): 0444 (varsayılan) veya 0644
  • herkes için (ve diğer gizli dosyalar) settings.php salt okunur için: 0440
  • diğer tüm web dizinleri için: 0755
  • diğer tüm web dosyaları için: 0644

Önerilen dosya/dizin sahipliği:

  • tüm yükleme dizinlerinin/dosyalarının sahibi Apache kullanıcısına ayarlanmalıdır,
  • tüm web/kaynak dizinlerinin/dosyalarının sahibi Apache kullanıcısı olarak ayarlanmalıdır,
  • (isteğe bağlı olarak) tüm kaynakların grubu Apache grubuna ayarlanmalıdır,

Yeni öğeler için varsayılan dir/dosya izinlerini denetleyen değişkenler şunlardır:

file_chmod_directory: 0775
file_chmod_file: 0664

İşte izinleri düzeltmek için bazı komut dosyası: fix-permissions.sh


Daha fazla oku:


Genel/özel dizinler için uzak Ana Bilgisayardaki izinleri düzeltmek için kullandığım komut dosyası:

#!/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'

Not: Yukarıdaki kod Apache grubunu al ve GET_HTTP_GROUP değişkeni.

7
kenorb

Bu Kabuk betiği bu sayfanın altında bulunur: https://www.drupal.org/node/244924

İzinlerimin doğru ayarlandığından emin olmak için ara sıra çalıştırıyorum.

#!/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

Ayrıca fastcgi çalıştırıyorsanız, php kullanıcı olarak çalışır ve kasten bundan kaçınmaya çalışmadıkça kullanıcının erişebildiği tüm dosyalara erişebilir.

3
G.Martin

Bu, OSX İzni sorunlarımda bana yardımcı oldu. Protoplazma kullanıcısı tarafından https://www.drupal.org/node/244924#comment-3741738 içinde buldum. Bir göçten sonra sorunları yaşıyordu.

[[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

Sitenizin güvenli olup olmadığını kontrol eden Güvenlik incelemesi adlı bir modül var. Ayrıca site izinlerini ayarlamak için çok iyi bir link buldum.

0
Manikandan