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.
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.
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
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.
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.
"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ü .
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.
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ı): default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>
'a erişebilmelidir)Önerilen dosya/dizin izinleri:
Önerilen dosya/dizin sahipliği:
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.
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.
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.
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
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.