it-swarm-ko.tech

권장되는 디렉토리 권한은 무엇입니까?

Drupal 7 사이트를 배포하려고 노력하고 있으며 권장되는 보안 관련 파일 및 디렉토리 권한에 대한 문서를 찾을 수 없습니다.

구체적으로 특별히 default/files/ (또한 하위 디렉토리?), settings.php, .htaccess 그리고 내가 알아야 할 다른 것.

145
ack

웹 서버는 모든 파일을 읽을 수 있지만 not 쓸 수는 없습니다. 사이트에 파일 업로드가 포함 된 경우 서버에 해당 폴더 하나에 만 쓸 수있는 권한을 부여하십시오.

설정 방법에 대한 자세한 내용과 그렇지 않은 경우 발생할 수있는 사항은 Drupal docs 에서 확인할 수 있습니다.

68
Paul Jones

그처럼 drupal 페이지는 매우 길고 혼동됩니다. 그러나 Jason의 글이 머리에 맞았습니다.

Jason Sale 님이 2010 년 11 월 1 일 오후 12시 40 분에 게시

이 글과 모든 것을 작성해 주셔서 감사하지만이 페이지를 읽는 사람들의 99 %가 폴더 목록 옆의 숫자 목록 만 있으면됩니다.

  • /default에 755
  • /default/files 744 (또는 755)의 모든 하위 폴더 및 파일 포함
  • /default/themes 755의 모든 하위 폴더 및 파일 포함
  • /default/modules 755의 모든 하위 폴더 및 파일 포함
  • /default/settings.php/default/default.settings.php에 444
91
ErichBSchulz

서버에서 새 Drupal 사이트 만들기)에 대한 나의 연습은 웹 서버 (일반적으로 Apache) 그룹의 일부인 사용자를 보유하고 해당 사용자가 모든 Drupal 파일. 우분투에서는 다음과 같은 명령을 설정합니다 :

# 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

일단 설정 한 후에는 해당 사용자로 로그인하여/var/www/example/docroot 또는 이와 비슷한 곳에 Drupal 설치 한 후 파일 디렉토리를 직접 작성하여 복사합니다. Drupal에 복사하기 전에 예제 사용자로 로그인하기 때문에 모든 코어 Drupal 파일 및 스크립트 (.htaccess 포함)에서 파일 소유권 및 권한이 자동으로 올바르게 구성되어야합니다. 파일).

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

이제 files 디렉토리를 설정하자.

# 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

다음으로 웹 서버가이 디렉토리에있는 모든 파일에 항상 쓸 수 있도록 권한을 설정합니다. chmod 명령에서 2775를 사용하여이 작업을 수행합니다. 2는이 디렉토리에서 작성된 새 파일에 대해 그룹 ID가 보존됨을 의미합니다. 이는 www-data가 항상 파일의 그룹이되므로 웹 서버와 사용자는 항상이 디렉토리에있는 새 파일에 대한 쓰기 권한을 갖도록하는 것입니다. 처음 7은 소유자 (예)가 여기에있는 모든 파일을 R (읽기) W (쓰기) 및 X (실행) 할 수 있음을 의미합니다. 두 번째 7은 그룹 (www-data)이이 디렉토리의 모든 파일을 RW 및 X로 할 수 있음을 의미합니다. 마지막으로 5는 다른 사용자가 R 및 X 파일을 쓸 수는 있지만 쓸 수는 없음을 의미합니다.

 chmod 2775 sites/default/files

이 디렉토리에 기존 파일이 있으면 웹 서버에 쓰기 권한이 있는지 확인하십시오.

 chmod g+w -R sites/default/files

이제 Drupal 설치할 준비가되었습니다. 완료되면 VERY 중요합니다. settings.php로 돌아와서 확인하십시오. 모든 사용자에게는 읽기 권한 만 있습니다.

 chmod 444 sites/default/settings.php

그게 다야! 이 설정을 통해 디렉토리를 소유 한 사용자 또는 웹 서버가 파일 디렉토리에서 파일을 쓰거나 변경/제거 할 수없는 상황을 피할 수 있습니다.

81
q0rban

Drupal files 폴더는 웹 서버에 의해 쓰기 가능해야합니다. 가장 안전한 방법은 그룹을 변경하고 다음과 같이 그룹 쓰기 가능하게 만드는 것입니다.

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

파일 업로드 폴더는 제쳐두고 가장 안전합니다. 모든 파일의 경우 chmod 644, 디렉토리의 경우 755입니다.

이것은 Drupal 사이트 폴더에서 실행될 때 .는 현재 경로입니다) :

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

chmod g+w은 위의 명령을 실행 한 후에 다시 모든 파일과 폴더에서 chmod를 재설정하므로 다시 실행됩니다.

31
mikl

"chmod blah"또는 "chown X"에 대한 조언은 기본 user : group이 파일에 무엇인지, 웹 서버가 어떤 사용자 및 그룹을 실행하는지 모르는 경우에는 의미가 없습니다.

