권한 문제 : Apache가 홈 디렉토리의 파일에 어떻게 액세스 할 수 있습니까?


33

파일 권한이 이전에 다루어졌지만 시나리오의 개념을 이해하기 위해 고심하고 있습니다.

  • 이전 우분투 설치에서 파일을 만들었습니다.
  • 파일을 새 우분투 설치에 복사하여 웹 루트에 넣었습니다.
  • 파일 (PHP 파일)을 실행하려고하면 권한과 관련된 오류가 발생합니다.

이 문제를 해결하기 위해 이전 소유자가 여전히 소유하고 있어야한다고 가정 했으므로 chown -R디렉토리의 모든 파일의 소유권을 얻으려면 사용자 이름을 인수로 사용하여 디렉토리에서 실행했습니다. 신규 및 기존 우분투 설치 사이의 사용자 이름은 동일합니다.

파일을 다시 실행하려고 할 때 동일한 문제 : 권한 문제로 인한 500 오류. 다른 조치를 취해야 할 사람이 있습니까?

아파치 설치를위한 웹 루트는 내 홈 폴더 안에 있습니다. 내 웹 루트에서 새 파일을 만들면 문제를 일으키는 오래된 파일 만 예상대로 작동합니다.


파일이있을 때 파일 권한이 복사되는지 확실하지 않습니다. 누군가 확인할 수 있습니까? 그렇지 않으면 파일을 다른 사용자 (또는 루트)에게 제공 한 후 다시 사용할 수 있습니까?
Tagger

좋아, 나는 파일이 실행되지 않는 문제를 해결했지만 문제의 chmod -R 777 dir디렉토리에서 단순히 실행 하여 수행 했습니다. 그래도 더 좋은 방법이 있다고 생각할 수 없습니다
richzilla

3
파일에 777 개의 권한이 있으면 모든 사람이 파일을 쓸 수있어 페이지가 손상되거나 해킹 될 수 있습니다. PHP 파일에 일반적으로 사용되는 755를 사용해보십시오. 파일에 대해 "허용 실행"을 활성화 할 필요가 없는지 확인하십시오.이 경우 chmod [filename] -x를 실행할 수 있습니다. 다음 링크를 클릭하면 chmod 명령에 대한 정보를 얻을 수 있습니다. catcode.com/teachmod/chmod_cmd.html
Geppettvs D' Constanzo

Apache 오류 로그는 무엇을 표시합니까?
Kees Cook

답변:


14

webroot 위의 디렉토리에는 Apache가 디렉토리로 내려갈 수 있도록 실행 비트가 설정되어 있어야합니다.

에 웹 루트가 /home/user/htdocs있는 /경우 /home, /home/user/home/user/htdocs실행 비트가 설정되어 있어야합니다.


위의 솔루션은 "작동"하지만 이상적이지 않습니다. 폴더를 생성 한 경우 Apache는 해당 폴더에 쓸 수 없습니다. 그 반대도 마찬가지입니다.

이것은 umask 0007을 설정하고 아파치 그룹 (실수하지 않은 경우 www-data)에 자신을 추가하여 "고정"될 수 있으므로 새로 생성 된 파일과 폴더를 그룹이 쓸 수 있습니다.

또는 다른 Apache MPM : Apache2 MPM ITK ( 구성 정보 )를 설치하고 Apache가 사용자에서 실행되도록 구성을 조정할 수 있습니다.


이 페이지의 마르코의 답변을 accmplish하는 방법에 대한 명확한 지침은 아래
호브


44

서버 문서가 /home/$USER/public_html디렉토리에있는 경우 다음을 실행해야합니다.

sudo chown -R www-data:www-data /home/$USER/public_html

DocumentRoot 폴더의 소유권을 사용자 www-data와 그룹에 제공 www-data합니다.

그런 다음 그룹에 자신을 추가 할 수 있습니다 www-data

sudo adduser $USER www-data

마지막으로, 소유자 (www-data 사용자) 및 자신 ( www-data그룹의 일부)이 DocumentRoot 폴더에 쓰기 가능 권한을 부여해야합니다 .

sudo chmod -R 775 /home/$USER/public_html

편의상 public_html_fix.sh컨텐츠로 이름이 지정된 스크립트를 만들 수 있습니다 .

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

내부에 저장하고 /home/$USER/bin다음을 사용하여 실행 가능하게하십시오.

sudo chmod +x /home/$USER/bin/public_html_fix.sh

그런 다음 필요할 때마다 파일 시스템 어디에서나 다음과 같이 자신을 찾을 수 있습니다.

public_html_fix.sh

1
나를 위해 일했다 ....
Emmanuel Okeke

좋은 답변입니다! -예제, 심지어 편리한 스크립트와 사용 / 설치 방법이 우수합니다!
Andre

2
공유 호스트에서이 작업을 수행하는 경우 www-data그룹의 다른 사용자가 파일을 읽거나 해당 문제에 대해 쓰는 것을 어떻게 중지 합니까?
jozxyqk

정말 멋진 답변 ... 당신은 내 생명을 구했다
NullPoiиteя

1
chmod -R 775 /home/$USER/public_html정말 끔찍한. find /home/$USER/public_html -type d -exec chmod 775 {} \;그리고 find /home/$USER/public_html -type f -exec chmod 664 {} \;훨씬 더
iharob

1

파일을 수정하고 아파치 .conf 파일을 편집하는 것 외에도, 파일이 노틸러스를 통해 자동 마운트 된 파티션에 있었기 때문에 아무런 효과가 없다고 말하고 싶습니다. 이것은 사용자의 파티션 만 제한합니다.

파일이 표시되는지 www-root또는 사용자가 아파치를 실행 ps -aux | grep apache2하는지 ( 확인하려면 실행) 확인하려면 다음 명령을 실행하십시오.

sudo su -l www-data -s /bin/bash

문서 루트에서 파일을 읽으십시오.

파일을 읽을 수 없으면 다음을 확인하십시오.

1) 다른 모든 파일 권한을 설정했습니다

2) 필요한 경우 파일 FollowSymlinks에서 사용 했습니다.conf

3) DocumentRoot를 설정했습니다

3) 모든 사용자를 위해 파티션을 마운트하십시오. /etc/fstabUUID를 통해 파티션 을 편집 하고 지정해야했습니다.

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

그런 다음 노틸러스를 통해 파티션을 마운트 해제하고을 수행하십시오 sudo mount -a. 모든 것이 잘 진행되면 파일이 아래에있는 것 /mnt입니다. 심볼릭 링크를 업데이트하면 좋습니다.


1

내가 항상 이것을 설정하는 가장 좋은 방법은 VirtualMin 이하는 방법입니다.

사용자 및 그룹 "myhome"작성

아파치 사용자를 "myhome"그룹의 구성원으로 만드십시오. 여기에 설명 된 일부 설명과 같은 다른 방법은 아닙니다.

이제 아파치는 / home / myhome / www 외에도 / home / myhome에 대한 읽기 및 실행 액세스 권한을 갖습니다.

"myhome"사용자는 쓰기 권한이 있습니다


나는이 개념을 좋아하지만 그것은 나를 위해 작동하지 않는 것 같습니다. 사용자 www-data가 그룹에 속해 myhome있습니다. 모든 파일 및 디렉토리에는 그룹 쓰기 권한이 있으며에 속해 myhome:myhome있습니다. 나는 아파치를 다시 시작했다. 아파치는 여전히 새로운 파일과 폴더를 쓸 수 없습니다. (www-data : www-data 사용자 / 그룹을 사용하는 PHP 스크립트)
squarecandy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.