linux - php 檔案只需要有 讀(r)許可權就可以執行檔案 是 php自己特殊的地方 還是 c java 檔案也是這樣

來源:互聯網
上載者:User

只有讀許可權 可以正常執行檔案 (是boolean使用者在做這個讀檔案的操作嗎?)

只有執行許可權 提示拒絕 (是因為php本身就不是一個執行檔案嗎? 還是因為是解釋型語言??)

同時有 讀 執行 許可權 報錯

回複內容:

只有讀許可權 可以正常執行檔案 (是boolean使用者在做這個讀檔案的操作嗎?)

只有執行許可權 提示拒絕 (是因為php本身就不是一個執行檔案嗎? 還是因為是解釋型語言??)

同時有 讀 執行 許可權 報錯

作業系統對檔案許可權的管理,其複雜程度上遠遠超出我們的想象。經典的三位元字許可權,根本就不是判斷許可權的可靠理由。舉例:

  • ACL許可權系統可以影響影響

  • mount命令的noexec等選項,可以幹擾整個掛載點的許可權

  • 作業系統的許可權機制,未來可能存在增補和擴充(這個其實才是最要命的)

我把話說得極端一點:“檔案帶不帶RWX”就是方便給人看的,根本就構不成“是否有讀/寫/執行許可權”的條件。

事實上對於使用者程式來說,一個檔案能否讀/寫/執行,根本就不能提前判定。我們編程時唯一的辦法就是“試一試”——不做任何提前判斷,直接把操作執行出去,出錯了再說。

而此時如果判執行許可權,那就非常危險了:php解譯器嘗試執行,如果成功了,那麼執行此檔案的行為就必然會發生,不可避免。這就意味著php解譯器可以執行任何有執行權的檔案,哪怕不是php代碼也沒關係。

這樣在系統被黑,存在未知檔案植入的情況下,我們就將失去php解譯器的最後一層保護,駭客可以通過php解譯器,任意執行任何語言編寫的一切惡意程式。其後果將是毀滅性的。

所以“調用php命令來執行指令碼時只需讀取許可權”,這個是當然的,也是必須的。

簡而言之:任何語言的解譯器,都只要求作業系統嘗試讀取代碼檔案,得到代碼文本。解譯器在得到代碼文本之後,會自行負責後續的工作,無需作業系統染指。解譯器和代碼的關係,猶如編輯器和文稿檔案的關係。解譯器絕對不會委託作業系統去執行任意檔案。

java也是這樣的。一切解釋型語言的解譯器都是這樣的,沒有任何例外——過去沒有,現在也沒有,將來更不可能有。

問題出在你的執行方式上:

#使用php的檔案讀取test.php檔案內容執行;$ php -f test.php$ which php/usr/bin/php./test.php #直接執行test.php檔案

兩次進程主體並不一致;

shell執行一個解釋型語言的指令碼時, 會首先在檔案頭尋找shebang行, 按照shebang指定的解譯器處理檔案內容, 如果沒有這一行則預設採用bash解釋指令碼;

$cat x.php #!/usr/bin/php <-這一行就是shebang$./x.php  #凡是具有x檔案都可以這樣直接調用, 並且按照shebang的解譯器處理內容;hello#如果沒有shebang的情況下, 則必須使用解譯器(php)顯式進行調用$ php -f x.php # 有無shebang均無所謂, 只是把x.php檔案內容讀取出來傳遞給php解譯器; 所以檔案必須有r許可權;hello$
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.