it-swarm-id.com

Apa izin direktori yang disarankan?

Saya bersiap-siap untuk menggunakan situs Drupal 7 dan saya tidak dapat menemukan dokumentasi tentang apa yang harus ditetapkan oleh izin file dan direktori yang sadar akan keamanan.

Secara khusus default/files/ (juga sub direktori?), settings.php, .htaccess dan hal lain yang harus saya waspadai.

145
ack

Server web Anda harus dapat membaca semua file tetapi tidak menulis kepada mereka. Jika situs Anda melibatkan mengunggah file maka beri izin server untuk menulis ke satu folder saja.

Informasi lebih lanjut tentang cara mengaturnya, serta beberapa hal yang dapat terjadi jika Anda tidak melakukannya, tersedia di Drupal docs .

68
Paul Jones

Itu drupal halaman seperti begitu banyak sangat panjang dan membingungkan. Tapi itu berisi posting ini oleh Jason, yang memukul paku di kepala:

Diposting oleh Jason Sale pada 1 November 2010 pukul 12:40

Terima kasih telah menulis ini dan semuanya, tetapi semua yang saya dan 99% orang baca halaman ini benar-benar inginkan adalah daftar angka di sebelah daftar folder.

  • /default pada 755
  • /default/files termasuk semua subfolder dan file di 744 (atau 755)
  • /default/themes termasuk semua subfolder dan file di 755
  • /default/modules termasuk semua subfolder dan file di 755
  • /default/settings.php dan /default/default.settings.php pada 444
91
ErichBSchulz

Praktik saya seputar membuat situs Drupal baru di server adalah memiliki pengguna yang merupakan bagian dari grup server web (biasanya Apache), dan memiliki pengguna tersebut memiliki semua Drupal file. Di Ubuntu, ini adalah perintah untuk mengaturnya:

# 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

Setelah saya mengaturnya, saya akan login sebagai pengguna itu dan menginstal Drupal di/var/www/example/docroot atau sejenisnya, lalu buat direktori file dengan tangan dan salin file settings.php. Karena kita masuk sebagai contoh pengguna sebelum menyalin di Drupal, kepemilikan dan izin file kita harus secara otomatis dikonfigurasikan dengan benar pada semua inti Drupal file dan skrip (termasuk .htaccess file).

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

Sekarang mari kita mengatur direktori file.

# 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

Selanjutnya kita akan mengatur izin agar server web selalu dapat menulis ke file apa pun yang ada di direktori ini. Kami melakukan ini dengan menggunakan 2775 dalam perintah chmod kami. Angka 2 berarti bahwa id grup akan disimpan untuk semua file baru yang dibuat dalam direktori ini. Artinya adalah bahwa www - data akan selalu menjadi grup pada file apa pun, sehingga memastikan bahwa server web dan pengguna akan selalu memiliki izin menulis untuk file baru apa pun yang ditempatkan di direktori ini. 7 pertama berarti bahwa pemilik (contoh) dapat R (Baca) W (Tulis) dan X (Jalankan) file apa pun di sini. 7 kedua berarti bahwa grup (www-data) juga dapat RW dan X file apa pun dalam direktori ini. Akhirnya, 5 berarti bahwa pengguna lain dapat file R dan X, tetapi tidak menulis.

 chmod 2775 sites/default/files

Jika ada file yang ada di direktori ini, pastikan server web memiliki izin menulis pada mereka.

 chmod g+w -R sites/default/files

Sekarang Drupal siap diinstal. Setelah selesai, itu SANGAT penting untuk kembali ke settings.php dan memastikan bahwa semua pengguna hanya memiliki izin baca.

 chmod 444 sites/default/settings.php

Itu dia! Pengaturan ini memastikan Anda menghindari situasi apa pun di mana pengguna yang memiliki direktori atau server web tidak dapat menulis/mengubah/menghapus file di direktori file.

81
q0rban

Folder file Drupal harus dapat ditulis oleh server web. Cara paling aman untuk melakukannya adalah dengan mengubah grup dan menjadikannya grup yang dapat ditulis, seperti ini:

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

Di samping folder unggah file, yang paling aman adalah chmod 644 untuk semua file, 755 untuk direktori.

Ini bisa dilakukan seperti ini (ketika dijalankan di folder situs Drupal, . untuk jalur saat ini):

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

Ingat bahwa Anda perlu mengatur chmod g+w lagi setelah menjalankan perintah di atas, karena itu akan mengatur ulang chmod pada semua file dan folder.

31
mikl

Saran apa pun untuk "chmod blah" atau "chown X" tidak ada artinya tanpa mengetahui: apa pengguna default: grup ada di file dan apa pengguna dan grup yang dijalankan oleh server web Anda.

