Vấn đề về quyền: làm thế nào Apache có thể truy cập các tệp trong thư mục Home của tôi?


33

Tôi biết các quyền của tập tin đã được đề cập ở đây trước đây, nhưng tôi đang cố gắng tìm hiểu khái niệm cho kịch bản của mình.

  • Tôi đã tạo các tập tin trên một bản cài đặt Ubuntu cũ.
  • Ive đã sao chép các tập tin vào bản cài đặt Ubuntu mới của tôi và đặt chúng vào webroot của tôi.
  • Khi tôi cố chạy các tệp (chúng là tệp PHP), tôi gặp lỗi liên quan đến quyền

Trong nỗ lực khắc phục điều này, tôi cho rằng chúng vẫn phải thuộc sở hữu của chủ sở hữu trước đó, vì vậy tôi đã chạy chown -Rtrên thư mục, với tên người dùng của tôi làm đối số, để có quyền sở hữu tất cả các tệp trong thư mục. Cần lưu ý rằng tên người dùng giữa các bản cài đặt Ubuntu mới và cũ là như nhau.

Khi tôi cố chạy lại các tệp, cùng một vấn đề: lỗi 500 do vấn đề về quyền. Bất cứ ai có thể cho tôi biết những bước khác tôi nên làm gì?

Webroot cho cài đặt apache của tôi nằm trong thư mục nhà của tôi. Nếu tôi tạo các tệp mới trong webroot của mình, chúng cũng hoạt động như mong đợi, chỉ có các tệp cũ gây ra sự cố.


Tôi không chắc chắn rằng các quyền của tệp được sao chép khi tệp này, ai đó có thể xác nhận điều đó không? Nếu không, có thể cung cấp các tệp cho một số người dùng khác (hoặc root), sau đó lấy lại chúng không?
Tagger

Ok, tôi đã giải quyết vấn đề của tôi về các tập tin không thực thi, nhưng tôi đã làm điều đó bằng cách đơn giản là chạy chmod -R 777 dirtrên thư mục trong câu hỏi. Tôi không thể giúp suy nghĩ có một cách tốt hơn để làm điều đó mặc dù
richzilla

3
777 quyền trong một tệp sẽ cho phép mọi người viết các tệp của bạn có thể dẫn đến thiệt hại cho các trang hoặc hack của bạn. Bạn nên thử với 755 thường được sử dụng cho các tệp php. Đảm bảo bạn không yêu cầu bật "cho phép thực thi" cho một tệp, trong trường hợp đó bạn có thể chạy chmod [tên tệp] -x. Có thể đạt được thông tin về lệnh chmod bằng cách nhấp vào liên kết tiếp theo: catcode.com/teachmod/chmod_cmd.html
Geppettvs D'Constanzo

Nhật ký lỗi Apache hiển thị gì?
Kees Cook

Câu trả lời:


14

Các thư mục phía trên webroot của bạn phải có bit thực thi được thiết lập để cho phép Apache hạ xuống các thư mục.

Nếu bạn đã webroot của bạn đặt tại /home/user/htdocs, các /, /home, /home/user/home/user/htdocsnên có tập bit thực thi.


Giải pháp trên "hoạt động", nhưng nó không lý tưởng. Nếu bạn đã tạo một thư mục, Apache không thể ghi vào thư mục đó. Điều ngược lại cũng xảy ra.

Điều này có thể được "sửa" bằng cách đặt umask 0007 và tự thêm vào nhóm Apache (dữ liệu www nếu tôi không nhầm), để các tệp và thư mục mới tạo được nhóm có thể ghi được.

Ngoài ra, bạn có thể cài đặt một Apache MPM: Apache2 MPM ITK ( thông tin về cấu hình ) và điều chỉnh cấu hình để Apache chạy dưới người dùng của bạn.


Để được hướng dẫn rõ ràng về cách tích lũy, hãy xem câu trả lời của Marco bên dưới
hobs

2
@hobs Thậm chí tốt hơn, hãy hỏi Ubuntu.com / a / 46371/6969
Lekensteyn

44

