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

  • Trích dẫn

bởi keohbirne » 2016/01/20 15. 31. 41

Xin chào,

tôi là người mới sử dụng máy chủ linux. có thể bạn phát ngán với những kẻ này nhưng mọi người đã bắt đầu một lần

Apache php không thể ghi vào tập tin


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ề
Apache php không thể ghi vào tập tin


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

Apache php không thể ghi vào tập tin

TrevorHSite AdminBài viết. 32447Đã tham gia. 2009/09/24 10. 40. 56Vị trí. Brighton, Vương quốc Anh

  • Trích dẫn

bởi TrevorH » 2016/01/20 15. 58. 31

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ề

Apache php không thể ghi vào tập tin


tôi đã cố gắng tắt selinux - nhưng bây giờ centos dường như bị lỗi.

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.
Thông tin về cài đặt USB trên http. //wiki. xu. org/HowTos/InstallFromUSBkey
CentOS 5 và 6 đã chết, không sử dụng chúng.
Sử dụng Câu hỏi thường gặp về Luke

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 httpd_sys_rw_content_t

Các tệp được gắn nhãn loại này có thể được ghi vào bởi các tập lệnh được gắn nhãn loại httpd_sys_script_exec_t nhưng không thể sửa đổi bằng các tập lệnh được gắn nhãn bất kỳ loại nào khác. Bạn phải sử dụng loại httpd_sys_rw_content_t để gắn nhãn các tệp sẽ được đọc và ghi vào bởi tập lệnh được gắn nhãn loại httpd_sys_script_exec_t. `

Điều đó có nghĩa là gì? . Bạn có thể tự mình xem bằng cách sử dụng ps auxZ. Các tập lệnh PHP của bạn có thể sẽ chạy với tư cách là người dùng apache với ngữ cảnh httpd_sys_script_exec_t

Đ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 httpd_sys_rw_content_t. Bất kỳ tệp nào khác mà apache có thể sở hữu (giả sử nhật ký), sẽ được bảo vệ

Các quy tắc về cơ bản là

PHP, là một tập lệnh do httpd điều hành, chỉ có thể sửa đổi các tệp cụ thể được sửa đổi bởi các tập lệnh do httpd điều hành

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

chown -R apache:apache /var/www/data/

Đ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 (g+rwX). Đó là tùy bạn nếu đó là điều bạn muốn làm so với việc giữ mình là chủ sở hữu

Đâ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ự