The Drupal Documents yang telah ditautkan oleh orang lain cukup bagus tentang topik ini tetapi satu sumber lain adalah Modul Tinjauan Keamanan yang membantu memastikan Anda telah mengatur semuanya dengan benar.

20
greggles

Saya akan menjawab mengingat kasus file dibuat di server menggunakan FTP, menggunakan kredensial berbeda dari yang di bawahnya adalah server web berjalan (biasanya, Apache berjalan sebagai tidak ada/siapa pun). Ini berarti bahwa pengguna yang memiliki file yang dibuat secara manual sebelum menjalankan pemasang Drupal (termasuk juga file yang diunggah di server dari arsip Drupal) bukan pengguna yang digunakan untuk menjalankan server web (baik nama pengguna atau grup tidak cocok). Skenario ini berlaku juga untuk kasus di mana file-file tersebut dibuat menggunakan SSH.

  • File settings.php harus dapat ditulis dari installer Drupal, tetapi begitu instalasi selesai disarankan untuk membuatnya hanya-baca (installer menyarankan itu, dan Drupal akan secara berkala periksa apakah file tersebut benar-benar hanya-baca). Dalam skenario yang saya jelaskan, izin file ini setidaknya 644.
  • File .htaccess (yang ada di setidaknya dua tempat) harus memiliki izin 644. Pengguna yang membuat file harus tetap dapat menimpa file tersebut, jika versi Drupal berikutnya datang dengan file .htaccess yang telah diperbarui (itu sudah terjadi sekali, ketika telah ditambahkan baris ke file itu untuk menghindari masalah keamanan). Dimungkinkan juga untuk mengatur izin menjadi 444, tetapi dalam kasus itu, izin tersebut harus diubah kembali ke 644 ketika file perlu diperbarui.
  • Direktori yang berisi file yang dibuat oleh modul (direktori default/files) Harus (untuk pengguna yang ditugaskan ke proses server web, yang kemudian pengguna ditugaskan ke PHP skrip yang berjalan di server web itu):
    • dapat dibaca
    • dapat ditulis
    • dapat dilalui (modul harus dapat mencapai default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>)
9
kiamlaluno

Izin file/direktori yang disarankan:

  • Drupal webroot harus dapat dibaca dunia (lihat: pdater.inc ): 0755
  • untuk direktori unggahan publik: 0755 atau 0775
  • untuk direktori unggahan pribadi: 0750 atau 0770
  • untuk file yang diunggah publik: 0644 atau 0664
  • untuk file yang diunggah pribadi: 0640 atau 0660
  • untuk .htaccess dalam direktori unggahan (lihat: file_create_htaccess () ): 0444 (default) atau 0644
  • untuk settings.php hanya-baca untuk semua (dan file rahasia lainnya): 0440
  • untuk semua direktori web lainnya: 0755
  • untuk semua file web lainnya: 0644

Kepemilikan file/direktori yang disarankan:

  • pemilik semua direktori/file unggahan harus disetel ke pengguna Apache,
  • pemilik semua web/sumber direktori/file harus disetel ke pengguna non-Apache,
  • (opsional) grup semua sumber harus diatur ke grup Apache,

Berikut adalah variabel yang mengontrol izin file/dir default untuk item baru:

file_chmod_directory: 0775
file_chmod_file: 0664

Berikut ini beberapa skrip untuk memperbaiki izin: fix-permissions.sh


Baca lebih banyak:


Berikut ini skrip yang saya gunakan untuk memperbaiki izin pada Host jarak jauh untuk direktori publik/pribadi:

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

Catatan: Kode di atas akan mencoba mengambil grup Apache dan mengaturnya ke GET_HTTP_GROUP variabel.

7
kenorb

Skrip Shell ini ditemukan di bagian bawah halaman ini: https://www.drupal.org/node/244924

Saya menjalankannya sesekali untuk memastikan bahwa izin saya diatur dengan benar.

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

Juga jika Anda menjalankan fastcgi, php dijalankan sebagai pengguna, dan akan memiliki akses ke semua file yang dapat diakses oleh pengguna kecuali Anda sengaja mencoba menghindarinya.

3
G.Martin

Ini membantu saya dengan masalah Izin OSX saya. Saya menemukannya di https://www.drupal.org/node/244924#comment-3741738 oleh pengguna protoplasma. Saya seperti dia mengalami masalah setelah migrasi.

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

Ada modul bernama Tinjauan keamanan yang memeriksa apakah situs Anda aman atau tidak. Saya juga menemukan sangat bagus tautan untuk mengatur izin situs.

0
Manikandan