Các thực tiễn được đề xuất liên quan đến quyền và thư mục Joomla và quyền sở hữu trên các hệ thống linux?


26

Trước đây, tôi thường gặp rắc rối với quyền và quyền sở hữu các tệp / thư mục Joomla trên các hệ thống linux.

Vấn đề bao gồm

  • Không thể chuyển tệp đến máy chủ bằng các chương trình như WinSCP.
  • Không thể cài đặt phần mở rộng Joomla, plugin, v.v.
  • Các tập tin và thư mục không an toàn do các quyền và thiết lập quyền sở hữu nguy hiểm.

Các thực tiễn tốt nhất được đề xuất để thiết lập quyền và quyền sở hữu trong Joomla trên các hệ thống linux là gì?

Câu trả lời:


22

Có một vài nguyên nhân tiềm ẩn cho sự cố cấp phép tệp và thư mục trên máy chủ Linux.

1. Quyền và tệp

Kiểm tra quyền truy cập thư mục được đặt thành 0755 và quyền truy cập tệp được đặt thành 0644. Lưu ý rằng quyền truy cập tệp và thư mục có thể được đặt lại thành các cài đặt bảo mật tiêu chuẩn này trên cơ sở toàn bộ trang web bằng cách sử dụng Công cụ quản trị Akeeba miễn phí hoặc phiên bản trả phí.

2. Tham số PHP

Kiểm tra tham số upload_max_filesize trong tab Thông tin PHP trong Thông tin hệ thống là đủ. Bạn thường có thể ghi đè cài đặt mặc định trong môi trường lưu trữ được chia sẻ thông qua cài đặt PHP trong cPanel hoặc php.initệp tùy chỉnh .

3. Đường dẫn không chính xác trong cấu hình.php

Bạn có thể có đường dẫn không chính xác được chỉ định cho các thư mục tmp và nhật ký. Chúng được chỉ định trong Cấu hình hệ thống hoặc có thể được cập nhật trực tiếp trong tệp configure.php nếu bạn thoải mái chỉnh sửa trực tiếp các tệp hệ thống. Nếu bạn không chắc chắn đường dẫn sẽ là gì, hãy tạo và tải lên một tệp whereami.php(hoặc tương tự) vào thư mục gốc của trang web của bạn với nội dung sau:

<?php
  print 'Current folder is ' . dirname(__FILE__);
?>

Duyệt để [mywebsite].com/whereami.phpxem đường dẫn đến thư mục gốc.

Khi bạn có đường dẫn chính xác, hãy nhớ xóa whereami.phptệp.

4. Trình xử lý tệp PHP không phù hợp

Lưu trữ web của bạn có thể được cấu hình với trình xử lý tệp PHP mặc định nhưng lý tưởng nhất là sử dụng suPHP hoặc FastCGI hoặc tương tự để Joomla có thể tải lên và thực thi các tệp bằng quyền truy cập tệp an toàn.

Bạn có thể thấy trình xử lý PHP đang được sử dụng tại System -> System Information -> WebServer to PHP Interface.

Có một bài viết hay về giá trị tương đối của trình xử lý tệp PHP tại: http://boomshadow.net/tech/php-handlers

Trong môi trường lưu trữ được chia sẻ, bạn thường không có quyền truy cập để thay đổi trình xử lý tệp PHP nào được bật nhưng công ty lưu trữ web của bạn có thể thay đổi điều này cho bạn.

Đôi khi, khi quyền, tệp và thư mục được thay đổi thành 0777, nhưng điều này khiến trang web của bạn ở trạng thái dễ bị tổn thương và thường phải tránh quyền 0777.

Nếu công ty lưu trữ web của bạn không thể kích hoạt suPHP hoặc FastCGI, thì lựa chọn duy nhất khác có thể là tìm một công ty lưu trữ web mới.

5. Dung lượng đĩa

Kiểm tra bạn đã không vượt quá dung lượng ổ đĩa của bạn.

KIỂM TRA XỬ LÝ SỰ CỐ

Các thực tiễn tốt nhất được đề xuất để thiết lập quyền và quyền sở hữu trong Joomla trên các hệ thống linux là gì?

Xem 1 và 4.

Không thể chuyển tệp đến máy chủ bằng các chương trình như WinSCP.

Xem 1, 2, có thể 4 và 5.

Không thể cài đặt phần mở rộng Joomla, plugin, v.v.

Xem 1, 2, 3, 4 và 5.

Các tập tin và thư mục không an toàn do các quyền và thiết lập quyền sở hữu nguy hiểm.

