Trên một trang web, tôi cung cấp cho người dùng tùy chọn để tải lên các tệp [và sau đó tải xuống].
Tôi đã tải lên một tệp
-rwx------ user apache hack.php
7 và rất ngạc nhiên khi tôi có thể thực thi nó bằng cách gõ vào URL trong trình duyệt.Quyền của tôi trên tệp rất nghiêm ngặt. Tôi không muốn người dùng thực thi các tập lệnh mà họ tải lên. Đây là đầu ra
-rwx------ user apache hack.php
8 có liên quan:-rwxr----- user apache hack.php
Nếu tôi thắt chặt các quyền cho tệp đã tải lên:
-rwx------ user apache hack.php
Hơn người dùng không thể tải xuống tệp, vì Apache không thể đọc nó.
Toàn bộ tình huống có vẻ kỳ quái đối với tôi. Tôi đã cho
-rwx------ user apache hack.php
7 không có quyền thực thi, nhưng tôi vẫn có thể thực thi mà không có bất kỳ rắc rối nào. Tôi còn thiếu gì ở đây?Nói tóm lại, mục tiêu chính là vô hiệu hóa thực thi bất kỳ tệp nào thuộc bất kỳ loại nào được tải lên máy chủ.
Tôi có một thử nghiệm tệp PHP.php
#!/bin/php
Tệp này thuộc sở hữu của root và các quyền của nó là
-rwxr-x--x
Vì vậy, 'những người khác' có thể thực thi, nhưng không thể đọc được.
Khi đăng nhập với tư cách là người dùng khác ngoài root và cố gắng chạy tệp này từ dòng lệnh
php test.php
Có lỗi sau
Could not open input file: test.php
Nếu cho phép +r, nó hoạt động.
Tôi nghĩ rằng chỉ cần thực thi quyền.
Có phải một tệp PHP có cần đọc quyền cho 'người khác' để được thực thi trong dòng lệnh không?
Lưu ý: Sử dụng Ubuntu 10.04 LTS và PHP 5.3.2
Tôi đọc trong một bài đăng tại lỗi máy chủ rằng PHP-FPM cần thực thi quyền. Tuy nhiên, câu trả lời khi tạo một trang web, những quyền và cấu trúc thư mục nào? Chỉ cấp quyền đọc và viết quyền cho PHP-FPM. Có thể tôi không hiểu làm thế nào những người xử lý PHP [hoặc CGI nói chung] hoạt động, nhưng hai tuyên bố có vẻ mâu thuẫn với tôi.execute permissions. However, the answer in When creating a website, what permissions and directory structure? only grants read and write permissions to PHP-FPM. Maybe I don't quite understand how PHP handlers [or CGI in general] work, but the two claims seem contradictory to me.
Theo tôi hiểu, khi Apache / Nginx nhận được yêu cầu
#!/bin/php
0, nó "chuyển" tệp cho một trình xử lý thích hợp. Nghĩa là, tôi tưởng tượng nó như thể #!/bin/php
1 [hoặc #!/bin/php
2 hoặc bất cứ ai là máy chủ web đang chạy như] đã chạy một số lệnh,/usr/sbin/php-fpm foobar.php
Trên thực tế, không, đó là ngây thơ, tôi chỉ nhận ra. PHP-FPM phải là một thể hiện đang chạy [nếu nó được thực hiện và bộ đệm, v.v.], vì vậy có lẽ PHP-FPM chỉ được nói, "Này, nhanh chóng, xử lý tệp này cho tôi!"
Trong cả hai trường hợp, tôi không hiểu tại sao các quyền thực thi lại cần thiết. Nó không giống như máy chủ web cần thực hiện tệp theo nghĩa đen, tức là.execute permissions are necessary. It's not like the webserver needs to literally execute the file, i.e.
./foobar.php
Có phải lỗi của máy chủ có đơn giản là nhầm không?
Khi tôi tạo tệp
#!/bin/php
3, nó không được phép thực thi để tôi không thể chạy tệp PHP.Tôi cần đặt quyền của tệp đó. Tôi muốn tất cả các tệp PHP được tạo đều có quyền thực thi.
Loại tệp tạo mới là
-rw-rw-r-- 1 sohel sohel 0 Apr 11 15:43 test.php
Hỏi ngày 11 tháng 4 năm 2014 lúc 9:50Apr 11, 2014 at 9:50
3
Bạn không cần thêm quyền thực thi trên các tệp PHP, cài đặt
#!/bin/php
4:sudo apt-get install php5-cli
Và bây giờ để chạy tệp PHP của bạn, chỉ cần nhập:
-rwx------ user apache hack.php
0Ngoài ra để thực sự làm cho nó thực thi, thêm PHP Shebang:
-rwx------ user apache hack.php
1Và thêm quyền thực thi trên tệp của bạn:
-rwx------ user apache hack.php
2Đã trả lời ngày 11 tháng 4 năm 2014 lúc 9:59Apr 11, 2014 at 9:59
Sylvain dứa PineauSylvain Pineau
60.3K18 Huy hiệu vàng145 Huy hiệu bạc181 Huy hiệu đồng18 gold badges145 silver badges181 bronze badges
2
Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách xử lý các quyền của tệp PHP, bao gồm kiểm tra và thay đổi quyền của tệp.: in this tutorial, you will learn how to deal with PHP file permissions, including checking and changing file permissions.
Quyền tệp Chỉ định những gì người dùng có thể làm với một tệp, ví dụ: đọc, viết hoặc thực thi nó. Lưu ý rằng PHP tự động & nbsp; cấp các quyền thích hợp đằng sau hậu trường.
Ví dụ: nếu bạn & nbsp; tạo một tệp mới để viết, PHP sẽ tự động cấp quyền đọc và ghi.
PHP cung cấp một số chức năng hữu ích để kiểm tra và thay đổi quyền của tệp.
Kiểm tra quyền tệp
PHP có ba chức năng tiện dụng kiểm tra quyền tệp:
- Hàm
5 Trả về#!/bin/php
6 nếu tệp tồn tại và có thể đọc được; Nếu không, nó trả về#!/bin/php
7.#!/bin/php
- Hàm
8 Trả về#!/bin/php
6 nếu tệp tồn tại và có thể ghi; Nếu không, nó trả về#!/bin/php
7.#!/bin/php
- Hàm
1 Trả về-rwxr-x--x
6 nếu tệp tồn tại và thực thi; Nếu không, nó trả về#!/bin/php
7.#!/bin/php
Hãy cùng xem ví dụ sau:
-rwx------ user apache hack.php
3Bên cạnh các chức năng đó, PHP cũng cung cấp chức năng
-rwxr-x--x
4 trả về một số nguyên, đại diện cho các quyền được đặt trên một tệp cụ thể. Ví dụ:-rwx------ user apache hack.php
4Thay đổi quyền tệp
Để thay đổi quyền hoặc chế độ tệp, bạn sử dụng hàm
-rwxr-x--x
5:-rwx------ user apache hack.php
5Hàm
-rwxr-x--x
5 có hai tham số:
7 là tệp mà bạn muốn thay đổi quyền.-rwxr-x--x
- $ Tham số Quyền bao gồm ba thành phần số octal chỉ định các hạn chế truy cập cho chủ sở hữu, nhóm người dùng trong đó chủ sở hữu và mọi người khác trong chuỗi này.
Hàm
-rwxr-x--x
5 trả về #!/bin/php
6 khi thành công hoặc #!/bin/php
7 khi thất bại.Đối số quyền được biểu thị bằng một số bát phân chứa ba chữ số:
- Digit đầu tiên chỉ định những gì chủ sở hữu của tệp có thể đọc, ghi hoặc thực thi tệp.
- Chữ số thứ hai chỉ định nhóm người dùng trong đó chủ sở hữu có thể đọc, viết hoặc thực thi tệp.
- Chữ số thứ ba chỉ định những gì mọi người khác có thể đọc, viết hoặc thực thi tệp.
Bảng sau đây minh họa giá trị của mỗi chữ số thể hiện quyền truy cập cho người dùng cụ thể [chủ sở hữu, nhóm người dùng hoặc mọi người khác]:
0 | không thể đọc, viết hoặc thực hiện |
1 | Chỉ có thể thực thi |
2 | chỉ có thể viết |
3 | có thể viết và thực thi |
4 | Chỉ có thể đọc |
5 | có thể đọc và thực thi |
6 | có thể đọc và viết |
7 | có thể đọc, viết và thực hiện |
Ví dụ sau đây đặt quyền mà chủ sở hữu duy nhất có thể đọc và ghi tệp, mọi người khác chỉ có thể đọc tệp:
-rwx------ user apache hack.php
6Lưu ý rằng chúng tôi đặt
php test.php
1 trước php test.php
2 để hướng dẫn PHP coi nó là một số bát phân.Bản tóm tắt
- Sử dụng
5,#!/bin/php
8,#!/bin/php
1 để kiểm tra xem một tệp có tồn tại và có thể đọc được, có thể ghi và thực thi không.-rwxr-x--x
- Sử dụng chức năng
5 để đặt quyền cho một tệp.-rwxr-x--x
Bạn có thấy hướng dẫn này hữu ích không?