Hướng dẫn do php files need execute permissions? - các tệp php có cần quyền thực thi không?

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
0

Ngoài ra để thực sự làm cho nó thực thi, thêm PHP Shebang:

-rwx------ user apache hack.php
1

Và 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
    #!/bin/php
    
    
    
    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.
  • Hàm
    #!/bin/php
    
    
    
    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.
  • Hàm
    -rwxr-x--x 
    
    1 Trả về
    #!/bin/php
    
    
    
    6 nếu tệp tồn tại và thực thi; Nếu không, nó trả về
    #!/bin/php
    
    
    
    7.

Hãy cùng xem ví dụ sau:

-rwx------ user apache hack.php
3

Bê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
4

Thay đổ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
5

Hàm

-rwxr-x--x 
5 có hai tham số:

  • -rwxr-x--x 
    
    7 là tệp mà bạn muốn thay đổi quyền.
  • $ 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]:

Giá trịSự cho phép
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
6

Lư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
    #!/bin/php
    
    
    
    5,
    #!/bin/php
    
    
    
    8,
    -rwxr-x--x 
    
    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.
  • Sử dụng chức năng
    -rwxr-x--x 
    
    5 để đặt quyền cho một tệp.

Bạn có thấy hướng dẫn này hữu ích không?

Các tệp PHP cần quyền nào?

PHP để người dùng có thể đọc và viết, nhóm đọc.Thay đổi quyền sở hữu của tập tin ...
Chủ sở hữu 6 sẽ là người tải lên các tệp ..
Nhóm 4 sẽ là người phục vụ tập tin.Biến Apache thành một thành viên nhóm ..
Không ai 0 có nghĩa là không người dùng nào khác có thể đọc tệp này ..

Các tệp PHP có thể thực thi không?

Thực thi PHP có thể được sử dụng để chạy các tập lệnh PHP hoàn toàn độc lập với máy chủ web..

Tôi có cần đọc quyền để thực thi một tệp không?

Bạn không cần đọc quyền để thực hiện một tệp.Trên thực tế, nếu bạn có quyền đọc, nhưng không thực thi quyền, bạn không thể thực thi tệp.Quyền thực thi cho phép bạn yêu cầu hệ thống thực thi tệp tập lệnh.. In fact, if you have read permission, but not execute permission, you can't execute the file. The execute permission allows you to ask the system to execute the script file.

Làm cách nào để cho phép một tệp trong PHP?

Sử dụng chmod [] để đặt quyền tệp..

Bài Viết Liên Quan

Chủ Đề