Làm cách nào để tôi đặt Tài liệu Apache2 khởi động thành một Thư mục chia sẻ VirtualBox của vboxsf (vấn đề quyền?)


17

Tôi thiết lập Ubuntu 11.04 cho máy tính để bàn 32 bit trên VirtualBox VM với một thư mục được chia sẻ với máy chủ. Thư mục dùng chung là

/media/sf_Dev/

Tôi muốn thay đổi Apache2 để trỏ DocumentRootđến thư mục đó, vì vậy tôi đã chỉnh sửa /etc/apache2/sites-available/defaultđể thay thế hai đường dẫn hiện có trong tệp đó thành / media / sf_Dev / thay vì / var / www và nó sẽ không hiển thị index.html.

Khi tôi nhìn vào /varvới ls -ltôi thấy

drwxr-xr-x  2 root root ... www

và khi ls -l /media/tôi nhìn thấy

drwxrwx---  1 root vboxsf ... sf_Dev

và Apache dường như không thấy index.html Tôi đặt trong thư mục đó ( cp /var/www/index.html /media/sf_Dev/iirc)

Tôi cũng đã thử chỉnh sửa envvars để biến nhóm thành vboxsf nhưng tôi nghĩ rằng tôi đã làm sai phần đó.

export APACHE_RUN_GROUP=www-data

đến

export APACHE_RUN_GROUP=vboxsf

Tôi đang làm gì sai, tôi cần làm gì để Apache2 phục vụ các tệp từ thư mục đó? (về mặt kỹ thuật tôi muốn phục vụ các tệp cho apache từ /media/sf_Dev/apache/wwwnhưng tôi chỉ ra từng bước một, vì vậy nếu điều đó giúp bạn ngắn mạch, thì hãy làm như vậy)

Câu trả lời:


22

Có lẽ dễ dàng nhất để thêm nhóm vboxsf như một nhóm bổ sung cho apache.

Ubuntu:

sudo usermod -a -G vboxsf www-data

Fedora:

sudo usermod -a -G vboxsf apache

Điều này làm điều đó cho tôi khi tôi muốn truy cập các thư mục chia sẻ được gắn tự động. Bạn cũng có thể muốn thêm tên người dùng của mình vào nhóm vboxsf để truy cập các tệp.


Nhưng ứng dụng apache có chạy dưới tên người dùng apache không? Tôi nghĩ rằng đã thay đổi>.>
jcolebrand

Bạn đã đúng, tôi đã trộn người dùng apache cho fedora và ubfox. đã chỉnh sửa :)
Fuu

1
Tiết kiệm cho tôi rất nhiều thời gian loay hoay với việc gắn thủ công .. cảm ơn!
xorinzor

Giải pháp này đã sửa nó cho tôi trên Ubuntu 15. Rất cám ơn!
Ian Lewis

3

Có vẻ như một vấn đề quyền. Bạn sẽ cần đọc và thực thi quyền đối /media/sf_Dev/với "khác" (nhóm bit quyền thứ ba, hiện không có quyền hoặc ---).

Vì vậy, bạn sẽ cần chạy lệnh này (vì là Ubuntu, hãy lưu ý sudo):

sudo chmod 775 /media/sf_Dev/

Điều đó sẽ thêm đọc và thực thi cho "khác" và để lại toàn quyền cho chủ sở hữu và nhóm.

Đồng thời đảm bảo rằng tệp chỉ mục thực sự tồn tại trong / media / sf_Dev /. (Tôi sẽ cho rằng bạn đã quên sudo trong lệnh cp và bạn không chạy bằng root.)


1
Ahhh, nhưng khi tôi làm điều đó nó không tạo ra những thay đổi tôi cần. Một cái gì đó về vboxfs không cho phép những thay đổi đó được thực hiện (ví dụ: như NFTS) ... oooh, có thể là vấn đề, các tệp ban đầu được lưu trữ trên NTFS (vì đó là máy chủ lưu trữ windows) vì vậy tôi không nghĩ rằng tôi có thể làm điều đó ~ ~ Tôi đã quên xem lỗi, trước khi hỏi. Tôi sẽ kiểm tra tối nay. Tuy nhiên, giả sử đó là lỗi cấp phép.
jcolebrand

@jcolebrand Quy tắc số 1 về khắc phục sự cố: nó đã được cắm chưa? Đừng bận tâm rằng tôi đang nghĩ về sự hữu ích lâu dài của câu trả lời và tôi biết bạn là một anh chàng DB và .NET. : P
George Marian

@jcolebrand Vì vậy, câu hỏi ngớ ngẩn: Bạn đã khởi động lại apache? sudo apache2ctl restart
George Marian

hahahahaha, đây là lý do tại sao tôi cần sự giúp đỡ, tôi là một anh chàng db và .net;) ... vâng, tôi thực sự rơi vào sudo sumột khi nó bắt đầu trở thành một kẻ yếu đuối để tôi có thể vào tất cả các thư mục và xem những gì đã bị "phá vỡ" ... Tôi sẽ làm những gì Josh đề xuất sau với tệp PHP.
jcolebrand