Xem 1 và 4.


1
Trong trường hợp của tôi, tôi nghĩ rằng các trình xử lý PHP là một phần lớn của vấn đề.
TryHarder

1
+1 Câu trả lời của bạn không thực sự khắc phục sự cố của tôi, nhưng tôi đã có cảm hứng để kiểm tra cài đặt PHP của máy chủ - Chế độ an toàn và hóa ra nó đã được bật. Vì vậy, bằng cách tắt nó là giải pháp. Vì vậy, đối với những độc giả tương lai nếu không có điều nào ở trên khắc phục được, hãy kiểm tra Chế độ an toàn của bạn :)
Mohammed Joraid

12

Vui lòng kiểm tra các mức cấp phép, nó phải là 644 và 755 cho các tệp và thư mục tương ứng.

Nhiều lần mức độ cho phép chỉ là tốt, ngay cả khi một số vấn đề phải đối mặt. Điều đó có nghĩa là bạn sẽ phải kiểm tra quyền sở hữu và nhóm các tệp và thư mục cụ thể . Thông thường, nhóm và quyền sở hữu có thể được thay đổi thành dữ liệu www cho apache (được sử dụng trong các máy chủ web dựa trên Ubuntu).

Vui lòng kiểm tra tài liệu Joomla thú vị này dựa trên việc xác minh các quyền của tệp.


Joomla thường thuộc nhóm dữ liệu www?
TryHarder

1
Cùng với câu trả lời của Shyam, chúng tôi sử dụng mô-đun SuPHP Apache . Chúng tôi thấy rằng khi tiện ích mở rộng được cài đặt, chúng tôi không thể sửa đổi các tệp đó qua FTP và ngược lại (vấn đề sở hữu tệp). SuPHP đã sửa lỗi này cho chúng tôi bằng cách đảm bảo rằng các tập lệnh PHP chạy với sự cho phép của chủ sở hữu của chúng.
Zachary Draper

1
quá trình apache được chạy trong 'www-data' một nhóm unix. Nó không chỉ j Joomla, tất cả các ứng dụng dựa trên apache.
Shyam

Có thể phát triển và chạy tập lệnh shell để tự động sửa tất cả các quyền của tập tin không?
NivF007

1
Vâng. gist.github.com/ssv445/11204300 Bạn có thể chạy tập lệnh trong cron.
Shyam

8

Một giải pháp dễ dàng cho tôi là thường để PHP chạy ở chế độ (Fast-) CGI và đặt quyền sở hữu thư mục Joomla cho người dùng FTP. Vì vậy, bạn sẽ có thể tải lên và ghi đè lên các tệp qua FTP và Joomla cũng có thể ghi tệp.

Một cách để làm điều này trên môi trường lưu trữ được chia sẻ (nếu được phép), là thêm một cái gì đó như thế này vào tệp .htaccess của bạn:

AddHandler php53-cgi .php

Cũng xem một cái nhìn tổng quan về các chế độ khác nhau .


7

Quyền phải là 644 và 755 như được giải thích bởi Shyam.

Trong Joomla bạn có thể tránh tất cả các vấn đề bạn đã đề cập, với các phương pháp sau.

Không thể chuyển tệp đến máy chủ bằng các chương trình như WinSCP.

  • Điều này có thể xảy ra do sự cho phép của (444) như Joomla configuration.phpcó quyền này mà nó không cho phép theo mặc định (để bảo mật).
  • Một tình huống khác cho cùng một lỗi này là khi bạn chuyển một trang web hoặc thư mục từ máy chủ này sang máy chủ khác.

Không thể cài đặt phần mở rộng Joomla, plugin, v.v.

  • Điều này sẽ xảy ra do sự cho temp/logphép của thư mục. (Nó yêu cầu 755)

  • Hoặc một lý do khác là temp/logđường dẫn bị sai trongconfiguration.php

Các tập tin và thư mục không an toàn do các quyền và thiết lập quyền sở hữu nguy hiểm.

  • Đây là điều quan trọng nhất mà Joomla luôn khuyên không nên sử dụng 777 cho tệp và thư mục nếu bạn không biết điều này .

Hy vọng nó sẽ giúp ..


7

Quyền phải là 644 và 755 như được giải thích bởi Shyam.

Các vấn đề bạn đang gặp phải rất có thể liên quan đến cách thiết lập máy chủ của bạn. Hầu hết thời gian điều này xảy ra trên các máy chủ được chia sẻ nơi Apache chạy dưới một người dùng khác với tài khoản FTP của bạn. Vì bạn thường tải lên Joomla bằng FTP, Apache không phải là chủ sở hữu của tệp và do đó không có quyền cần thiết để thay đổi tệp.

