2008-08-14 11 views
43

Xin lỗi vì câu hỏi cơ bản - Tôi là một nhà phát triển .NET và không có nhiều kinh nghiệm với các thiết lập LAMP.Các quyền thích hợp cho thư mục tải lên bằng PHP/Apache là gì?

Tôi có một trang web PHP sẽ cho phép tải lên một thư mục cụ thể. Tôi đã được cho biết rằng thư mục này cần phải được sở hữu bởi người sử dụng máy chủ web cho quá trình tải lên để làm việc, vì vậy tôi tạo thư mục và sau đó thiết lập quyền như vậy:

chown apache:apache -R uploads/ 
chmod 755 -R uploads/ 

Vấn đề duy nhất bây giờ là người sử dụng FTP không thể sửa đổi tất cả các tệp đã tải lên.

Có cài đặt quyền cho phép tôi vẫn tải tệp lên và sau đó sửa đổi chúng sau này với tư cách người dùng không phải là người dùng máy chủ web không?

Trả lời

36

Bạn có thể tạo một nhóm mới với cả người sử dụng apache và FTP người sử dụng như các thành viên và sau đó làm cho phép trên Tải lên thư mục 775. Điều này sẽ cung cấp cho cả người dùng apache và FTP khả năng ghi vào các tệp trong thư mục nhưng giữ cho mọi người khác sửa đổi chúng.

+2

Đừng quên bạn có thể tránh các số ma thuật bị nguyền rủa bằng cách truy cập 'chmod u + rwX, go + r theFolder'! – Kzqai

+0

đó có thể không phải là những gì anh ấy đề cập vì anh ấy tải lên các tệp theo cách người dùng tải lên tệp. ở đó bạn cần quyền 777 –

+0

thư mục tải lên chỉ nên chứa tệp jpg, gif, v.v. Chắc chắn không, nói rằng, các tập tin php được tải lên bởi một ai đó, hoặc các tập tin shell script. Có cách nào để tránh các máy chủ apache để thực thi các tập tin php trong thư mục tải lên? – Toskan

12

Hoặc ít nhất 766.

  • đọc = 4
  • ghi = 2
  • execute = 1

7 = đọc + viết + thực hiện

6 = đọc + viết

  • số đầu tiên: chủ sở hữu
  • số thứ hai: nhóm
  • số thứ ba: những người dùng khác
+5

Sẽ không 766 vào thư mục cho phép người khác để tải lên các tập tin trên đó và mã độc hại không? –

+0

vô hiệu hóa php/hoặc thực thi tập lệnh khác trong thư mục tải lên của bạn –

0

tôi sẽ bổ sung thêm rằng nếu bạn đang sử dụng SELinux mà bạn cần phải chắc chắn bối cảnh loại là tmp_t Bạn có thể thực hiện điều này bằng cách sử dụng tiện ích chcon

chcon -t tmp_t cập

13

Tôi sẽ đi với câu trả lời của Ryan nếu bạn thực sự muốn làm điều này.

Nói chung trên môi trường * nix, bạn luôn muốn xóa bỏ các quyền ít nhất có thể.

9 lần trong số 10, 755 là sự cho phép lý tưởng cho điều này - vì người dùng duy nhất có khả năng sửa đổi tệp sẽ là máy chủ web. Thay đổi điều này thành 775 với người dùng ftp của bạn trong một nhóm nếu bạn thực sự cần thay đổi điều này.

Vì bạn là người mới đến php bởi nhập học riêng của bạn, đây là một liên kết hữu ích cho việc cải thiện sự an toàn của dịch vụ tải lên của bạn: move_uploaded_file

1

Điều quan trọng là người sử dụng apache và nhóm nên có tối thiểu read truy cập và trong một số trường hợp, truy cập execute. Đối với phần còn lại, bạn có thể cấp quyền truy cập 0.

Đây là cài đặt an toàn nhất.

0

Hãy nhớ cũng CHOWN hoặc chgrp thư mục trang web của bạn. Hãy thử myusername# chown -R myusername:_www uploads

1

Tôi sẽ hỗ trợ ý tưởng tạo nhóm ftp có quyền tải lên. Tuy nhiên, tôi không nghĩ rằng nó là cần thiết để cho phép 775. 7 là viết tắt của đọc, viết, thực hiện. Thông thường bạn muốn cho phép một số nhóm nhất định đọc và viết, nhưng tùy thuộc vào từng trường hợp, việc thực thi có thể không cần thiết.

0

Dựa trên câu trả lời từ @Ryan Ahearn, sau đây là những gì tôi đã làm trên Ubuntu 16,04 để tạo một người dùng front rằng chỉ có giấy phép cho web nginx của dir /var/www/html.

bước:

 
* pre-steps: 
    * basic prepare of server, 
    * create user 'dev' 
     which will be the owner of "/var/www/html", 
    * 
    * install nginx, 
    * 
* 
* create user 'front' 
    sudo useradd -d /home/front -s /bin/bash front 
    sudo passwd front 

    # create home folder, if not exists yet, 
    sudo mkdir /home/front 
    # set owner of new home folder, 
    sudo chown -R front:front /home/front 

    # switch to user, 
    su - front 

    # copy .bashrc, if not exists yet, 
    cp /etc/skel/.bashrc ~front/ 
    cp /etc/skel/.profile ~front/ 

    # enable color, 
    vi ~front/.bashrc 
    # uncomment the line start with "force_color_prompt", 

    # exit user 
    exit 
* 
* add to group 'dev', 
    sudo usermod -a -G dev front 
* change owner of web dir, 
    sudo chown -R dev:dev /var/www 
* change permission of web dir, 
    chmod 775 $(find /var/www/html -type d) 
    chmod 664 $(find /var/www/html -type f) 
* 
* re-login as 'front' 
    to make group take effect, 
* 
* test 
* 
* ok 
*