it-swarm-vi.com

Các quyền thư mục được đề nghị là gì?

Tôi đang chuẩn bị triển khai một trang web Drupal 7 và tôi không thể tìm thấy bất kỳ tài liệu nào về các quyền của thư mục và tệp có ý thức bảo mật được đề xuất nên được đặt thành.

Đặc biệt default/files/ (cũng là thư mục con?), settings.php, .htaccess và bất cứ điều gì khác tôi nên nhận thức được.

145
ack

Máy chủ web của bạn sẽ có thể đọc tất cả các tệp nhưng không ghi cho chúng. Nếu trang web của bạn liên quan đến việc tải lên các tệp thì chỉ cho phép máy chủ ghi vào một thư mục đó.

Thông tin thêm về cách thiết lập điều đó, cũng như một số điều có thể xảy ra nếu bạn không, có sẵn trong tài liệu Drupal .

68
Paul Jones

Điều đó drupal trang như rất nhiều trang rất dài và khó hiểu. Nhưng nó chứa bài đăng này của Jason, người đã bắn đinh vào đầu:

Đăng bởi Jason Sale vào ngày 1 tháng 11 năm 2010 lúc 12:40 chiều

Cảm ơn bạn đã viết cái này và mọi thứ, nhưng tất cả những gì tôi và 99% những người đọc trang này thực sự muốn là một danh sách các số bên cạnh một danh sách các thư mục.

  • /default vào 755
  • /default/files bao gồm tất cả các thư mục con và tệp trên 744 (hoặc 755)
  • /default/themes bao gồm tất cả các thư mục con và tệp trên 755
  • /default/modules bao gồm tất cả các thư mục con và tệp trên 755
  • /default/settings.php/default/default.settings.php trên 444
91
ErichBSchulz

Thực tiễn của tôi về việc tạo một trang web Drupal mới trên máy chủ là có một người dùng là một phần của nhóm máy chủ web (thường là Apache) và người dùng đó sở hữu tất cả Drupal. Trên Ubuntu, đây là các lệnh để thiết lập:

# 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

Khi tôi đã thiết lập xong, tôi sẽ đăng nhập với tư cách người dùng đó và cài đặt Drupal tại/var/www/example/docroot hoặc tương tự, sau đó tạo thư mục tệp bằng tay và sao chép Vì tệp settings.php. Vì chúng tôi đăng nhập với tư cách là người dùng mẫu của chúng tôi trước khi sao chép trong Drupal, quyền sở hữu và quyền của tệp sẽ tự động được định cấu hình đúng trên tất cả các tệp core Drupal (bao gồm .htaccess các tập tin).

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

Bây giờ hãy thiết lập thư mục tập tin.

# 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

Tiếp theo, chúng tôi sẽ thiết lập quyền để máy chủ web luôn có thể ghi vào bất kỳ tệp nào trong thư mục này. Chúng tôi làm điều này bằng cách sử dụng 2775 trong lệnh chmod của chúng tôi. 2 có nghĩa là id nhóm sẽ được giữ nguyên cho mọi tệp mới được tạo trong thư mục này. Điều đó có nghĩa là www - dữ liệu sẽ luôn là nhóm trên bất kỳ tệp nào, do đó đảm bảo rằng máy chủ web và người dùng sẽ luôn có quyền ghi vào bất kỳ tệp mới nào được đặt trong thư mục này. 7 đầu tiên có nghĩa là chủ sở hữu (ví dụ) có thể R (Đọc) W (Viết) và X (Thực thi) bất kỳ tệp nào ở đây. 7 thứ hai có nghĩa là nhóm (dữ liệu www) cũng có thể R W và X bất kỳ tệp nào trong thư mục này. Cuối cùng, 5 có nghĩa là những người dùng khác có thể tệp R và X, nhưng không thể ghi.

 chmod 2775 sites/default/files

Nếu có bất kỳ tệp nào trong thư mục này, hãy chắc chắn rằng máy chủ web đã ghi perms vào chúng.

 chmod g+w -R sites/default/files

Bây giờ Drupal đã sẵn sàng để cài đặt. Khi hoàn tất, nó là RẤT quan trọng để quay lại cài đặt.php và đảm bảo rằng tất cả người dùng chỉ có quyền đọc.

 chmod 444 sites/default/settings.php

Đó là nó! Việc thiết lập này đảm bảo bạn tránh mọi tình huống trong đó người dùng sở hữu thư mục hoặc máy chủ web không thể ghi/thay đổi/xóa tệp trong thư mục tệp.

81
q0rban

Thư mục tệp Drupal phải được ghi bởi máy chủ web. Cách an toàn nhất để làm điều đó là thay đổi nhóm và làm cho nhóm có thể ghi được, như sau:

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

Thư mục tải lên tệp sang một bên, an toàn nhất là chmod 644 cho tất cả các tệp, 755 cho các thư mục.

Điều này có thể được thực hiện như thế này (khi được chạy trong thư mục trang web Drupal, . dành cho đường dẫn hiện tại):

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

Hãy nhớ rằng bạn sẽ cần đặt chmod g+w một lần nữa sau khi chạy lệnh trên, vì những lệnh này sẽ đặt lại chmod trên tất cả các tệp và thư mục.

31
mikl