Có một chế độ FTP trong Joomla cho phép bạn bỏ qua vấn đề này. Bạn có thể kích hoạt nó trong cấu hình toàn cầu Joomla. Sau đó, nó sẽ thực hiện tất cả các truy cập tệp bằng người dùng FTP thay vì người dùng Apache thông thường.

Tuy nhiên, cách tốt hơn là yêu cầu chủ nhà của bạn khắc phục sự cố. Họ có thể thiết lập PHP (Apache) để chạy dưới một người dùng đặc biệt, trong trường hợp đó phải là người dùng FTP của bạn. Sau đó mọi thứ sẽ hoạt động tốt.


Người dùng / nhóm là câu trả lời, như bạn đã nói có người dùng đặc biệt cho PHP giải quyết vấn đề này đặc biệt nếu nó trùng với người dùng FTP.
jackJoe

5

Có, các quyền nên là 644 và 755 như Shyam giải thích , nhưng các áp phích khác quên đề cập rằng đây là nếu tệp được sở hữu bởi máy chủ web của bạn và nhóm là nhóm bạn thuộc về.

Chẳng hạn, trong FileZilla, bạn sẽ thấy các quyền như thế này:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM      www-data myGroup 

Các quyền drwxr-xr-x là 755 (chỉ cần bỏ qua dr hàng đầu để nó là wxr-xr-x). Quyền đọc có giá trị 4, Quyền ghi có giá trị 2 và quyền thực thi có giá trị 1 .. vì vậy, tất cả đều có tối đa 7 và đó là những gì chủ sở hữu của tệp này có. Nhóm đã đọc và thực thi quyền nhưng không ghi, vì vậy họ có 5 và mọi người cũng có 5 .. tạo quyền 755.

754 sẽ là chủ sở hữu đã đọc, viết, thực hiện. Nhóm đã đọc và thực thi và mọi người chỉ có quyền đọc.

Trong ví dụ trên, bạn có thể thấy rằng chủ sở hữu tệp là dữ liệu www (là nhóm máy chủ web mặc định cho nhiều máy chủ Apache) và Nhóm là nhóm mygroup, là nhóm (quản trị viên) mà tôi thuộc về.

Số đầu tiên là quyền của chủ sở hữu, số thứ hai là quyền của nhóm và số thứ ba là quyền của mọi người. Rõ ràng, bạn phải cẩn thận để cung cấp cho máy chủ web các quyền cần thiết ... và đảm bảo rằng các tệp cần được khóa không thể được ghi hoặc thực hiện bởi bất kỳ ai (số thứ ba). Dưới đây là những con số có nghĩa là gì:

Giả sử Máy chủ web sở hữu các tệp, quản trị viên của bạn nằm trong nhóm và tất nhiên, mọi người đều là số thứ ba.

644: Mọi người đều có thể đọc được các tệp có quyền truy cập thành 644 và chỉ có thể ghi được bởi chủ sở hữu tệp / thư mục.

755: Các tệp có quyền được đặt thành 755 đều có thể đọc và thực thi được bởi mọi người, nhưng chỉ có thể ghi bởi chủ sở hữu tệp / thư mục.

777: Các tệp có quyền được đặt thành 777 đều có thể đọc, ghi và thực thi được bởi mọi người. Không sử dụng bộ quyền này, vì lý do bảo mật, trên máy chủ web của bạn trừ khi thực sự cần thiết và chỉ tạm thời. Đó là một thảm họa đang chờ xảy ra, đặc biệt là nếu một thư mục có các quyền đó .. điều đó có nghĩa là bất kỳ ai cũng có thể tải lên các tệp và thực thi chúng.

Dưới đây là các lệnh Linux để thiết lập Joomla! quyền được đề xuất từ ​​dòng lệnh. Quyền sử dụng tệp Joomla được đề xuất

Set ownership:   sudo chown -R www-data:myName /path/to/your/domain.com
Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 755 {} \;
Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 644 {} \;

LƯU Ý - nhiều người sẽ chỉ cho bạn các lệnh này mà không có đường dẫn, nhưng tôi thích LUÔN LUÔN sử dụng đường dẫn hoàn chỉnh, bởi vì nếu bạn quên thay đổi thư mục thành Joomla gốc! thư mục cài đặt và chạy chúng mà không có đường dẫn, bạn vừa thay đổi quyền cho mọi tệp và thư mục trong thư mục trên cùng đó và tạo ra một mớ hỗn độn lớn.