1
Có thể là vboxsf không hỗ trợ cài đặt quyền cho thư mục gốc của hệ thống tệp và nó có thể cung cấp các tùy chọn chế độ, uid và gid để đặt quyền cho tệp trên toàn cầu.
billc.cn

2

Bạn đã không nói lỗi cụ thể là gì, chỉ

và Apache dường như không thấy index.html Tôi đặt trong thư mục đó

Các lỗi cụ thể sẽ giúp. Bạn có thể gửi tệp này trong Apache error_log, thường nằm /var/log/apache2/error.logdưới Ubunt, nhưng có thể được định cấu hình thông qua ErrorLogChỉ thị trong<VirtualHost>

Không có lỗi thực tế, tôi cho rằng George Marian là chính xác và đó là lỗi quyền. Bạn có thể kiểm tra xem nhóm Apache nào đang chạy bằng cách sử dụng:

ps -o pid,group -o atime,comm=CMD awx | grep apache

Hãy thử các quyền cho phép /media/sf_Dev/như ông nói.

Tôi nghĩ rằng bạn có thể xử lý việc này tốt hơn bằng chỉ thị Bí danh vì điều đó sẽ cho phép bạn chỉ thực hiện một số phần nhất định trong điểm DocumentRoot của mình tới các vị trí bên ngoài:

Alias /info /media/sf_Dev
<Directory /media/sf_Dev >
  Order allow,deny
  Allow from all
</Directory>

EDIT: Nếu máy chủ Apache có mod_php(không phải FastCGI PHP) và không sử dụng suexec, bạn có thể xác định xem Apache có chạy theo GID (ID nhóm) phù hợp với đoạn trích PHP sau không:

<?php

var_dump(posix_getegid());

Hãy chắc chắn rằng trả về GID giống như vboxsf. (Bạn có thể tìm thấy GID cho vboxsf trong /etc/groups)


Tôi đã quên nhìn vào errorlog trước khi hỏi. Tôi sẽ kiểm tra tối nay. Tuy nhiên, giả sử đó là lỗi cấp phép. Xem phản hồi của tôi với George ở trên
jcolebrand

ĐỒNG Ý. Sau đó, chúng ta nên tập trung vào việc đưa Apache chạy như GID vboxsf. Bạn có thể chỉnh sửa và đăng các phần có liên quan nơi bạn đã thay đổi Group?
Josh

Tôi đã chỉnh sửa một dòng trong envvars, và nó cho biết nhóm, nhưng tôi không nhìn vào hộp ngay bây giờ.
jcolebrand

0

Nếu bạn đã cấu hình thư mục chia sẻ sẽ được tự động gắn kết. Sau đó, trước tiên bạn cần phải vô hiệu hóa tương tự và gắn thư mục chia sẻ theo cách thủ công. Nếu bạn cần tự động đếm nó mỗi khi bạn khởi động vm, bạn cần thêm mục tương ứng bên trong / etc / fstab của bạn. (Dường như có một số vấn đề về việc gắn thư mục chia sẻ vbox thông qua fstab. Vì vậy, việc thêm lệnh được đề cập bên dưới bên trong /etc/rc.local đã giúp tôi gắn kết khi bắt đầu).

Tải thư mục dùng chung với người dùng / nhóm chính xác

Theo như tôi có thể nói, lỗi này là do chủ sở hữu và nhóm của thư mục chia sẻ. Apache hy vọng các tệp sẽ hiển thị thuộc về dữ liệu www của nhóm. Tuy nhiên, theo mặc định, thư mục dùng chung trong VirtualBox thuộc về người dùng vboxsf. Chúng tôi sẽ thêm người dùng này vào nhóm dữ liệu www. Để làm như vậy, chỉnh sửa các thuộc tính nhóm trên khách:

sudo usermod -a -G vboxsf www-data

Bây giờ chúng ta sẽ gắn thư mục dùng chung và gán nó cho người dùng và nhóm dữ liệu www. Để kiểm tra id người dùng và nhóm, bạn có thể xem tệp / etc / passwd trên máy khách (cat / etc / passwd | grep 'www-data'). Trên HĐH dựa trên Debian, cả hai id thường được đặt thành giá trị 33. Vì vậy, chỉ cần đưa ra lệnh sau cho khách:

mount -t vboxsf -o rw,uid=33,gid=33 website /media/sf_website

Lưu ý rằng trang web là tên của thư mục dùng chung (như được minh họa trong ảnh chụp màn hình ở trên) và / media / sf_website là nơi thư mục sẽ được gắn kết.

Để biết thêm chi tiết, hãy tham khảo liên kết này http://jimmybonney.com/articles/configure_virtualbox_spl_folder_apache_virtual_host/

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.