Mọi lời khuyên cho "chmod blah" hoặc "chown X" đều vô nghĩa mà không cần biết: người dùng mặc định: nhóm là gì trên các tệp và người dùng và nhóm máy chủ web của bạn chạy như thế nào.

Drupal Tài liệu mà những người khác đã liên kết khá tốt về chủ đề này nhưng một tài nguyên khác là Mô-đun đánh giá bảo mật giúp đảm bảo bạn đã đặt mọi thứ đúng cách.

20
greggles

Tôi sẽ trả lời xem xét trường hợp các tệp được tạo trên máy chủ bằng FTP, sử dụng thông tin đăng nhập khác với thông tin mà máy chủ web chạy (thông thường, Apache chạy dưới dạng không ai/không ai). Điều này có nghĩa là người dùng sở hữu các tệp được tạo thủ công trước khi chạy trình cài đặt Drupal (bao gồm cả các tệp được tải lên trên máy chủ từ kho lưu trữ Drupal) không phải là người dùng được sử dụng để chạy máy chủ web (không phải tên người dùng hoặc nhóm phù hợp). Kịch bản này cũng áp dụng cho trường hợp các tệp đó được tạo bằng SSH.

  • Tệp settings.php phải có thể ghi được từ trình cài đặt Drupal, nhưng sau khi cài đặt xong, nó được đề xuất làm cho nó chỉ đọc (trình cài đặt đề xuất rằng, và Drupal sẽ định kỳ kiểm tra xem tập tin có thực sự chỉ đọc). Trong kịch bản tôi đang mô tả, sự cho phép của tệp này ít nhất phải là 644.
  • Các tệp .htaccess (có mặt ở ít nhất hai nơi) phải có quyền 644. Người dùng đã tạo tệp vẫn có thể ghi đè lên tệp, trong trường hợp phiên bản tiếp theo của Drupal xuất hiện với tệp .htaccess đã được cập nhật (nó đã xảy ra một lần, khi nó đã được thêm một dòng vào tệp đó để tránh vấn đề bảo mật). Cũng có thể đặt quyền thành 444, nhưng trong trường hợp đó, quyền sẽ được thay đổi trở lại thành 644 khi tệp cần được cập nhật.
  • Thư mục chứa các tệp được tạo bởi các mô-đun (thư mục default/files) Phải là (đối với người dùng được gán cho các quy trình máy chủ web, sau đó người dùng được gán cho PHP tập lệnh chạy trên máy chủ web đó): [.__.]
    • có thể đọc được
    • có thể ghi
    • di chuyển ngang (các mô-đun phải có thể đạt default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>)
9
kiamlaluno

Quyền truy cập tệp/thư mục được đề xuất:

  • Webroot Drupal nên dễ đọc trên thế giới (xem: pdater.inc ): 0755
  • cho các thư mục tải lên công khai: 0755 hoặc 0775
  • cho các thư mục tải lên riêng tư: 0750 hoặc 0770
  • đối với các tệp được tải lên công khai: 0644 hoặc 0664
  • đối với các tệp tải lên riêng tư: 0640 hoặc 0660
  • cho .htaccess trong các thư mục tải lên (xem: file_create_htaccess () ): 0444 (mặc định) hoặc 0644
  • cho settings.php chỉ đọc cho tất cả (và các tệp bí mật khác): 0440
  • cho tất cả các thư mục web khác: 0755
  • cho tất cả các tệp web khác: 0644

Đề xuất quyền sở hữu tập tin/thư mục:

  • chủ sở hữu của tất cả các thư mục/tệp tải lên phải được đặt thành người dùng Apache,
  • chủ sở hữu của tất cả các thư mục/tệp web/nguồn nên được đặt thành người dùng không phải là Apache,
  • (tùy chọn) nhóm tất cả các nguồn nên được đặt thành nhóm Apache,

Dưới đây là các biến kiểm soát quyền truy cập tệp/tệp mặc định cho các mục mới:

file_chmod_directory: 0775
file_chmod_file: 0664

Đây là một số tập lệnh để sửa quyền: fix-permissions.sh


Đọc thêm:


Đây là tập lệnh mà tôi đang sử dụng để sửa quyền trên Máy chủ từ xa cho các thư mục chung/riêng:

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

Lưu ý: Mã ở trên sẽ cố gắng truy xuất nhóm Apache và đặt mã thành GET_HTTP_GROUP Biến đổi.

7
kenorb

Tập lệnh Shell này được tìm thấy ở dưới cùng của trang này: https://www.drupal.org/node/244924

Tôi thỉnh thoảng chạy nó để đảm bảo rằng các quyền của tôi được thiết lập chính xác.

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

Ngoài ra nếu bạn đang chạy fastcgi, php sẽ chạy AS người dùng và sẽ có quyền truy cập vào tất cả các tệp mà người dùng có quyền truy cập trừ khi bạn cố tình tránh điều này.

3
G.Martin

Điều này đã giúp tôi với các vấn đề về Giấy phép OSX. Tôi đã tìm thấy nó trong https://www.drupal.org/node/244924#comment-3741738 bởi người dùng protoplasm. Tôi giống như anh ấy có vấn đề sau khi di chuyển.

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

Có một mô-đun gọi là Đánh giá bảo mật để kiểm tra xem trang web của bạn có an toàn hay không. Tôi cũng tìm thấy một link rất tốt để đặt quyền cho trang web.

0
Manikandan