Sau khi bạn chạy các lệnh này, bạn sẽ cần sửa quyền cho bất kỳ thư mục nào cần nhiều quyền hơn ... ví dụ: người dùng tải lên hình ảnh, v.v.

NẾU BẠN CHỈ SỬ DỤNG JOOMLA! giao diện và bạn không có quyền truy cập quản trị viên hoặc FTP vào máy chủ, sau đó SỬ DỤNG QUYỀN SỞ HỮU VÀ GIẤY PHÉP TRÊN.

DỪNG Ở ĐÂY NẾU BẠN LÀ NGƯỜI YÊU THÍCH .. Dưới đây chỉ dành cho những người thực sự hiểu quyền và quyền sở hữu làm gì.

Tuy nhiên, tôi thấy việc sở hữu và cấp phép theo cách đó rất không thuận lợi vì tôi thích sử dụng FileZilla và dòng lệnh Terminal trong hầu hết thời gian và tôi tải lên rất nhiều tệp theo cách thủ công. Nhưng tôi không thể ghi đè lên bất kỳ tệp nào vì tôi không sở hữu chúng và tôi không có quyền để viết. Tôi có thể đăng nhập FileZilla trong tài khoản máy chủ web, NHƯNG ... Tôi muốn FileZilla đăng nhập dưới tài khoản của mình, vì vậy tôi cũng có thể duyệt các thư mục khác, không chỉ các tệp mà máy chủ web có quyền truy cập vào ... SO ... Tôi thay đổi quyền sở hữu và quyền này:

Filename      Size   Filetype  Last Modified          Permissions   Owner/Group
somefile.txt  11KB   txt file  2014-04-23 3:43:00 AM  drwxr-xr-x    myName www-data

Tôi biến mình thành chủ sở hữu và đặt máy chủ web vào Nhóm ... và tôi thay đổi quyền cho thư mục thành 775 và cho các tệp thành 664. Làm cho cuộc sống của tôi dễ dàng hơn nhiều ... nhưng tôi không khuyên dùng nó cho tất cả mọi người.

Nếu bạn làm theo cách của tôi, đây là các lệnh:

 Set ownership:   sudo chown -R myName:www-data /path/to/your/domain.com
 Set Directories: sudo find /path/to/your/domain.com -type d -exec chmod 775 {} \;
 Set files :      sudo find /path/to/your/domain.com -type f -exec chmod 664 {} \;  

"Drwxr-xr-x là 755" - đây sẽ là 751 (thiếu đọc perm cho công chúng), không phải 755. (Mặc dù 755 sẽ "bình thường" hơn cho các thư mục.)
MrWhite

4

Các câu trả lời khác cung cấp một lời giải thích tốt về những gì nên được thực hiện, tôi chỉ muốn thêm một tập lệnh để sửa các quyền nếu bạn đã tải lên một thành phần và không thể truy cập các tệp bằng ftp.

Trong trường hợp này, tôi sẽ tải tệp này lên fix.phpmáy chủ FTP và mở nó trong trình duyệt:http://example.com/fix.php

<?php
file_fix_directory(dirname(__FILE__));

function file_fix_directory($dir, $nomask = array('.', '..')) {
  if (is_dir($dir)) {
     // Try to make each directory world writable.
     if (@chmod($dir, 0777)) {
       echo "<p>Made writable: " . $dir . "</p>";
     }
  }
  if (is_dir($dir) && $handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
      if (!in_array($file, $nomask) && $file[0] != '.') {
        if (is_dir("$dir/$file")) {
          // Recurse into subdirectories
          file_fix_directory("$dir/$file", $nomask);
        }
        else {
          $filename = "$dir/$file";
            // Try to make each file world writable.
            if (@chmod($filename, 0666)) {
              echo "<p>Made writable: " . $filename . "</p>";
            }
        }
      }
    }

    closedir($handle);
  }

}

Tập lệnh này đặt tất cả các quyền của tệp thành 666 và tất cả các thư mục thành 777. Thế giới có thể ghi không phải là bộ quyền tốt nhất cho máy chủ dùng chung nhưng bạn sẽ có thể truy cập lại tệp của mình và sau đó có thể đặt nó thành giá trị chính xác bằng FTP.


1

Đi dự tiệc muộn. Tôi đến đây tìm kiếm cũng như những nơi khác để có một hướng dẫn dứt khoát về những thư mục cần có thể ghi cho j Joomla.

