Apache symlinked đến thư mục chính - Lỗi quyền


15

Tôi có một vài vấn đề liên /var/www/kết với một Webrootthư mục mới trong thư mục nhà của tôi. Tôi nghĩ rằng những điều này xuất phát từ sự thiếu hiểu biết của tôi về quyền linux.

Theo như tôi biết, symlink sẽ có dạng thư mục bạn muốn liên kết và thư mục bạn muốn được liên kết, vì vậy trong trường hợp của tôi, tôi đã chạy:

sudo ln -s ~/Webroot/* /var/www/

Điều này đã làm việc, nếu tôi chạy lstrên /var/www/tôi có thể thấy tất cả các tập tin trong Webrootthư mục của tôi .

Bất cứ khi nào tôi cố chạy một tệp trong Webrootthư mục của mình , tôi gặp lỗi quyền 403, có phải vì các tệp trong thư mục Webroot của tôi được tạo bởi tôi và phiên bản apache đang được chạy dưới dạng dữ liệu www?

Nếu đây là trường hợp, điều này có nghĩa là tôi cần thay đổi quyền trên mỗi tệp tôi tạo để chạy nó?

Trước đây tôi đã chạy một cá thể apache cục bộ của tôi, việc trỏ thư mục gốc của vhost mặc định của tôi vào Webrootthư mục, trong trường hợp này tôi không cần thay đổi bất kỳ quyền nào. Bất kỳ trợ giúp sẽ được đánh giá cao.


bạn đã kiểm tra để đảm bảo apache không được cấu hình để không theo symlink .... tôi đã gặp vấn đề này một lần. a thread liên quan trên diễn đàn khác có thể có mặt ở đây: linuxforums.org/forum/servers/...
RobotHumans

Câu trả lời:


15

Đây không phải là một thực hành tốt, tôi đồng ý với Weboide. Nhưng có một cách đơn giản để đạt được mục tiêu này.

1). kích hoạt mô-đun người dùng apache.

sudo  a2enmod userdir

điều này sẽ kích hoạt mô-đun người dùng apache. Bây giờ bạn có thể đặt nội dung của trang web vào ~/Webroot/hoặc bất cứ điều gì trong thư mục nhà của bạn.

Lưu ý: Thư mục mặc định là ~/public_html

2). Thực hiện các thay đổi cần thiết để /etc/apache2/mods-enabled/userdir.conf.

3). Khởi động lại apache

sudo /etc/init.d/apache2 restart

Bây giờ bạn có thể truy cập trang web bằng cách điều hướng trình duyệt của mình đến tên người dùng http: // ip-address / ~ . Bạn cũng có thể thiết lập một máy chủ ảo cho trang web này.

Nếu bạn đang muốn chạy các tệp php, bạn cần thực hiện thêm một bước nữa

chỉnh sửa /etc/apache2/mods-enabled/php5.confvà nhận xét các dòng sau:

 <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>

Sau đó khởi động lại apache.

Đó là nó. Bạn xong việc rồi.

Tham chiếu: https: //wiki.ubfox.com/UserDirectoryPHP

Hi vọng điêu nay co ich. Nếu bạn gặp bất kỳ khó khăn nào, vui lòng gửi nó ở đây.


7

Đây không phải là một thực hành tốt để đạt được những gì bạn muốn.

Nếu bạn đang sử dụng PHP, bạn có thể muốn xem suexec , suphp hoặc php-fpmfastcgi .


Bạn đã đúng về vấn đề của mình, đây là vấn đề cấp phép trong thực tế là các Webroottệp của bạn thuộc sở hữu của một người dùng khác www-data.

Đây là một giải pháp không tồi để giải quyết vấn đề của bạn. Lưu ý rằng bạn có thể sẽ cần phải sử dụng sudo hoặc đăng nhập với quyền root. Hãy chắc chắn rằng bạn hiểu đầy đủ tất cả các lệnh bạn sẽ thực hiện !!

Thay đổi Webrootthư mục của bạn và các thư mục con và tệp để đặt quyền sở hữu nhóm www-datavà đặt quyền thích hợp:

# set the group ownership to be www-data
chgrp -R www-data /path/to/home/Webroot/
# make sure www-data has read & write permissions (change it to `g=r` if you want to only give read-only access)
chmod -vR g=rw /path/to/home/Webroot/
# make sure www-data can access the folders by adding the group execute bit field to directories
find /path/to/home/Webroot/ -type d -print0 | xargs -0p chmod -v g+x

Chỉnh sửa: Lưu ý rằng bạn chắc chắn sẽ cần phải chạy lại các lệnh đó nếu bạn thêm tệp / thư mục bằng tài khoản người dùng thông thường.


2

Tôi đã làm gần giống với Debian Lenny, nhưng tôi đã thay đổi sang chế độ không hax, tôi đã cấu hình apache chính xác. Nhưng với symlink:

$ ll /home
drwxr-xr-x  8 root   root   4,0K nov 14 14.59 .
drwxrwxrwx  7 root   root   4,0K nov 14 21.24 www -> /var/www

Tôi nghĩ bạn nên kiểm tra permisson của ~~ / Webroot , tôi nghĩ thư mục của bạn (~) được đọc bảo vệ, ý tôi là, bạn phải chạy cái này:

$ ls -la /home

Để đặt permissinons đúng, sử dụng:

# chmod 755 /home
# chmod 755 /home/<YOURNAME>
# chown <YOURNAME>:www-data -R /home/<YOURNAME>/Webroot
# chmod 775 -R /home/<YOURNAME>/Webroot

Tôi nghĩ rằng, nó sẽ giúp, nhưng cho tôi thêm thông tin về điều này. Tôi đề nghị bạn, để lấy Webroot từ thư mục của bạn, ví dụ. đến / nhà như tôi , bởi vì nó có thể là vấn đề an ninh.

"#" Có nghĩa là permisson gốc , ví dụ. viết sudo trước các lệnh; "$" có nghĩa là permisson người dùng đơn


0

Bạn phải kiểm tra quyền không chỉ về điểm đến của bạn, mà còn cả cha mẹ của nó.


Tại sao? Đây có phải là giới hạn Apache hay giới hạn hệ thống tập tin?
Flimm

Lấy làm tiếc. Tôi đã không kiểm tra thông tin, nó chỉ dựa trên kinh nghiệm cá nhân.
zVictor

0

Tôi đã phải đối mặt với vấn đề này. Nhưng tôi không thích ý tưởng thay đổi nhóm thư mục nhà của mình thành dữ liệu www. Vấn đề này có thể được giải quyết đơn giản bằng cách sửa đổi tệp cấu hình cho virtualhost. Đơn giản chỉ cần cấu hình thẻ Thư mục để bao gồm những

<Directory "your directory here">
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

Các Require all grantedlà một tính năng mới Tôi đoán; có giá trị mặc định là denied.

Xem trang này để tham khảo: http://httpd.apache.org/docs/civerse/mod/core.html#directory

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.