Drupal 다른 사람들이 링크 한 문서는 주제에 대해 꽤 잘하지만 다른 리소스는 보안 검토 모듈 이며 모든 것을 올바르게 설정했는지 확인하는 데 도움이됩니다.

20
greggles

웹 서버가 실행되는 것과 다른 자격 증명을 사용하여 FTP를 사용하여 서버에서 파일이 생성되는 경우를 고려하여 답변합니다 (일반적으로 Apache는 nobody/nobody로 실행됩니다). 이는 Drupal 설치 프로그램 (Drupal 아카이브에서 서버에 업로드 된 파일도 포함)을 실행하기 전에 수동으로 작성된 파일을 소유 한 사용자가 실행하는 데 사용 된 사용자가 아님을 의미합니다. 웹 서버 (사용자 이름 또는 그룹이 일치하지 않음) 이 시나리오는 SSH를 사용하여 해당 파일을 작성하는 경우에도 적용됩니다.

  • Settings.php 파일은 Drupal 인스톨러에서 쓸 수 있어야하지만, 일단 설치가 완료되면 읽기 전용으로 설정하는 것이 좋습니다 (설치 프로그램에서 제안하고 Drupal 파일이 실제로 읽기 전용인지 확인하십시오). 내가 설명하는 시나리오에서이 파일의 권한은 644 이상이어야합니다.
  • .htaccess 파일 (적어도 두 곳에 있음)에는 644 권한이 있어야합니다. 파일을 만든 사용자는 다음 버전의 Drupal이 (가) 오는 경우 파일을 덮어 쓸 수 있어야합니다. .htaccess 파일이 업데이트되었습니다 (보안 문제를 피하기 위해 해당 파일에 행을 추가 한 경우 이미 한 번 발생 함). 사용 권한을 444로 설정할 수도 있지만이 경우 파일을 업데이트해야 할 때 사용 권한을 다시 644로 변경해야합니다.
  • 모듈에 의해 작성된 파일 (default/files 디렉토리)을 포함하는 디렉토리는 (웹 서버 프로세스에 지정된 사용자의 경우 PHP에 지정된 사용자의 경우) 해당 웹 서버에서 실행되는 스크립트) :
    • 읽을 수있는
    • 쓰기 가능
    • 통과 가능 (모듈은 default/files/<directory-used-by-the-module>/<sub-directory-used-by-the-module>에 도달 할 수 있어야합니다.)
9
kiamlaluno

권장 파일/디렉토리 권한 :

  • Drupal 웹 루트는 세계에서 읽을 수 있어야합니다 ( pdater.inc 참조) : 0755
  • 공개 업로드 디렉토리 : 0755 또는 0775
  • 개인 업로드 디렉토리의 경우 : 0750 또는 0770
  • 공개 업로드 파일 : 0644 또는 0664
  • 개인 업로드 파일의 경우 : 0640 또는 0660
  • 업로드 디렉토리 내 .htaccess의 경우 : file_create_htaccess () 참조 : 0444 (기본값) 또는 0644
  • 모든 (및 기타 기밀 파일)에 대한 settings.php 읽기 전용 : 0440
  • 다른 모든 웹 디렉토리의 경우 : 0755
  • 다른 모든 웹 파일의 경우 : 0644

권장 파일/디렉토리 소유권 :

  • 모든 업로드 디렉토리/파일의 소유자는 Apache 사용자로 설정되어야합니다.
  • 모든 웹/소스 디렉토리/파일의 소유자는 Apache 이외의 사용자로 설정되어야합니다.
  • (선택 사항) 모든 소스 그룹을 Apache 그룹으로 설정해야합니다.

새 항목에 대한 기본 dir/file 권한을 제어하는 ​​변수는 다음과 같습니다.

file_chmod_directory: 0775
file_chmod_file: 0664

다음은 권한 수정을위한 스크립트입니다. fix-permissions.sh


더 읽어보기 :


다음은 공개/개인 디렉토리의 원격 호스트에 대한 권한을 수정하는 데 사용하는 스크립트입니다.

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

참고 : 위의 코드는 Apache group 검색 을 시도하고 GET_HTTP_GROUP 변수로 설정합니다.

7
kenorb

이 쉘 스크립트는이 페이지의 하단에 있습니다 : https://www.drupal.org/node/244924

권한을 올바르게 설정하기 위해 가끔씩 실행합니다.

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

또한 fastcgi를 실행하는 경우 PHP는 사용자로 실행되며, 의도적으로 피하려고하지 않는 한 사용자가 액세스 할 수있는 모든 파일에 액세스 할 수 있습니다.

3
G.Martin

이것은 OSX Permission 문제에 도움이되었습니다. 나는 원형질 사용자에 의해 https://www.drupal.org/node/244924#comment-3741738 에서 찾았습니다. 마이그레이션 후 문제가있는 것 같습니다.

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

보안 검토 라는 모듈이있어 사이트의 보안 여부를 확인합니다. 또한 사이트 권한을 설정하는 데 아주 좋은 link 를 발견했습니다.

0
Manikandan