Xin lỗi mọi người là điềm báo của tin xấu.

Lời khuyên để sử dụng quyền 755 cho tất cả các thư mục và 644 cho tất cả các thư mục ít nhất là vô trách nhiệm .

Làm cho tất cả các thư mục và chủ sở hữu tệp của bạn có thể ghi là tốt miễn là chủ sở hữu không phải là máy chủ web (apache et al).

Tôi biết đây là thực hành được khuyến nghị phổ biến nhưng tôi có thể đảm bảo với bạn rằng nó không phải là thực hành tốt. Phần mềm cuối cùng bạn muốn cung cấp khả năng ghi vào các thư mục là chính máy chủ web. Đó là máy chủ web được tin tặc sử dụng để tận dụng lợi thế của việc khai thác chưa được vá (hoặc thậm chí được tìm thấy).

Bạn có nghĩ .htaccess sẽ cứu Kevin của bạn không? Hãy quên nó đi vì bạn đã cho phép máy chủ web ghi quyền truy cập, những người bạn hacker thân yêu của chúng tôi có thể tạo các tệp .htaccess của riêng họ cung cấp cho họ bất kỳ quyền nào họ muốn! như Oh Tôi không biết Umm tạo tập tin .jpg được thực thi bởi máy chủ. Và bạn nghĩ rằng việc bảo vệ chống lại việc thực thi .php sẽ bao trùm A. của bạn

Nhưng hãy chắc chắn rằng chỉ có các thư mục yêu cầu truy cập ghi thực sự có nó. 755 và 644 cho các thư mục sau.

public_html/images
public_html/cache
public_html/tmp

Và đảm bảo rằng bạn TẮT các tệp .htaccess bằng AllowOveride không cho tất cả các thư mục có thể ghi (như các thư mục ở trên)

Đối với những người bạn chia sẻ lưu trữ may mắn vì đây là yếu tố cấu hình bạn không thể kiểm soát.

Đừng nghĩ làm cho tệp .htaccess chỉ đọc sẽ giúp ích. Nếu bạn bè hacker của chúng tôi có thể tạo một thư mục mới (họ có thể) thì họ có thể tạo .htaccess của riêng họ.

Đối với những người bạn đang chạy chia sẻ lưu trữ cho tất cả những gì thiêng liêng, xin vui lòng nhận được manh mối về bảo mật.

Nếu bạn không hiểu về bảo mật, hãy thoát khỏi công việc lưu trữ mà bạn đang làm cho nó trở nên khó khăn với phần còn lại của chúng tôi.

Bây giờ trở lại tìm kiếm của tôi cho hướng dẫn dứt khoát trên các thư mục cần truy cập ghi ...


Cảm ơn Chris nhưng có lẽ tôi sẽ gắn bó với các quyền của tệp 755 và 644 tiêu chuẩn trong khi điều này được đề xuất bởi trang web chính thức của Joomla và các chuyên gia bảo mật như Sucuri: docs.j Joomla.org/Security_and_Performance_FAQs blog.sucuri.net/2015/09/ Tiết
kiệm

Vâng, tôi biết đó là "đề xuất" nhưng một khi bạn đã bị khai thác và tìm ra lý do tại sao bạn bị khai thác, tôi có thể đảm bảo với bạn rằng bạn ném "khuyến nghị" ra khỏi cửa sổ và bắt đầu lại từ đầu. Các khuyến nghị là con đường ít kháng cự nhất. Không an toàn nhất.
DeveloperChris

Các bước từ 1 đến 10 của danh sách "Giữ an toàn cho trang web Joomla" tại j Joomla.stackexchange.com/a/180/120 cùng với các quyền của tệp tiêu chuẩn đã hoạt động tốt cho 50 trang web mà tôi đang tìm kiếm vài năm qua. Mileage của bạn có thể thay đổi, tất nhiên.
Neil Robertson

@NeilRobertson Tôi đồng ý với danh sách đó nhưng nếu có một khai thác không bị mắc kẹt bởi điều đó, thì cách phòng thủ cuối cùng của bạn là không cấp quyền ghi cho máy chủ web (apache et al). Nhân tiện, đó không phải là một lời khuyên cụ thể. Ngoài ra hầu hết mọi người không thể thực hiện nhiều khuyến nghị trong danh sách đó. Họ chỉ đơn giản là không có tài nguyên hoặc đang sử dụng lưu trữ rẻ hơn (không phải rẻ nhất).
DeveloperChris
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.