Nếu tài liệu máy chủ của bạn nằm trong /home/$USER/public_htmlthư mục, bạn cần chạy

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

để trao quyền sở hữu thư mục DocumentRoot cho người dùng www-datavà nhóm www-data.

Sau đó, bạn có thể thêm mình vào nhóm www-data

sudo adduser $USER www-data

Cuối cùng, bạn cần làm cho thư mục DocumentRoot có thể ghi được bởi chủ sở hữu (người dùng dữ liệu www) và cho chính bạn (như một phần của www-datanhóm):

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

Để thuận tiện, bạn có thể tạo tập lệnh có tên public_html_fix.shvới nội dung:

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

Lưu nó bên trong /home/$USER/binvà làm cho nó thực thi được bằng cách sử dụng:

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

Sau đó, bạn gọi nó bất cứ khi nào bạn cần, từ bất cứ nơi nào trên hệ thống tập tin bạn tình cờ thấy mình như thế này:

public_html_fix.sh

1
làm việc cho tôi ....
Emmanuel Okeke

Câu trả lời chính xác! - Với các ví dụ và thậm chí là một tập lệnh tiện lợi và cách sử dụng / cài đặt Tuyệt vời!
Andre

2
Nếu điều này được thực hiện trên một máy chủ được chia sẻ, làm thế nào để bạn ngăn những người dùng khác trong www-datanhóm đọc tệp của bạn hoặc viết thư cho vấn đề đó?
jozxyqk

Câu trả lời thực sự tuyệt vời ... bạn đã cứu mạng tôi
NullPoiиteя

1
chmod -R 775 /home/$USER/public_htmlthực sự khủng khiếp find /home/$USER/public_html -type d -exec chmod 775 {} \;find /home/$USER/public_html -type f -exec chmod 664 {} \;tốt hơn rất nhiều
iharob

1

Ngoài các tệp chmoding và chỉnh sửa các tệp .ache apache, tôi muốn nói rằng không có gì làm việc cho tôi vì các tệp của tôi nằm trên một phân vùng mà tôi đã tự động gắn kết thông qua nautilus. Điều này giới hạn phân vùng cho người dùng của bạn.

Để kiểm tra xem các tệp của bạn có hiển thị bởi www-roothoặc bất kỳ người dùng nào chạy apache (chạy ps -aux | grep apache2để kiểm tra), hãy chạy lệnh sau:

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

và cố gắng đọc một tập tin từ tài liệu gốc của bạn.

Nếu tập tin không thể đọc được, hãy kiểm tra xem:

1) bạn đã đặt tất cả các quyền tệp khác

2) bạn đã sử dụng FollowSymlinkstrong các .conftập tin của mình nếu cần

3) bạn đã thiết lập DocumentRoot

3) gắn kết phân vùng của bạn cho tất cả người dùng. Tôi đã phải chỉnh sửa /etc/fstabvà chỉ định phân vùng của mình thông qua UUID của nó:

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

Sau đó ngắt kết nối phân vùng của bạn thông qua nautilus và thực hiện a sudo mount -a. Nếu mọi việc suôn sẻ, các tập tin của bạn hiện đang được theo /mnt. Cập nhật liên kết tượng trưng của bạn và bạn tốt để đi.


1

Cách tốt nhất mà tôi đã tìm thấy để luôn thiết lập điều này là cách VirtualMin thực hiện.

tạo người dùng và nhóm "myhome"

Biến người dùng apache thành thành viên của nhóm "myhome". Không phải là cách khác như một số giải thích ở đây mô tả

Vì vậy, bây giờ apache đã đọc và thực thi quyền truy cập vào / home / myhome ngoài / home / myhome / www

Người dùng "myhome" có quyền truy cập ghi


Tôi thích khái niệm này, nhưng nó dường như không hoạt động đối với tôi. Người dùng www-datathuộc nhóm myhome. Tất cả các tệp và thư mục có quyền ghi nhóm và thuộc về myhome:myhome. Tôi khởi động lại apache. Apache vẫn không thể viết các tệp và thư mục mới. (Tập lệnh PHP sử dụng dữ liệu www: người dùng / nhóm dữ liệu www)
squarecandy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.