Apache php không thể ghi vào tập tin
keohbirne Bài viết. 3Đã tham gia. 2016/01/20 15. 24. 16
bởi keohbirne » 2016/01/20 15. 31. 41 Xin chào, vì vậy - tôi cố gắng cài đặt hệ thống theo dõi sự cố trên CentOS 7 bằng httpd, mariadb và php5. Bây giờ mọi thứ đã ổn - tài liệu html có thể được hiển thị, phpinfo được hiển thị và có thể cài đặt wordpress. tôi nghĩ ok - đúng vậy - nhưng khi tôi cố gắng cài đặt osticket hoặc itop thì có vấn đề. php/apache không thể tạo tệp. Người dùng apache là chủ sở hữu của toàn bộ thư mục /var đệ quy và quyền là 777. nó khá bực bội và tôi đang cố gắng tìm giải pháp trong 5 giờ qua - nó thực sự rất bực bội. đối với centos pro´s, đây có thể là một vấn đề ngoài lề tôi đã cố gắng tắt selinux - nhưng bây giờ centos dường như bị lỗi. nếu có bất kỳ trợ giúp nào, xin cảm ơn trước
bởi TrevorH » 2016/01/20 15. 58. 31 Thành thật mà nói, với tất cả những thứ đó, tôi sẽ xóa sạch hệ thống của bạn và bắt đầu lại. Lần này không vô hiệu hóa selinux, không thay đổi quyền sở hữu /var và không đặt quyền 777 trên bất kỳ thứ gì CentOS 8 chết yểu vào cuối năm 2021 - chuyển sang Rocky/Alma/OEL/Springdale càng sớm càng tốt. SELinux là một lớp bảo mật khác ngoài các quyền linux thông thường. Bạn có thể xác định các quy tắc không chỉ những gì người dùng/quy trình có thể sửa đổi tệp mà còn có thể sửa đổi chúng trong ngữ cảnh nào Chúng ta hãy xem định nghĩa của
Điều đó có nghĩa là gì? . Bạn có thể tự mình xem bằng cách sử dụng Điểm mấu chốt là. Các tập lệnh do Apache chạy chỉ sửa đổi các tệp có nhãn Các quy tắc về cơ bản là
Lệnh bạn đang thực thi có nội dung "tất cả các tệp và thư mục trong/var/www/data/ đều được đọc và ghi bởi các tập lệnh do httpd chạy" Nếu đó là ý định của bạn, thì bạn có thể thực hiện an toàn Bạn có thể tìm thấy phần giới thiệu hay về SELinux tại đây Bạn cũng có thể vô hiệu hóa nó nếu bạn thấy nó quá nặng nề, với chi phí bảo mật mà nó cung cấp. Nếu đây là công việc cá nhân thì hãy làm những gì khiến bạn hạnh phúc Theo như hai lệnh cuối cùng
Điều này sẽ thay đổi quyền sở hữu thành apache, bạn không cần phải làm điều này nếu các tệp được đọc/ghi theo nhóm và các thư mục là nhóm đọc/ghi/thực thi ( Đây là thỏa thuận, tôi muốn viết một tập lệnh PHP đơn giản để ghi một số dữ liệu vào một tệp. Ví dụ: tôi có dữ liệu “x=10, y=20, z=30” và muốn ghi dữ liệu đó vào tệp theo định kỳ. Đó là một nhiệm vụ đơn giản Tôi đã xem các hướng dẫn khác nhau và sao chép các ví dụ PHP về cách viết văn bản/dữ liệu vào một tệp bằng PHP. Không có cái nào hoạt động. Nó không phàn nàn, nhưng tệp không được tạo. Điều gì đang xảy ra? . Tốt. Nhưng khi tôi cố gắng tạo một tệp trong thư mục mà tôi được phép ghi, PHP không phàn nàn nhưng tệp không được tạo Hầu hết các ví dụ và các cuộc thảo luận trong các diễn đàn khác nhau (bao gồm cả stackoverflow) không trả lời câu hỏi của tôi. Hầu hết mọi người đều gặp vấn đề với "sự cho phép" trong việc ghi tệp. Tôi biết điều đó vì vậy tôi đảm bảo rằng thư mục có thể ghi được bởi chủ sở hữu (quy trình) của Apache2 (có thể là dữ liệu www hoặc root). Tôi đã chăm sóc tốt điều đó, nhưng kịch bản của tôi vẫn không hoạt động. Tôi thậm chí còn làm cho tập tin trỏ tới thư mục “/tmp”. Đó là tôi tạo tệp của mình “/tmp/test. txt”. Đã không làm việc. Tệp đó không được tạo ngay cả Apache/PHP cũng không phàn nàn. Các tập tin chỉ là không có ở đó Tôi đọc lại tệp cấu hình Apache2 và phát hiện ra rằng ở phiên bản hiện tại, Apache2 sẽ không cho phép người dùng ra ngoài thư mục “/var/www/”. Ngay cả “/tmp” cũng có thể ghi được, nó nằm ngoài thư mục “/var/www”. Vì vậy nó không thể được viết. (Apache2 nên phàn nàn. nó không. ) Dung dịch Vì vậy, cuối cùng, tôi đã tạo một thư mục trong /var/www/html. Gọi nó là “/var/www/html/test”. Bây giờ nếu bạn cố gắng ghi vào “test/data. txt”, nó sẽ được tạo trong thư mục đó. (Nó liên quan đến thư mục /var/www/html. ”) Vấn đề đã được giải quyết Tôi chưa nói về khía cạnh bảo mật của việc này, nhưng ít nhất bây giờ vấn đề “không thể ghi vào tệp bằng PHP trong Apache2” của tôi đã được giải quyết. Hy vọng bài viết này sẽ giúp ích cho những ai gặp trường hợp tương tự |